邏輯指令集有: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