我可以在 Windows x86 的保护模式下访问 16 位寄存器(等)吗AX
?CX
此代码有效吗?mov ax,123
谢谢。
问问题
218 次
3 回答
2
是的,完全没问题(您也可以访问AH
and AL
)。
于 2013-09-27T14:09:44.587 回答
2
有 32 位和 16 位模式。
在 32 位模式下,您可以使用特殊的前缀字节访问 16 位寄存器。
在 16 位模式下,情况正好相反,即前缀使指令成为 32 位。
因此,在每种模式下,您都可以使用所有寄存器,但代码不是二进制兼容的。尽管保护模式经常使用 32 位模式,但这是两个不同的东西。
因此,在您的汇编程序中,您必须对 32 位或 16 位代码使用正确的指令(即使在两种模式下都可以访问 16 位和 32 位寄存器)。然后,汇编器将输出适当的前缀指令,而无需用户进行任何交互。
因此,如果您知道保护模式也处于 32 位模式,请在您的汇编代码中包含 32 位指令,然后您也可以使用 16 位寄存器,它将按预期工作。
如果您省略 32 位指令,您的代码将被汇编,但执行将不是您想要的!
于 2013-09-27T15:25:53.153 回答
0
是的,您可以在保护模式下使用eax
, ax
, ah
, 。al
您甚至可以在真实模式下使用所有这些eax
但不是 rax
(如果您的系统支持)
于 2017-05-17T13:53:24.783 回答