汇编 DEBUG 下调试问题 二进制加减指令

来源:百度知道 编辑:UC知道 时间:2024/05/27 12:50:18
LEA DI,SUM
ADD DI,2
MOV BX,2
MOV AL,FIRST[BX] 这一步看不懂
ADD AL,SECOND+2
MOV [DI],AL
DEX DI
DEX BX
MOV AL,FIRST[BX]
ADC AL,SECOND+1
MOV [DI],AL
DEX DI
DEX BX
MOF AL,FIRST[BX]
ADC AL,SECOND
MOV [DI],AL
麻烦给小弟 详细解释下 !
(FIRST)=112233H
(SECOND)=445566
SUM为 和的存放位置
为什么只取最后两位 能不能说的清楚点呢 我刚学 汇编 呢

这个程序段完成112233H+445566H,并把结果存放在sum单元
first 是这样定义的吧:
first db 11h,22h,33h
second db 44h,55h,66h
对应相加的话应该从最低位开始
所以应该是
MOV AL,FIRST[BX]
这时bx=2,就相当于mov al,first+2(变址寻址嘛)
也就是先计算33H+66H
然后依次计算22H+55H和11H+44H
后两次加法注意进位(使用adc指令)

不是只取后两位,而是从后两位开始相加
LEA DI,SUM
ADD DI,2
MOV BX,2
MOV AL,FIRST[BX]
ADD AL,SECOND+2 先是后两位相加
MOV [DI],AL 存结果
DEX DI 这里应该是dec di,di减一,指向中间字节
DEX BX 这里也是dec bx
MOV AL,FIRST[BX]
ADC AL,SECOND+1 中间字节相加,还有后两位的进位
MOV [DI],AL 存结果
DEX DI 还是dec di
DEX BX 一样的,也是dec bx,指向最高字节
MOF AL,FIRST[BX]
ADC AL,SECOND 相加,还有中间两位相加的进位
MOV [DI],AL 存结果