能力值:
( LV5,RANK:60 )
|
-
-
2 楼
这关键要看CF位的值,如果CF为零,结果就是a0d4;
如果CF为1,结果就是a0d5,不要迷信书,书也有可能印错。
你可以在Debug下用a命令输入试一下,我试过了,结果就是这样。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
谢谢您的解答
如果这么写是不是就对了呢?
mov ax,4652H
add ax,f0f0H
mov dx,34H
adc dx,a0a0H
这个时候(dx)=0A0D5H 就成立了吧?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
mov ax,4652H
add ax,f0f0H ; (ax) = 13742H.无符号加法溢出,进位标志位置位cf=1
mov dx,34H ;mov指令不影响标志位,cf=1不变
adc dx,a0a0H ;dx = dx + a0a0H + cf
因此, (dx) = 0a0d5H.
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
中国唯一搞点真本事的也就看雪的这些大大们了
谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
同意,学习了,也理解了ADC的用法,不过我想问的是:
mov ax,4652H
add ax,f0f0H ; (ax) = 13742H.无符号加法溢出,进位标志位置位cf=1
这个ADD运算完后如果是16位需要进位的话就把进位放在进位标志位cf里面去了哈?(貌似按注释应该是这样)
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
如你所说,是带进位加法,0A0A0H写成二进制是1010000010100000,系统会把它看成一个有符号的数,所以其实他是一个负数,你就是这个地方理解错了。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
前面还有其他代码吗?可能是其他代码修改了CF标志位
|
|
|