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有效。