Assembly 16位寄存器在保护模式x86下是否可访问?

Assembly 16位寄存器在保护模式x86下是否可访问?,assembly,x86,cpu-registers,protected-mode,Assembly,X86,Cpu Registers,Protected Mode,我能否在Windows x86上以保护模式访问16位寄存器(AX,CX等)?这个代码有效吗mov ax,123谢谢。是的,它很好(你也可以访问AH和AL)。是的,它很好(你也可以访问AH和AL)。有32位和16位模式 在32位模式下,您可以使用特殊的前缀字节访问16位寄存器 在16位模式下,情况正好相反,即前缀生成32位指令 因此,在每种模式下,您都可以使用所有寄存器,但代码不是二进制兼容的。 尽管受保护模式通常使用32位模式,但这是两件不同的事情 因此,在汇编程序中,必须对32位或16位代

我能否在Windows x86上以保护模式访问16位寄存器(
AX
CX
等)?这个代码有效吗<代码>mov ax,123谢谢。

是的,它很好(你也可以访问
AH
AL
)。

是的,它很好(你也可以访问
AH
AL
)。

有32位和16位模式

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

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

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

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

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


如果省略32位指令,代码将进行汇编,但执行将不符合预期

有32位和16位模式

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

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

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

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

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


如果省略32位指令,代码将进行汇编,但执行将不符合预期

是的,您可以在保护模式下使用
eax
ax
ah
al
。 此外,您还可以在实模式下使用它们,甚至
eax


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

是的,您可以在保护模式下使用
eax
ax
ah
al
。 此外,您还可以在实模式下使用它们,甚至
eax


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

您应该知道段寄存器(CS、DS、ES、SS、FS和GS)中的值在实模式和保护模式下具有完全不同的含义。您应该知道段寄存器(CS、DS、ES、SS、FS和GS)中的值在真实模式和受保护模式中具有完全不同的含义。