我一直在阅读和观看教程,但由于我的导师没有详细介绍,或者她的解释非常模糊,我只会感到更加困惑。
(旗帜中的值仅由我们决定。)
Example 1:
1010 1010 0100 0101
- 0100 0110 0111 1000
___________________
0110 0011 1100 1101
SF = 0
ZF = 0
PF = 0
CF = 1
OF = 1
AF = 1
为什么CF
和OF
设置为1?根据我的理解,AF
是在执行 b3
或借入时设置的,这意味着&#39}是需要借钱的人。我是对的吗?
Example 2:
0110 0111 1011 0100
+ 1111 1010 1100 1110
_____________________
1 0110 0010 1000 0010
SF = 0
ZF = 0
PF = 0
CF = 1
OF = 1
AF = 1
这里设置了AF
,因为......?我认为AF
仅在执行时(或需要借用时)设置?
另外,对于CF
,据我所知,如果有一个MSB的进位,它也不能被设置,并且也是一个进位。它像XOR一样工作,只有一个条件可以成立。
这让我困惑了好几天了。是的,我仍然对这些标志如何工作的差异感到困惑,这取决于数字是签名还是未签名,因为我的导师从未向我们提及过。
答案 0 :(得分:0)
mov ax, 1010101001000101b
mov bx, 0100011001111000b
sub ax, bx
AF = 1:您从最低半字节(最低4位)借用到下一个半字节(从第3位到第4位,当您调用最低位时位第0位)
0101
- 1000
______
11101
mov ax, 0110011110110100b
mov bx, 1111101011001110b
add ax, bx
AF = 1 您有从第3位到第4位的进位:
0100
+ 1110
______
10010
EFLAGS寄存器的状态标志(位0,2,4,6,7和11)表示算术指令的结果,
例如ADD,SUB,MUL和DIV指令。状态标志功能是:
CF(位0)进位标志 - 设置算术运算是否从结果的最重要位产生进位或借位;否则清除。该标志表示无符号整数运算的溢出条件。它也用于多精度算术
PF(第2位)奇偶校验标志 - 设置结果的最低有效字节是否包含偶数个1位;否则清除。
AF(第4位)调整标志 - 如果算术运算产生结果的第3位的进位或借位,则置位;否则清除。该标志用于二进制编码的十进制(BCD)算术
ZF(第6位)零标志 - 如果结果为零则设置;否则清除。
SF(第7位)符号标志 - 设置等于结果的最高有效位,即有符号整数的符号位。 (0表示正值,1表示负值。)
OF(第11位)溢出标志 - 设置整数结果是否过大,正数或过小的负数(不包括符号位)以适合目标操作数;否则清除。该标志表示有符号整数(二进制补码)算术的溢出条件。