我想知道这个 x86 寄存器标志在 DOS/Windows 程序 Debug 中的含义:
辅助进位(AC = 1
或NA = 0
)
它与普通进位具有相同的含义吗?(CY = 1
或NC = 0
)
我想知道这个 x86 寄存器标志在 DOS/Windows 程序 Debug 中的含义:
辅助进位(AC = 1
或NA = 0
)
它与普通进位具有相同的含义吗?(CY = 1
或NC = 0
)
当指令导致第 3 位进位或借位时,设置辅助进位标志。与 CY 相同,但用于字节中低半字节的高位。AC的缩写是old style,标志在Intel处理器手册中被命名为“AF”,是“Adjust Flag”的缩写。它被少数执行 BCD 计算调整的 x86 指令使用,例如 AAC(加法后的 Ascii 调整)和 DAA(加法后的十进制调整)。这些指令可以追溯到计算的石器时代,那时以 BCD 编码提供操作数仍然很普遍。它将十进制数字编码为半字节。就像十进制 99 在 BCD 中是 10011001。
在当时,处理器为涉及 BCD 的计算提供专门的硬件支持是很常见的。那是古老的历史,程序员习惯于用二进制编码数字。好吧,最重要的是编译器。值得注意的是,这些指令不再存在于 x64 指令集中。为更有用的 64 位特定操作码腾出空间。
辅助进位标志AF
监视 4 位(半字节)进位,而通用进位标志监视操作数大小CF
的 MSB 的进位。如果使用 8 位寄存器,这可能是 8 位进位,例如,如果使用 16 位寄存器,则可能是 16 位进位,而当使用相应的寄存器时,这可能是 32 位或 64 位进位,例如,或分别。al
ah
ax
eax
rax