两个补充溢出标记表示当您执行“向左逻辑左移”,“逻辑右移”或者汇编中的“算术右移”?
答案 0 :(得分:2)
这可能取决于微处理器,您需要检查指令集的相应手册。如果您阅读了AVR指令集手册,它会解释状态寄存器位会发生什么。
对于LSL
,V
(两个补码溢出)由以下因素决定:
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位值中的最高位)和进位位的异或。从语义上讲,这意味着在移位之前,您的值的高两位具有相反的奇偶校验。
对于LSR
,V
(两个补码溢出)由以下因素决定:
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.
在这种情况下,由于N
为0
,因此V
只是C
的补充。因此,它的位值与移位前的8位值的最低有效位值无关。从语义上讲,如果设置它,则意味着在移位之前,您的值的高两位具有相反的奇偶校验。
对于ASR
,V
(两个补码溢出)由以下因素决定:
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}}将会清除。