【彙編指令】數據處理指令之邏輯指令

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章