Как правильно использовать FDIV?сборочный - PullRequest
0 голосов
/ 14 мая 2018

Я хотел сделать простой гибридный код, используя 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
...