楼主猜想:sub a, b 和 add a, -b 应该差不多。
举个例子:
mov al, 1
mov bl, 2
sub al, bl
首先sub al, bl === add al, -bl
al是正数,原码补码相同为:00000001B
-bl是负数,原码位:10000010B, 补码为:11111110B
add al, -bl的补码结果为:11111111B
所以没有进位,所以CF = 0
因此执行sub al, bl之后的CF应该为0
关于sub指令是怎么影响CF标志位的
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
zzkjliu 2015-04-22 15:44关注SUB如何影响标志位:
1.减法的CF反应的是无符号数运算中的借位情况:当减数>被减数是CF=1,否则CF=0
2.OF:如果两个数的符号相反而结果的符号与减数相同,则OF=1,否则OF=0;
3.SF(运算结果<0为1否则为0)、ZF(零标志)、AF(辅助进位标志)、PF(奇偶标志)根据其含义设置mov eax, 1
sub eax, 2
;这两个结果是EAX=FFFFFFFFH,而1不够2减,所以产生了借位,CF=1
mov eax, 1
add eax, -2
;而这两个就不同了,第一条执行后EAX=1,第二条的-2取补码后是不是等于FFFFFFFEH?而FFFFFFFEH加上EAX中的1是不是就等于FFFFFFFFH???所以没有产生进位也没有产生借位,CF=0
你纠结在-2这里,你试试把2个值颠倒一下变成这样
mov eax, -2
add eax, 1
然后调试,看着EAX中的值你就明白了本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 4无用