保护模式x86中是否可以访问16位寄存器?

时间:2013-09-27 13:59:36

标签: assembly x86 cpu-registers protected-mode

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

3 个答案:

答案 0 :(得分:2)

是的,完全没问题(您还可以访问AHAL)。

答案 1 :(得分:2)

有一个32位和16位模式。

  • 在32位模式下,您可以使用特殊的前缀字节访问16位寄存器。

  • 在16位模式下,情况正好相反,即前缀使指令为32位。

因此,在每种模式下,您都可以使用所有寄存器,但代码不是二进制兼容的。 即使保护模式通常使用32位模式,这些也是两回事。

因此,在汇编程序中,您必须使用适当的32或16位代码指令(即使在两种模式下都可以访问16位和32位寄存器)。然后,汇编器将输出适当的前缀指令,而无需用户进行任何交互。

因此,如果您知道保护模式也处于32位模式,则在汇编代码中包含32位指令,然后您也可以使用16位寄存器,它将按预期工作。

如果省略32位指令,代码将汇编,但执行不符合您的意图!

答案 2 :(得分:0)

是的,您可以在受保护模式下使用seq_page_costeaxaxah。 此外,即使al

,您也可以在实模式下使用所有这些内容

但不是 eax(如果您的系统支持)