在 AVR MCU 上,状态寄存器中的 S 标志如何工作?
On an AVR MCU, how does the S flag in the status register work?
V 和 S 标志在 ATMEGA328 上的具体作用是什么?
ATMEGA328 具有独立的符号 (S)、进位 (C)、2 的补码溢出 (V) 和负 (N) 标志。 N 是 MSB(对应于其他处理器上的符号位)。数据表中没有很好地解释 V 标志的具体操作方式。据我了解,V一般计算为N⊕C。但是 S 在数据表中定义为 V⊕N,这意味着它等于 N⊕N⊕C 或只是 C。如果这是真的,那么为它设置一个单独的标志就没有多大意义,所以我怀疑我误解了这里有东西。
V 通常与 N XOR C 不同。
我通过查看 manual 中的 ADC(带进位加法)指令并考虑如果将 0xFF 添加到 0x02 得到 0x01 会发生什么情况,我找到了一个反例。
- C 为 1,因为 0xFF + 0x02 = 0x101 大于 0xFF,因此加法的最高位有一个进位。
- N 将为 0,因为它只是结果的 MSB。
- V 将是 0,因为如果发生二进制补码溢出,它被定义为 1。从补码的角度来看,我们只是简单地把-1和2相加得到1,所以不会溢出。您可以通过仔细评估手册中计算 V 的公式来确认这一点。
V 和 S 标志在 ATMEGA328 上的具体作用是什么?
ATMEGA328 具有独立的符号 (S)、进位 (C)、2 的补码溢出 (V) 和负 (N) 标志。 N 是 MSB(对应于其他处理器上的符号位)。数据表中没有很好地解释 V 标志的具体操作方式。据我了解,V一般计算为N⊕C。但是 S 在数据表中定义为 V⊕N,这意味着它等于 N⊕N⊕C 或只是 C。如果这是真的,那么为它设置一个单独的标志就没有多大意义,所以我怀疑我误解了这里有东西。
V 通常与 N XOR C 不同。
我通过查看 manual 中的 ADC(带进位加法)指令并考虑如果将 0xFF 添加到 0x02 得到 0x01 会发生什么情况,我找到了一个反例。
- C 为 1,因为 0xFF + 0x02 = 0x101 大于 0xFF,因此加法的最高位有一个进位。
- N 将为 0,因为它只是结果的 MSB。
- V 将是 0,因为如果发生二进制补码溢出,它被定义为 1。从补码的角度来看,我们只是简单地把-1和2相加得到1,所以不会溢出。您可以通过仔细评估手册中计算 V 的公式来确认这一点。