【问题标题】:Are 16 bit registers accessible in Protected mode x86?在保护模式 x86 下可以访问 16 位寄存器吗?
【发布时间】:2013-09-27 13:59:36
【问题描述】:

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

【问题讨论】:

    标签: assembly x86 cpu-registers protected-mode


    【解决方案1】:

    有 32 位和 16 位模式。

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

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

    所以在每种模式下你都可以使用所有的寄存器,但是代码不是二进制兼容的。 尽管保护模式经常使用 32 位模式,但这是两个不同的东西。

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

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

    如果您省略 32 位指令,您的代码将被汇编,但执行将不是您想要的!。

    【讨论】:

    • 您应该知道,段寄存器(CS、DS、ES、SS、FS 和 GS)中的值在实模式和保护模式下具有完全不同的含义。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      是的,您可以在保护模式下使用eax,ax,ah,al。 你也可以在实模式下使用它们,即使eax

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

      【讨论】:

        猜你喜欢
        • 2013-11-22
        • 2019-08-23
        • 1970-01-01
        • 2016-11-05
        • 2021-10-12
        • 2019-03-11
        • 1970-01-01
        • 2012-01-12
        相关资源
        最近更新 更多