0
点赞
收藏
分享

微信扫一扫

x86汇编_条件处理-布尔和比较指令_笔记_26

_铁马冰河_ 2022-04-21 阅读 84
开发语言

Intel指令包含了AND,OR,XOR,NOT,TEST指令,它们能直接在二进制位上实现布尔操作。其中TEST不会改变数据的AND指令,但会改变CPU标志位

部分布尔指令
ANDAND 指令在两个操作数的对应位之间进行按位逻辑与操作,并将结果存放在目标操作数中。操作数可以是 8、16、32、64 位,但是两个操作数必须是同样大小
OR
XOR异或
NOT
TEST与,但不改变内存数据,只改变CPU状态位。

AND指令

AND指令说明
XYand的结果备注
0000 0 得 0
0100 1 得 0
1001 0 得 0
1111 1 得 1

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

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

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

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

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')

其他的字母字符也是同样的关系。下例中,数组中所有字符都转换为大写:

.data
array BYTE 50 DUP(?)

.code
    mov ecx,LENGTHOF array
    mov esi,OFFSET array
L1: and BYTE PTR [esi], 11011111b       ;清除位 5
    inc esi
    loop L1

OR指令

举报

相关推荐

0 条评论