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

一 代码实现

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时,循环结束。结果与实际相同,结果是正确的。

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值