繁体   English   中英

C ++汇编语言

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM