首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于在汇编中使用布尔逻辑的教程

关于在汇编中使用布尔逻辑的教程
EN

Stack Overflow用户
提问于 2012-01-18 02:01:58
回答 2查看 2.6K关注 0票数 0

有没有什么教程可以解释汇编语言中可能存在的所有复杂的布尔逻辑运算?例如,我不知道下面的汇编代码块是做什么的:

代码语言:javascript
运行
复制
mov     [ebp-8h], 31982853h
mov     eax, [ebp+Ch]
shl     eax, 8
mov     ecx, [ebp+Ch]
shr     ecx, 8
or      eax, ecx

我理解shl、shr和or指令的作用,但对它们的组合结果一无所知。有没有人能给我介绍一下彻底解释汇编语言中布尔逻辑运算的教程?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-18 02:38:15

带注释的代码:

代码语言:javascript
运行
复制
mov     eax, [ebp+Ch]   ; grab our 32-bit value
shl     eax, 8          ; shift it left 8 bits, so the top 8 bits are shifted out 
                        ; and the bottom 8 bits are filled w/ 0
mov     ecx, [ebp+Ch]   ; grab our 32-bit value again
shr     ecx, 8          ; shift this copy right 8 bits, so the bottom 8 bits are 
                        ; shifted out and the top 8 bits are filled w/ 0
or      eax, ecx        ; perform A = A or C for each set of same-aligned bits in
                        ; EAX (A) and ECX (C)

因此,如果原始值是ABCD (每个字母是一个8位字节),那么在执行or之前,EAX的值应该是BCD0,ECX的值应该是0ABC。

票数 3
EN

Stack Overflow用户

发布于 2012-01-18 03:29:37

如果[ebp+Ch]处的变量包含16位的值(即只有16个最低有效位可以不为零),那么这段代码将有效地交换其字节(0到7位与8到15位)。但是,or eax, ecx之后的eax中的结果必须用0FFFFh进行掩码(and'ed),除非后面的代码使用ax而不是eax

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8899420

复制
相关文章

相似问题

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