首页 > 解决方案 > 如何正确使用FDIV?集会

问题描述

我想用 16 位汇编 masm 做一个简单的混合代码。目标是让程序计算平均值,但我每次都得到非常错误的输出,我不知道为什么。在 fadd 操作之后,结果应该在 st(0) 中。所以 fdiv 应该划分 st(0)/size 并且结果应该存储在 st(0) 中,对吧?所以当我的输入是 1+1+1+1+1 时,输出应该是 1——而不是 6.39,516e+33。我是不是搞错了什么?总和总是正确的,所以 fdiv 部分有问题。

C++ 中的代码

#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

标签: assemblyaveragemasmfpux87

解决方案


推荐阅读