移位时溢出状态寄存器标志

时间:2013-11-20 20:37:29

标签: assembly

两个补充溢出标记表示当您执行“向左逻辑左移”“逻辑右移”或者汇编中的“算术右移”

1 个答案:

答案 0 :(得分:2)

这可能取决于微处理器,您需要检查指令集的相应手册。如果您阅读了AVR指令集手册,它会解释状态寄存器位会发生什么。

对于LSLV(两个补码溢出)由以下因素决定:

V: N ⊕ C (For N and C after the shift)
N: Set if MSB of the result is set; cleared otherwise.
C: Set if, before the shift, the MSB of Rd was set; cleared otherwise.

V是负位(移位后8位值中的最高位)和进位位的异或。从语义上讲,这意味着在移位之前,您的值的高两位具有相反的奇偶校验。

对于LSRV(两个补码溢出)由以下因素决定:

V: N ⊕ C (For N and C after the shift)
N: 0
C: Set if, before the shift, the LSB of Rd was set; cleared otherwise.

在这种情况下,由于N0,因此V只是C的补充。因此,它的位值与移位前的8位值的最低有效位值无关。从语义上讲,如果设置它,则意味着在移位之前,您的值的高两位具有相反的奇偶校验。

对于ASRV(两个补码溢出)由以下因素决定:

V: N ⊕ C (For N and C after the shift)
N: Set if MSB of the result is set; cleared otherwise.
C: Set if, before the shift, the LSB of Rd was set; cleared otherwise.

从语义上讲,ASR将8位值视为已签名,因为它保留了最高位(符号)位。所以N表示该值是负8位值(在移位之前和之后,因为它被保留)。如果移位前的值为负且在移位之前为偶数(最低位清零),则将设置V位,如果移位值为正且奇数(最低位),则将设置V位在班次之前设定了。否则,{{1}}将会清除。