Assembler + C, wyświetlanie floata

0

Chciałbym wyświetlić liczbę pi. Program się kompiluje, ale nie działa.

#include <stdio.h>

extern float pi();

int main(int argc, char *argv[])
{
	float x; 
	x = pi();

	printf("pi = %f", x);

	return 0;
}
global _pi

_pi:
	push ebp
	mov ebp, esp

	finit
	fldpi
	fstp dword [res]

	mov eax, [res]

	pop ebp

	ret

res dd 0
0

To mi średnio pomaga, bo chcę przekazać floata z asm do C, a nie wywołać printfa w assembly.

2

Za dużo kombinujesz ;-) Wystarczy fldpi i od razu ret.

section .text

global _pi
 
_pi:
    fldpi 
ret
C:\myprogs\asm>nasm -f coff pi.asm -o pi.o

C:\myprogs\asm>gcc testpi.c pi.o -o testpi.exe

C:\myprogs\asm>testpi
pi = 3.141593
0

Dziękuję :) Myślałem, że to, co zwraca procedura zawsze ma być w EAX.

1 użytkowników online, w tym zalogowanych: 0, gości: 1