我有一个关于如何将一个位从一个寄存器存储到另一个寄存器的问题。以下是我需要回答的问题:
写入一系列指令,将其从寄存器edx移至AL位5至12。
这是我到目前为止的代码:
mov edx,8F1h
ror edx,4
l1:
;store this bit in the al register
loop l1我知道这不是很多,但我完全不知道如何保存位并将其转移到另一个寄存器。在理解了这一点之后,我可以将循环放在它周围。
此外,代码或建议也很棒。提前感谢您的帮助!
发布于 2014-05-17 06:04:04
我相信vhu的答案是不正确的。根据这个32位寄存器(在本例中为edx)的简单说明,通过分析x86汇编中的位有效顺序可以看出这一点:
-dh
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 11 10 09 08 07 06 05 04 03 02 01 00
因此,我们可以推断位5-12位于右侧,即edx的“低位”或“最低有效”字(2字节)。也就是说,要存储这些位,我们必须使用rol指令,而不需要loop指令...
mov edx, 8f1h
rol edx, 11 ;(15 - 5) + 1 is our distance from bit 5 to the least significant bit of dx (and also dl)
mov al, dl ;now al contains bits 5-12 of edx prior to rotation, starting with the least significant bit of al如果您想恢复edx,只需在代码末尾添加以下内容:
ror edx, 11由于edx中的位5-12的宽度是8字节,因此不需要使用and指令的“位掩码”。
简单的成功!
发布于 2014-05-17 08:14:35
在之前的回答中,我没有得到所有的轮换。
简单的有什么问题:
mov al, dl
and al, 0ff0hhttps://stackoverflow.com/questions/23690402
复制相似问题