2013-09-27 40 views

回答

2

有32位和16位模式。

  • 在32位模式下,您可以使用特殊的前綴字節訪問16位寄存器。

  • 在16位模式下,情況正好相反,即前綴使得指令爲32位。

因此,在每種模式下,您可以使用所有寄存器,但代碼不是二進制兼容的。 儘管保護模式通常使用32位模式,但這些是兩件不同的事情。

所以在你的彙編程序中,你必須使用32或16位代碼的正確指令(即使在兩種模式下都可以訪問16位和32位寄存器)。然後彙編器將輸出適當的前綴指令,而不需要來自用戶的任何交互。

所以,如果你知道保護模式也是32位模式,在你的彙編代碼中包含32位指令,然後你也可以使用16位寄存器,它將按預期工作。

如果你忽略了32位指令,你的代碼將被彙編,但執行不會是你想要的!

+0

尼斯回答,謝謝! –

+0

您應該知道,段寄存器(CS,DS,ES,SS,FS和GS)中的值在實際和保護模式下具有完全不同的含義。 –

2

是的,這是完全正常的(你也可以訪問AHAL)。

0

是的,你可以在保護模式下使用eaxaxahal。 您也可以使用所有的人都在實模式下甚至eax

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

相關問題