1. 程式人生 > >1.16.ARM彙編指令4之比較指令

1.16.ARM彙編指令4之比較指令

ARM比較指令:CMP & CMN & TST & TEQ

* CMP

比較指令,指令使用Rn的值減去operand2的值,根據操作的結果更新CPSR暫存器相應的條件標誌位,以便後面的指令根據相應的條件標誌位來判斷是否執行。

指令格式:

CMP{cond}  Rn,operand2

eg:

CMP r1,#10     ; r1與10比較,設定相關標誌位

CMP r1,r2       ; r1與r2比較,設定相關標誌位

注:CMP指令和SUBS指令的區別在於CMP指令不儲存運算結果,在進行倆個數據大小判斷時,常用CMP指令及相應的條件碼來操作。

* CMN

負數比較指令,指令使用Rn的值加上operand2的值,根據操作的結果更新CPSR暫存器相應的條件標誌位,以便後面的指令根據相應的條件標誌位來判斷是否執行。

指令格式:

CMN{cond}  Rn,operand2

eg:

CMN r0,#1       ; r0+1 判斷r0是否為1的補碼,若是,則cpsr暫存器的Z置位

注:CMN指令與ADDS指令的區別在於CMN指令不儲存運算結果,CMN指令可以用於負數比較,比如CMN r0,#1  指令表示r0與-1進行比較,若r0=-1(即1的補碼),則Z置位,否則Z復位。

* TST

位測試指令,指令將暫存器Rn的值與operand2按位進行邏輯與操作,根據操作的結果更新CPSR暫存器相應的條件標誌位,以便後面的指令根據相應的條件標誌位來判斷是否執行。

指令格式:

TST{cond} Rn,operand2

eg:

TST r0,#0x01    ; 判斷r0的最低位是否為0

TST r1,#0x0f     ; 判斷r1的低4位是否全為0

注:指令TST和ANDS的指令區別在於TST指令不儲存運算結果,TST指令通常與EQ,NE條件碼配合使用,當所有測試位都為0時,EQ有效,而只要有一個測試位不為0,則NE有效。

* TEQ

相等測試指令,指令將Rn與operand2的值按位進行異或操作,根據操作的結果更新CPSR暫存器相應的條件標誌位,以便後面的指令根據相應的條件標誌位來判斷指令是否執行。

指令格式:

TEQ{cond} Rn,operand2

eg:

TEQ r0,r1     ; 比較r0與r1是否相等(不影響C位和V位)

注:指令TEQ和EORS的指令區別在於TEQ指令不儲存運算結果,使用TEQ進行相等測試,常於EQ、NE條件碼配合使用,當倆個數據相等時,EQ有效,否則NE有效。