Mam drobny problem.

Napisałem już kilka programików w ASM operujących na liczbach całkowitych i jakoś to działa.

Dzisiaj jednak zacząłem z FPU i mam pierwsze problemy.

Działam na Ubuntu z NASM - nie piszę całości w ASM, a wywołuję w C wstawkę napisaną w ASM.

Weźmy taki kod z C:

#include <stdio.h>
#include <time.h> 

extern int fpu_sincos(float *number_1, float *number_2);

int main()
{
	int result;

	float number_1;
	float number_1_back;
	float number_2;
	float number_2_back;

	printf("number_1 = ");
	scanf("%f", &number_1);

	printf("number_2 = ");
	scanf("%f", &number_2);

	number_1_back = number_1;
	number_2_back = number_2;

	result = fpu_sincos(&number_1, &number_2);


	printf("\nSin(%f) = %f", number_1_back, number_1);
	printf("\nCos(%f) = %f", number_2_back, number_2);

	return 0;

}

i tutaj wstawkę w ASM:

global	fpu_sincos

fpu_sincos:

	finit

	fld dword [ebp+8]
	fld dword [ebp+12]

	fsincos
	fcos

	fstp dword [ebp+12]
	fstp dword [ebp+8]

	ret

Po mojemu to powinno zadziałać ale jednak ani błędu nie ma, ani też wartości nie są zwracane.

Na początek na stos FPU załadowuję dwie zmienne, wykonuję na nich operacje sin/cos i z powrotem ładuję je do pamięci. Problem w tym, że jak potem odwołuję się do wyników w C to one się nie zmieniają.