第1天-ARM匯編指令CMP/CMN/TST/TEQ
CMN : 比較取負的值
(Compare Negative)
CMN{條件}{P} , status = op_1 - (- op_2)
CMN 同于 CMP,但它允許你與小負值(操作數 2 的取負的值)進(jìn)行比較,比如難于用其他方法實(shí)現的用于結束列表的 -1。這樣與 -1 比較將使用:
CMN R0, #1 ; 把 R0 與 -1 進(jìn)行比較
詳情參照 CMP 指令。
CMP : 比較
(Compare)
CMP{條件}{P} , status = op_1 - op_2
CMP 允許把一個(gè)寄存器的內容如另一個(gè)寄存器的內容或立即值進(jìn)行比較,更改狀態(tài)標志來(lái)允許進(jìn)行條件執行。它進(jìn)行一次減法,但不存儲結果,而是正確的更改標志。標志表示的是操作數 1 比操作數 2 如何(大小等)。如果操作數 1 大于操作操作數 2,則此后的有 GT 后綴的指令將可以執行。
明顯的,你不需要顯式的指定 S 后綴來(lái)更改狀態(tài)標志... 如果你指定了它則被忽略。
TEQ : 測試等價(jià)
(Test Equivalence)
TEQ{條件}{P} , Status = op_1 EOR op_2
TEQ 類(lèi)似于 TST。區別是這里的概念上的計算是 EOR 而不是 AND。這提供了一種查看兩個(gè)操作數是否相同而又不影響進(jìn)位標志(不象 CMP 那樣)的方法。加上 P 后綴的 TEQ 還可用于改變 R15 中的標志(在 26-bit 模式中)。詳情請參照 psr.html,在 32-bit 模式下如何做請參見(jiàn)這里。
TST : 測試位
(Test bits)
TST{條件}{P} , Status = op_1 AND op_2
TST 類(lèi)似于 CMP,不產(chǎn)生放置到目的寄存器中的結果。而是在給出的兩個(gè)操作數上進(jìn)行操作并把結果反映到狀態(tài)標志上。使用 TST 來(lái)檢查是否設置了特定的位。操作數 1 是要測試的數據字而操作數 2 是一個(gè)位掩碼。經(jīng)過(guò)測試后,如果匹配則設置 Zero 標志,否則清除它。象 CMP 那樣,你不需要指定 S 后綴。
TST R0, #%1 ; 測試在 R0 中是否設置了位 0。
評論