【问题标题】:NASM - Place 8 bits of data in a specific place within a 32-bit registerNASM - 将 8 位数据放在 32 位寄存器中的特定位置
【发布时间】:2012-03-08 17:58:20
【问题描述】:

假设我在 bl 寄存器中有一些 8 位数据,我想把它放在 eax 最右边的 8 位中。有没有办法直接做到这一点?我想答案很简单,只是我还没找到。

显然我可以将 ebx 乘以 FFFFFFh,但是我必须重新排列我的寄存器,因为结果将进入 eax。

【问题讨论】:

    标签: nasm cpu-registers


    【解决方案1】:

    如果您以与英特尔文档相同的方式表示“最右边”,例如你指的是 7-0 位,那么 mov al, bl 有什么问题?

    【讨论】:

    • 然后一个简单的mov al, bl 和一个shl eax, 8 会将数据移动到位8-15。 shl eax, 16 将其移至 16-23,shl eax, 24 将其移至 24-31。 :) 你可能想事先xor eax, eax
    • 如果我已经有第 24-31 位的信息想要保留在那里,有没有办法做到这一点?
    • 当然。不过,在这种情况下,您需要使用另一个寄存器。我将在这里使用ecxxor ecx, ecxmov cl, blshl ecx, 8or eax, ecx 会将您的数据从 bl 获取到 eax 的第 15-8 位,而无需修改 eax 中的任何其他数据。
    猜你喜欢
    • 2015-12-26
    • 2020-11-21
    • 2014-11-18
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2021-04-05
    相关资源
    最近更新 更多