汇编语言——分别求10个数的正数和负数之和
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}
程序运行结果如下: