【问题标题】:x86 asm convert 16bit value to 8bit?x86 asm 将 16 位值转换为 8 位?
【发布时间】:2012-07-01 09:52:29
【问题描述】:

一些背景信息: 我目前正在学习 intel x86 汇编时以保护模式编写引导加载程序。最终结果将是一个“BootLoader ASCII 蛇”游戏。

我想要做的是将堆栈中的一个值弹出到 AL 寄存器中。这给了我一个错误,因此我假设我必须将一个值弹出到一个 16 位寄存器中。这让我需要将 16 位寄存器中的前 8 位复制到我的 8 位寄存器?

这是我正在使用的指令参考: http://www.mathemainzel.info/files/x86asmref.html

例如,从链接的参考资料中,我看到了将字节转换为字的说明。所有的转换指令似乎都是从较低的寄存器转到较大的寄存器。

【问题讨论】:

    标签: assembly x86


    【解决方案1】:

    实际上AX寄存器代表AHAL寄存器,所以AL代表位0-7和AH位8-15。如果你把即。 0xef80 到 AX 然后 AH 将是 0xef,AL 将是 0x80。

    【讨论】:

    • 是的...在 16 位环境中,您不能按 8 位弹出。所有 push 和 pop 命令都将使用完整的寄存器。因此,您只需执行pop AX,然后使用其中的AL 部分。
    • 我很高兴找到了这个!很有道理,现在我可以睡觉了。谢谢!
    猜你喜欢
    • 2014-08-18
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2014-09-11
    相关资源
    最近更新 更多