【发布时间】:2013-09-27 13:59:36
【问题描述】:
我可以在 Windows x86 的保护模式下访问 16 位寄存器(AX、CX 等...)吗?此代码有效吗? mov ax,123 谢谢。
【问题讨论】:
标签: assembly x86 cpu-registers protected-mode
我可以在 Windows x86 的保护模式下访问 16 位寄存器(AX、CX 等...)吗?此代码有效吗? mov ax,123 谢谢。
【问题讨论】:
标签: assembly x86 cpu-registers protected-mode
有 32 位和 16 位模式。
在 32 位模式下,您可以使用特殊的前缀字节访问 16 位寄存器。
在 16 位模式下,情况正好相反,即前缀使指令成为 32 位。
所以在每种模式下你都可以使用所有的寄存器,但是代码不是二进制兼容的。 尽管保护模式经常使用 32 位模式,但这是两个不同的东西。
因此,在您的汇编程序中,您必须对 32 位或 16 位代码使用正确的指令(即使在两种模式下都可以访问 16 位和 32 位寄存器)。然后,汇编器将输出适当的前缀指令,而无需用户进行任何交互。
因此,如果您知道保护模式也处于 32 位模式,请在您的汇编代码中包含 32 位指令,然后您也可以使用 16 位寄存器,它会按预期工作。
如果您省略 32 位指令,您的代码将被汇编,但执行将不是您想要的!。
【讨论】:
是的,完全没问题(您也可以访问AH 和AL)。
【讨论】:
是的,您可以在保护模式下使用eax,ax,ah,al。
你也可以在实模式下使用它们,即使eax
但不是rax(如果你的系统支持的话)
【讨论】: