【发布时间】:2012-03-08 17:58:20
【问题描述】:
假设我在 bl 寄存器中有一些 8 位数据,我想把它放在 eax 最右边的 8 位中。有没有办法直接做到这一点?我想答案很简单,只是我还没找到。
显然我可以将 ebx 乘以 FFFFFFh,但是我必须重新排列我的寄存器,因为结果将进入 eax。
【问题讨论】:
标签: nasm cpu-registers
假设我在 bl 寄存器中有一些 8 位数据,我想把它放在 eax 最右边的 8 位中。有没有办法直接做到这一点?我想答案很简单,只是我还没找到。
显然我可以将 ebx 乘以 FFFFFFh,但是我必须重新排列我的寄存器,因为结果将进入 eax。
【问题讨论】:
标签: nasm cpu-registers
如果您以与英特尔文档相同的方式表示“最右边”,例如你指的是 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。
ecx。 xor ecx, ecx、mov cl, bl、shl ecx, 8 和 or eax, ecx 会将您的数据从 bl 获取到 eax 的第 15-8 位,而无需修改 eax 中的任何其他数据。