汇编语言实现数组元素相加

一 代码实现

DATA SEGMENT
ARRAY1  DB  2,5,0,3,-4,5,0,0AH,0FH
ARRAY2  DB  3,5,4,-2,0,8,3,-0AH,20H
COUNT   DB   $-ARRAY2
LEN      DB    ?
SUM      DB     20H  DUP(0)
DATA   ENDS
STACK1 SEGMENT PARA STACK 'STACK'
          DW   20H   DUP(0)
STACK1  ENDS
CODE   SEGMENT
       ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA;把数据段传给AX
       MOV DS,AX;AX进堆栈
MOV BX,-1;初始化BX为-1,是数组从第一个元素开始处理
MOV CX,0;清零CX
MOV CL,COUNT  ;把数组的长度传给CL
NOZERO: INC BX;增量指令,是BX加一处理下一个数组元素
         MOV  AL,ARRAY1[BX];把数组1的元素传给AL
         ADD  AL, ARRAY2[BX];令数组2与数组1对于的元素相加
         MOV   SUM [BX],AL;把相加的结果传给SUN[BX]
         LOOPNE  NOZERO;循环执行,直到处理完数组的所有元素
         JE   ENDO;循环结束,调到ENDO语句
INC  BL;增量指令
ENDO:  MOV LEN,BL;把BL统计的相加后的数组长度传给LEN
       MOV AH,4CH;返回DOS
       INT 21H;停机
CODE   ENDS
 END  START

验证第一次循环
在这里插入图片描述
可以看到001C是下一次循环的开始判断语句
在这里插入图片描述
输入g=0000 001C 验证第一次循环,AL=05,为两数组的第一个元素相加的结果,正确。
在这里插入图片描述
可以推测出数组1,2逻辑地址为0000,相加后的数组在0010,结果分别是05,0A,04,01,FC,0D,03,00。当ZF=1时,循环结束。

二 调试
U命令
在这里插入图片描述
可以看到每一语句对于的地址,用于下面的调试操作

验证第一次循环g命令
在这里插入图片描述
输入g=0000 001C 验证第一次循环,AL=05,为两数组的第一个元素相加的结果,正确。

R命令 第一次循环,循环未结束,此时ZF标志位NE,即ZF=0,循环继续进行
在这里插入图片描述
当循环结束时,ZF标志为ZR,即ZF=1,满足LOOPNE的特点,正确。
在这里插入图片描述
D命令
在这里插入图片描述
可以推测出数组1,2逻辑地址为0000,相加后的数组在0010,结果分别是05,0A,04,01,FC,0D,03,00。对应的十进制的书为5,10,4,1,-4,13,3,0。当ZF=1时,循环结束。结果与实际相同,结果是正确的。

猜你喜欢

转载自blog.csdn.net/weixin_43789635/article/details/112981782