逻辑指令集有:AND/ORR/EOR/BIC
1)与逻辑指令一般用于置零某位:AND
AND
Logical AND operation.
Syntax | AND{cond}{S} Rd, Rn, Op2 | |
Description | Load Rd with logical AND of Rn with Op2. Rd := Rn AND Op2 | |
Condition Flags | If S is specified, N, Z flags are updated. C flag may be updated by calculation of Op2. | |
Example | AND R9,R2,#0xFF00 // Load R9 with R2 and value in 0xFF00 |
area MY_kano,code,readonly
code32
entry
start
loop
mvn r0, #0 ;这里通过取反得到的R0是0xffffffff
;and r0, r0, 0xfffffff0 将R0的低四位清零,显然这里不是立即数,不可以直接使用
mvn r1, #0xf
and r0,r0, r1
mvn r2, #0
bic r2, r2, #0xf ;这里直接通过BIC置零指令可以直接置零想要的某一位
mvn r3, #0
bic r3, r3, #0x20 ;把第五位当想置零 0X20表示的就是0010-0000
;而0XDF表示的二进制就是1101-1111
b loop
end
2)逻辑或指令:ORR(或逻辑一般用于某位的置 1 )
ORR
Logical OR operation.
Syntax | ORR{cond}{S} Rd, Rn, Op2 | |
Description | OR operations on the values in Rn and Op2. | |
Condition Flags | If S is specified, N, Z flags are updated. C flag may be updated by calculation of Op2. | |
Example | ORR R2, R0, R5 // Rd = R0 or R5 |
area MY_kano,code,readonly
code32
entry
start
loop
mov r0, #0x0
mov r1, r0
orr r0, r0, #0xf ;将R0的低四位置1
orr r1, r1, #0xc0 ;将R1的第六,七位置1,要求达到 1100-0000
mov r3, #0x0
mov r4, #0x3c
eor r3, r0, #0x0 ;异或(不同才取1)
eor r4, r3, #0x3c
;;实现两个寄存器值的交换(a = a ^ b , b = b ^ a ,a = a ^ b)
mov r5, #0x33
mov r6, #0x44
eor r5, r5, r6
eor r6, r6, r5
eor r5, r5, r6
b loop
end
3)比较指令:CMP / CMN /TST / TEQ
area MY_kano,code,readonly
code32
entry
start
loop
cmp r1, #0x10 ;cpsr = r1 - 0x10
cmn r1, r2 ;反值比较 cspr = r1 + r2
tst r1, #0x3 ;位测试指令 cspr = r1 and #0x3
teq r1, r2 ;相等测试 cspr = r1 eor r2
mov r1, r2 ;数据传输指令 r1 = r2
mvn r1,r2 ;取反传送指令 r1 = ~ r2
b loop
end