Я хотел сделать простой гибридный код, используя 16-битную сборку, masm.
Целью программы было вычисление среднего значения, но каждый раз я получаю очень неправильные результаты и не знаю почему. После операции fadd результат должен быть в st (0). Таким образом, fdiv должен делить st (0) / size, а результат должен храниться в st (0), верно? Таким образом, когда мой вход 1 + 1 + 1 + 1 + 1, выход должен быть 1 - не 6,39,516e + 33. Я что-то не так понял? Сумма всегда была правильной, поэтому проблема с fdiv.
Код на С ++
#include <iostream.h>
#include <stdlib.h>
#include <math.h>
extern "C" float f1(float *arr, int);
int main()
{
int size=5;
float *array;
cout << "Give your numbers:" << endl;
for(int i=0; i<size; i++)
cin>> *(array+i);
cout<<"\nAverage = "<< f1(array, size) ;
return 0;
}
Монтаж
.model SMALL, C
.data
.code
PUBLIC f1
f1 PROC NEAR
push BP
mov BP, SP
mov ax, [bp+6]
mov cx, ax
mov ax, [bp+4]
mov bp, ax
fld dword ptr [bp]
dec cl
Loop1:
add bp, 4
fld dword ptr [bp]
fadd
loop Loop1
mov bp, sp
fdiv dword ptr [bp +6]
pop BP
ret
f1 ENDP
.stack
db 100(?)
END