请教ADC AH,0 这里为什么是0

OICQshenshi 2012-02-08 03:55:03
求长度为10的字节数组ARRAY之和,并将和存入TOTAL中
LEA SI,ARRAY ;数组首地址-->SI
MOV CX,10 ;数组长度-->CX
AGAIN:ADD AL,[SI] ;求数组和
ADC AH,0
INC SI ;修改指针
LOOP AGAIN
MOV TOTAL,AX ;存和

=======================================================
请教 ADC AH,0 这里为什么是0
...全文
2258 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2012-02-08
  • 打赏
  • 举报
回复
1 ?AH + 1+CF -> AH ?那 AH 除了加了可能的进位之外,不多加了个 1 么?CF 里就已经是进位位了,不需要另外再加的;因为如果前面的 ADD 指令产生了进位则 CF=1,AH 就会增 1 ;如果没有发生进位,那么 CF 为 0,ADC 指令就不对 AH 产生任何的改变。
OICQshenshi 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zara 的回复:]

这么解释有些迷茫吧。
AH 是相加之结果的高位字节,即最后的和是保存在 AX 里的。所以,前面的 ADD AL, [si] 如果产生了进位,就需要将这个进位加到 AH 上,所以就用 ADC AH, 0 来实现;因为不需要再加别的数值了,为了指令的完备,所以就加 0 了,就产生了 AH+0+CF -> AH 实际是 AH+CF -> AH 这么个功能 (CF 就是进位标记位)。
[/Quote]

这个了解了,迷茫的地方是这里为什么明确要写0而不是1,往往CF也可能为1呀
zara 2012-02-08
  • 打赏
  • 举报
回复 2
这么解释有些迷茫吧。
AH 是相加之结果的高位字节,即最后的和是保存在 AX 里的。所以,前面的 ADD AL, [si] 如果产生了进位,就需要将这个进位加到 AH 上,所以就用 ADC AH, 0 来实现;因为不需要再加别的数值了,为了指令的完备,所以就加 0 了,就产生了 AH+0+CF -> AH 实际是 AH+CF -> AH 这么个功能 (CF 就是进位标记位)。
masmaster 2012-02-08
  • 打赏
  • 举报
回复
adc ah,0 ;就是说,二进制数据非0即1。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧