gpt4 book ai didi

c++ - 使用 C++ 的汇编语言

转载 作者:太空宇宙 更新时间:2023-11-04 13:49:57 24 4
gpt4 key购买 nike

我应该使用 C++ 和汇编编写程序。程序必须计算数组的平均值。

CPP文件必须从用户那里获取数据并显示结果。数组中必须是实数(带 float )。

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

我哪里错了?谢谢!

最佳答案

由于它是一个 float 组,每个 float 占用 4 个字节,因此您应该将索引乘以 4。另请注意,C 调用约定要求调用者释放参数,因此您的“ret 8”是错误的。

最后的 mov eax, esi 是无关紧要的。

关于c++ - 使用 C++ 的汇编语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23860074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com