Mam napisać program w ASM i C, który obliczy mi wartość funkcji liniowej dla zadanego argumentu i współczynnika kierunkowego:
Kod w C:
#include <stdio.h>
float wartosc2=0;
void liniowa(float arg, float wsp,float* wartosc);
float funkcja(float arg, float wsp){
liniowa(arg, wsp, &wartosc2);
return wartosc2;
}
int main() {
float i;
float wsp;
scanf("%f", wsp);
for(i=0;i<7;i++){
printf("%f \n",funkcja(i, wsp));
}
return 0;
}
Kod w Ameblerze
.686
.model flat
public _liniowa
.data
.code
_liniowa PROC
push ebp
mov ebp, esp
mov esi, [ebp+8]; przechowuje argument
mov edi, [ebp+16]; pzrechowuje współczynnik a
mov edx, [ebp+24]; wskaźnk na wynik
finit
fld qword PTR [esi]
fld qword PTR [edi]
fmul st(1), st(0)
fstp qword PTR [edx]
pop ebp
ret
_liniowa ENDP
END
Niby wszystko ładnie się kopliluje. Ale po podaniu danej (tzn po wykonaniu scanfa), włącza mi się Just-In-Time-Debugger (Korzystam z Visual Studio 2008) z takim komunikatem:
An unhandled win32 exception occured in liniowa.exe [5676]`
Co mam źle???