汇编语言AND指令实现对两个操作数进行逻辑(按位)与操作

 更新时间:2020年01月19日 14:11:45   作者:Java入门基础教程  
这篇文章主要介绍了汇编语言AND指令实现对两个操作数进行逻辑(按位)与操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

AND 指令在两个操作数的对应位之间进行(按位)逻辑与(AND)操作,并将结果存放在目标操作数中:

AND destination,source

下列是被允许的操作数组合,但是立即操作数不能超过 32 位:

AND reg, reg
AND reg, mem
AND reg, imm
AND mem, reg
AND mem, imm

操作数可以是 8 位、16 位、32 位和 64 位,但是两个操作数必须是同样大小。两个操作数的每一对对应位都遵循如下操作原则:如果两个位都是 1,则结果位等于 1;否则结果位等于 0。

下表展示了两个输入位 X 和 Y,第三列是表达式 X^Y 的值:

X Y X^Y
0 0 0
0 1 0
1 0 0
1 1 1

AND 指令可以清除一个操作数中的 1 个位或多个位,同时又不影响其他位。这个技术就称为位屏蔽,就像在粉刷房子时,用遮盖胶带把不用粉刷的地方(如窗户)盖起来。

例如,假设要将一个控制字节从 AL 寄存器复制到硬件设备。并且当控制字节的位 0 和位 3 等于 0 时,该设备复位。那么,如果想要在不修改 AL 其他位的条件下,复位设备,可以用下面的指令:

and AL, 11110110b             ;清除位 0 和位 3 ,其他位不变

如,设 AL 初始化为二进制数 1010 1110,将其与 1111 0110 进行 AND 操作后,AL 等于 1010 0110:

mov al,10101110b
and al, 11110110b    ;AL 中的结果 = 1010 0110

标志位

AND 指令总是清除溢出和进位标志位,并根据目标操作数的值来修改符号标志位、零标志位和奇偶标志位。比如,下面指令的结果存放在 EAX 寄存器,假设其值为 0。在这种情况下,零标志位就会置 1:

and eax,1Fh

将字符转换为大写

AND 指令提供了一种简单的方法将字符从小写转换为大写。如果对比大写 A 和小写 a 的 ASCII 码,就会发现只有位 5 不同:

0  1  1  0  0  0  0  1 = 61h ('a')
0  1  0  0  0  0  0  1 = 41h ('A')

其他的字母字符也是同样的关系。把任何一个字符与二进制数 1101 1111 进行 AND,则除位 5 外的所有位都保持不变,而位 5 清 0。下例中,数组中所有字符都转换为大写:

  .data  array BYTE 50 DUP(?)  .code      mov ecx,LENGTHOF array      mov esi,OFFSET

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 纯汇编实现打飞机小游戏的示例代码

    纯汇编实现打飞机小游戏的示例代码

    这篇文章主要介绍了纯汇编实现打飞机小游戏的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 从汇编代码开始全面解析synchronized还原最真实的偏向锁

    从汇编代码开始全面解析synchronized还原最真实的偏向锁

    这篇文章主要为大家介绍了从模板解释器汇编源码开始分析还原最真实的偏向锁实现,解释monitorenter字节码命令的方法开始,从汇编代码开始全面解析synchronized
    2022-02-02
  • 16位汇编语言寄存器及指令整理(小结)

    16位汇编语言寄存器及指令整理(小结)

    这篇文章主要介绍了16位汇编语言寄存器及指令整理(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 汇编语言DOSBox及debug.exe在Windows64下环境搭建

    汇编语言DOSBox及debug.exe在Windows64下环境搭建

    这篇文章主要为大家介绍了汇编语言环境的搭建DOSBox及debug.exe在Windows64下安装配置过程,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • 汇编语言80x86系统通用数据传送指令详解

    汇编语言80x86系统通用数据传送指令详解

    这篇文章主要为大家介绍了汇编语言80x86系统通用的数据传送指令详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • 汇编语言编译环境搭建过程

    汇编语言编译环境搭建过程

    这篇文章主要介绍了汇编语言编译环境搭建过程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 汇编用串检测scasb寻找数的位置实现

    汇编用串检测scasb寻找数的位置实现

    这篇文章主要介绍了汇编用串检测scasb寻找数的位置实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 汇编语言实现电子闹钟思路详解

    汇编语言实现电子闹钟思路详解

    这篇文章主要介绍了汇编语言实现电子闹钟思路详解,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 图文详解通俗易懂的汇编语言寄存器

    图文详解通俗易懂的汇编语言寄存器

    这篇文章主要为大家介绍了寄存器的内容详解,文中通过精美清晰的图文方式让你一看就通俗易懂,有需要的朋友可以借鉴参考学习下,希望能够有所帮助
    2021-11-11
  • 汇编语言中的segment

    汇编语言中的segment

    segment是段的意思,是段定义伪指令,一个正常的应用程序被由若干个 segment组成,接下来通过本文给大家介绍汇编语言中的segment,需要的朋友可以参考下
    2020-01-01

最新评论