我可以在Windows x86的受保护模式下访问16位寄存器(AX
,CX
等...)吗?这段代码会有效吗? mov ax,123
谢谢。
答案 0 :(得分:2)
是的,完全没问题(您还可以访问AH
和AL
)。
答案 1 :(得分:2)
有一个32位和16位模式。
在32位模式下,您可以使用特殊的前缀字节访问16位寄存器。
在16位模式下,情况正好相反,即前缀使指令为32位。
因此,在每种模式下,您都可以使用所有寄存器,但代码不是二进制兼容的。 即使保护模式通常使用32位模式,这些也是两回事。
因此,在汇编程序中,您必须使用适当的32或16位代码指令(即使在两种模式下都可以访问16位和32位寄存器)。然后,汇编器将输出适当的前缀指令,而无需用户进行任何交互。
因此,如果您知道保护模式也处于32位模式,则在汇编代码中包含32位指令,然后您也可以使用16位寄存器,它将按预期工作。
如果省略32位指令,代码将汇编,但执行不符合您的意图!
答案 2 :(得分:0)
是的,您可以在受保护模式下使用seq_page_cost
,eax
,ax
,ah
。
此外,即使al
但不是 eax
(如果您的系统支持)