问题描述
- 关于sub指令是怎么影响CF标志位的
-
楼主猜想: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如何影响标志位:
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中的值你就明白了
解决方案二:
不好意思了,好像间隔时间有点长了--回答的真不错
时间: 2025-01-21 02:17:10