Assembler + C, wyświetlanie floata

Assembler + C, wyświetlanie floata
sugar_hiccup
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 176
0

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

Kopiuj
#include <stdio.h>

extern float pi();

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

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

	return 0;
}
Kopiuj
global _pi

_pi:
	push ebp
	mov ebp, esp

	finit
	fldpi
	fstp dword [res]

	mov eax, [res]

	pop ebp

	ret

res dd 0
sugar_hiccup
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 176
0

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

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
2

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

Kopiuj
section .text

global _pi
 
_pi:
    fldpi 
ret
Kopiuj
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
sugar_hiccup
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 176
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.