ARM 指令集 比較指令

2021-06-21 10:25:41 字數 1285 閱讀 3339

譯註:cmp 和 cmp 是算術指令,teq 和 tst 是邏輯指令。把它們歸入一類的原因是它們的 s 位總是設定的,就是說,它們總是影響標誌位。

(compare negative)

cmn  , 

status = op_1 - (- op_2)

cmn同於cmp,但它允許你與小負值(運算元 2 的取負的值)進行比較,比如難於用其他方法實現的用於結束列表的 -1。這樣與 -1 比較將使用:
cmn     r0, #1                  ; 把 r0 與 -1 進行比較
詳情參照cmp指令。

(compare)

cmp  , 

status = op_1 - op_2

cmp允許把乙個暫存器的內容如另乙個暫存器的內容或立即值進行比較,更改狀態標誌來允許進行條件執行。它進行一次減法,但不儲存結果,而是正確的更改標誌。標誌表示的是運算元 1 比運算元 2 如何(大小等)。如果運算元 1 大於操作運算元 2,則此後的有 gt 字尾的指令將可以執行。

明顯的,你不需要顯式的指定s字尾來更改狀態標誌... 如果你指定了它則被忽略。

(test equivalence)

teq  , 

status = op_1 eor op_2

teq類似於tst。區別是這裡的概念上的計算是 eor 而不是 and。這提供了一種檢視兩個運算元是否相同而又不影響進製標誌(不象cmp那樣)的方法。加上p字尾的teq還可用於改變 r15 中的標誌(在 26-bit 模式中)。詳情請參照 psr.html,在 32-bit 模式下如何做請參見這裡。

(test bits)

tst  , 

status = op_1 and op_2

tst類似於cmp,不產生放置到目的暫存器中的結果。而是在給出的兩個運算元上進行操作並把結果反映到狀態標誌上。使用tst來檢查是否設定了特定的位。運算元 1 是要測試的資料字而運算元 2 是乙個位掩碼。經過測試後,如果匹配則設定 zero 標誌,否則清除它。象cmp那樣,你不需要指定s字尾。
tst     r0, #%1                 ; 測試在 r0 中是否設定了位 0。

ARM指令集 SWP指令

arm指令集 swp指令 swp和swpb是arm指令集中對儲存單元的原子操作,即對儲存單元的一次讀和一次不可被分割。swp和swpb分別完成儲存器和暫存器之間 乙個字 32bit 和乙個位元組 8bit 的資料交換。swp指令主要是完成arm體系架構處理器的同步操作,在linux作業系統中實現訊號...

Arm指令集 偽指令

目錄 arm指令集 跳轉指令 資料處理 程式狀態暫存器傳輸指令 load srote指令 協處理器指令 異常中斷產生指令 gnu arm偽指令 資料定義 彙編控制 其他指令 blx register string abcd efgh hello asciz qwer sun world ascii ...

ARM偽指令集

一 符號定義 symbol definition 偽指令 符號定義偽指令用於定義arm 匯程式設計序中的變數 對變數賦值以及定義暫存器的別名等操作。常見的符號定義偽指令有如下幾種 用於定義全域性變數的gbla gbll 和gbls。用於定義區域性變數的lcla lcll 和lcls。用於對變數賦值的...