assembly - 如何正确使用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
解决方案
推荐阅读
- python - Python 多核 CSV 短程序,需要建议/帮助
- java - Orbeon 软件界面与 Marklogic 的集成
- drupal - Create custom menu tab on a users profile page in Drupal 8
- python - Django:有什么方法可以将连续的 model.save() 操作作为 1 个单独的 DB 请求执行?
- html - 识别滚动条所有者
- python - 删除每一行的特定列
- c# - 如何处理单个 Web API 调用返回的不同模型?
- c - 未对齐地址 0xbebebebe 中的成员访问,用于类型 struct ... 需要 4 字节对齐
- visual-studio-code - 键盘快捷键编辑器中缺少指向 keybindings.json 的链接
- c++ - 使用类方法时的空输出