Napisac podprogram w asemblerze przystosowany do wywoływania z poziomu jezyka C. Prototyp funkcji implementowanej przez ten podprogram ma postac:
float srednia_harm (float * tablica, unsigned int n);
Podprogram ten powinien obliczyc srednia harmoniczna dla n liczb zmiennoprzecinkowych a1, a2, a3,..., an, zawartych w tablicy tablica. Napisać take krótki program przykładowy w jezyku C ilustrujacy sposób wywoływania tego podprogramu.
.686
.model flat
public _srednia_harm
.code
jeden dd 1.0
_srednia_harm PROC
push ebp
mov esp,ebp
push esi
mov ecx, [ebp+12] ; liczby elemetnow
mov esi, [ebp+8] ; adres tab
finit
fldz ; aktualna wartosc sumy
;st(0)=0
mianownik:
fld dword PTR jeden
;ST(0)=1, ST(1)=suma
fld dword PTR [esi] ;ladowanie elementow tablicy
;ST(0)=tab[i], ST(1)=1 ST(2)=suma
fdivp st(1), st(0) ; st(1)=st(1)/(st0)
;ST(0)=1/tab[i], ST(1)=suma
faddp st(1),st(0) ; st(1)=st(0)+st(1)
;st(0)=suma+1/tab[i]
add esi,4
loop mianownik
pop esi
pop ebp
ret
_srednia_harm ENDP
END
Moje pytanie brzmi czy mogę wykonać taki rozkaz:
fld dword PTR [esi]
Pozdrawiam