首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Masm32,获取位和位值

Masm32,获取位和位值
EN

Stack Overflow用户
提问于 2014-05-16 07:35:04
回答 2查看 519关注 0票数 1

我有一个关于如何将一个位从一个寄存器存储到另一个寄存器的问题。以下是我需要回答的问题:

写入一系列指令,将其从寄存器edx移至AL位5至12。

这是我到目前为止的代码:

代码语言:javascript
复制
     mov edx,8F1h
     ror edx,4
l1:
     ;store this bit in the al register
loop l1

我知道这不是很多,但我完全不知道如何保存位并将其转移到另一个寄存器。在理解了这一点之后,我可以将循环放在它周围。

此外,代码或建议也很棒。提前感谢您的帮助!

EN

回答 2

Stack Overflow用户

发布于 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指令...

代码语言:javascript
复制
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,只需在代码末尾添加以下内容:

代码语言:javascript
复制
ror edx, 11

由于edx中的位5-12的宽度是8字节,因此不需要使用and指令的“位掩码”。

简单的成功!

票数 0
EN

Stack Overflow用户

发布于 2014-05-17 08:14:35

在之前的回答中,我没有得到所有的轮换。

简单的有什么问题:

代码语言:javascript
复制
mov al, dl
and al, 0ff0h
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23690402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档