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

55 篇文章 1 订阅
55 篇文章 1 订阅

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 的值:

XYX^Y
000
010
100
111

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 

6.1 布尔和比较指令简介
6.2 AND指令
6.3 OR指令
6.4 位向量(位映射)
6.5 XOR指令
6.6 NOT(反码)指令
6.7 TEST指令
6.8 CMP(比较)指令
6.9 置位和清除单个CPU标志位
6.10 64位模式下的布尔指令
6.11 条件跳转简介
6.12 条件跳转指令汇总
6.13 条件跳转应用及示例
6.14 LOOPZ和LOOPE指令
6.15 LOOPNZ和LOOPNE指令
6.16 使用汇编语言实现IF语句
6.17 使用汇编语言实现逻辑表达式
6.18 使用汇编语言实现WHILE循环
6.19 表驱动选择
6.20 有限状态机
6.21 条件控制流伪指令
6.22 .IF、.ELSE、.ELSEIF、.ENDIF伪指令
6.23 用.REPEAT和.WHILE实现循环

  • 19
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值