ARM 指令 IT

IT

IT (If-Then) 指令由四條後續條件指令(IT 塊)句組成。 這些條件能夠徹底相同,也能夠互爲邏輯反。 IT 塊中的指令(包括跳轉)還必須在語法的 {cond} 部分中指定條件。 無需在代碼中編寫 IT 指令,由於彙編器會根據在後續指令中指定的條件爲您自動生成這些指令。 不過,若是確實須要編寫 IT 指令,則彙編器會根據後續指令中指定的條件對 IT 中指定的條件進行驗證。 編寫 IT 指令可確保您會考慮如何在代碼設計中放置條件指令以及選擇條件。 在彙編爲 ARM 代碼時,彙編器會執行相同的檢查,可是不會生成任何 IT 指令bash

語法IT{x{y{z}}} {cond}spa

x: 指定 IT 塊中第二個指令的條件開關。 y: 指定 IT 塊中第三個指令的條件開關。 z: 指定 IT 塊中第四個指令的條件開關。 cond: 指定 IT 塊中第一個指令的條件。設計

IT 塊中第二個、第三個和第四個指令的條件開關能夠是下列項之一:code

T: Then。 將條件 cond 應用於指令。 E: Else。 將 cond 的相反條件應用於指令。get

除了 CMP、CMN, 和 TST 以外,一般會影響條件代碼標記的 16 位指令在用於 IT 塊內時,不會影響這些標記。 IT 塊中 BKPT 指令總會獲得執行,即便沒法知足其條件也如此。博客


條件後綴 標誌寄存器 含義
EQ Z == 1 等於
NE Z == 0 不等於
CS/HS C == 1 無符號大於或相同
CC/LO C == 0 無符號小於
MI N == 1 負數
PL N == 0 整數或零
VS V == 1 溢出
VC V == 0 無溢出
HI C == 1 && Z == 0 無符號大於
LS C == 1 or Z == 0 無符號小於或相同
GE N == V 有符號大於或等於
LT N != V 有符號小於
GT Z == 0 && N == V 有符號大於
LE Z == 1 or N != V 有符號小於或等於
AL 任何 始終。不可用於B{cond}中

下面這個例子,意思是,當條件「EQ」符合時,執行指令一、三、4的mov操做,不然執行指令2的mov操做。table

ITETT EQ
MOVEQ R0, #1 ;//指令1
MOVNE R0, #0 ;//指令2
MOVEQ R1, #0 ;//指令3
MOVEQ R2, #0 ;//指令4
複製代碼

這是剛剛一個程序的代碼class

LSLS    R2,R1,#1 ;R1 << 1,差很少就是R1*2,結果放在R2
CMP     R4,R2       ;R4 - R2,判斷R4 > R2
IT CC               ;若是R4 < R2,就執行MOVCC,不然跳過MOVCC
MOVCC   R4,R2       ;這裏是將R1*2的值R2給R4
複製代碼

限制

不容許 在 IT 塊中使用下面的指令:語法

IT
CBZ 和 CBNZ
TBB 和 TBH
CPS、CPSID 和 CPSIE
SETEND
複製代碼

使用 IT 塊時的其餘限制有:程序

跳轉指令或修改 pc 的任何指令只能是 IT 塊中的最後一個指令。 沒法跳轉到 IT 塊中的任何指令,除非在從異常處理程序返回時。 不能在 IT 塊中使用任何彙編器指令。

體系結構

此 16 位 Thumb 指令可用於 ARMv6T2 及更高版本

博客:2h0n9

相關文章
相關標籤/搜索