0

我可以在 Windows x86 的保护模式下访问 16 位寄存器(等)吗AXCX此代码有效吗?mov ax,123谢谢。

4

3 回答 3

2

是的,完全没问题(您也可以访问AHand 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 回答