汇编语言——分别求10个数的正数和负数之和

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

int main()

{

int

BUFFER[10]={1,2,1,-1,1,1,1,-1,-8,-1},POSITIVE,NEGATIVE;//POSITIVE用于存储正数之和,NEGATIVE用于存储负数之和

_asm

{

//把寄存器EAX初始化为,EAX用于存储数组中的负数之和

XOR EAX,EAX

//把寄存器EBX初始化为,EBX用于存储数组中的所有的数之和,则

EBX-EAX为数组中正数之和

XOR EBX,EBX

//ECX作为计数器,初始值为

MOV ECX,11

//把BUFFER的地址给ESI

LEA ESI,BUFFER

LABEL:

//寄存器EDX用于存储数组的当前的值

MOV EDX,[ESI]

//ESI加,指向数组的下一个元素

ADD ESI,4

//计数器ECX减

DEC ECX

//ECX为,表明循环结束,转至最后的标签LAST

JZ LAST

//比较EDX(数组当前值)和的大小

CMP EDX,0

//若EDX大于等于,则转至标签LABEL1

JGE LABEL1

//若EDX为负数,则把EDX加到寄存器EAX(存储数组中的所有负数之和)中

ADD EAX,EDX

LABEL1:

//不管前面怎么跳转,这句话都会执行,所以EBX存储的时数组中所有数据的和

ADD EBX,EDX

//跳转至LABEL,开始下一次循环

JMP LABEL

LAST:

//把EBX减去EAX的值,得到所有正数和放到EBX中

SUB EBX,EAX

//把EBX的值给POSITIVE

MOV POSITIVE,EBX

//把EAX的值放到NEGATIVE中

MOV NEGATIVE,EAX

}

printf("这个数为:");

for(int i=0;i<10;i++)

{

printf("%d,",BUFFER[i]);

}

printf("\n正数之和为:%d",POSITIVE);

printf("\n负数之和为:%d\n",NEGATIVE);

return 0;

}

程序运行结果如下:

相关文档
最新文档