Asembler :: Coś tutaj nie do końca działa

Zaczęty przez Rysiu, 15 Maj 2011, 12:01

Rysiu

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ą.