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 spowrotem ładuję je do pamięci. Problem w tym, że jak potem odwołuję się do wyników w C to one się nie zmieniają.