首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-03-14 
请教ADC AH,0 这里为什么是0Assembly code求长度为10的字节数组ARRAY之和,并将和存入TOTAL中LEA SI,ARRAY;

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

Assembly code
求长度为10的字节数组ARRAY之和,并将和存入TOTAL中    LEA SI,ARRAY    ;数组首地址-->SI    MOV CX,10    ;数组长度-->CX  AGAIN:ADD AL,[SI]    ;求数组和    [color=#FF0000]ADC AH,0[/color]    INC SI        ;修改指针    LOOP AGAIN    MOV TOTAL,AX    ;存和

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

[解决办法]
adc ah,0 ;就是说,二进制数据非0即1。
[解决办法]
这么解释有些迷茫吧。
AH 是相加之结果的高位字节,即最后的和是保存在 AX 里的。所以,前面的 ADD AL, [si] 如果产生了进位,就需要将这个进位加到 AH 上,所以就用 ADC AH, 0 来实现;因为不需要再加别的数值了,为了指令的完备,所以就加 0 了,就产生了 AH+0+CF -> AH 实际是 AH+CF -> AH 这么个功能 (CF 就是进位标记位)。
[解决办法]
1 ?AH + 1+CF -> AH ?那 AH 除了加了可能的进位之外,不多加了个 1 么?CF 里就已经是进位位了,不需要另外再加的;因为如果前面的 ADD 指令产生了进位则 CF=1,AH 就会增 1 ;如果没有发生进位,那么 CF 为 0,ADC 指令就不对 AH 产生任何的改变。

热点排行