[英]Assembly language with C++
我应该使用C ++和Assembly编写程序。 程序必须计算数组的平均值。
CPP文件必须从用户那里获取数据并显示结果。数组中必须是实数(带浮点数)。
ASM文件必须计算该数组的平均值。
那是.cpp文件:
#include <iostream.h>
#define L 4
extern "C" float average(float* tab, int G);
int main()
{
float tab[L]={0};
cout<<"Enter array: \n";
for(int i=0; i<L; i++)
cin >> tab[i];
cout << "Average value of entered array = " << average(tab, L);
cout << "\nThe end of the programm\n";
return 0;
}
这是我的汇编代码:
.386
.model SMALL,c
PUBLIC average
.stack 100h
.data
.code
average PROC
push ebp
mov ebp, esp
push esi
mov ecx, [ebp+12]
mov esi, [ebp+8]
finit ;coprocessor
fldz
sum:
fadd dword ptr [esi+ecx-4] ;ST(0)=ST(0)+ST(i)
loop sum ;retry sum while cx!=0
fidiv dword ptr [ebp+12] ;Division
pop esi ;End of the programm
pop ebp
mov eax, esi
ret 8
average ENDP
END
结果始终为2.422547e + 198
我哪里出错了? 谢谢!
由于它是一个数组,每个数组占用4个字节,因此您应该将索引乘以4。还要注意,C调用约定要求调用者将释放参数,因为这样的“ ret 8
”是错误的。
末尾的mov eax, esi
无关紧要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.