在ARMv6T2以及ARMv7架構擴展了Thumb指令集,其中加入了IT指令,進一步增強了代碼的緊湊性。 Thumb中有一個比較有意思的指令——IT,這條指令用於根據指定的條件來執行後面相繼的四條指令。當然,Thumb-2中大部分算術邏輯指令都含有帶條件執行的特征,不過Thumb-2是32位的。如果 ...
在ARMv6T2以及ARMv7架構擴展了Thumb指令集,其中加入了IT指令,進一步增強了代碼的緊湊性。
Thumb中有一個比較有意思的指令——IT,這條指令用於根據指定的條件來執行後面相繼的四條指令。當然,Thumb-2中大部分算術邏輯指令都含有帶條件執行的特征,不過Thumb-2是32位的。如果你需要更緊湊的指令,那麼使用Thumb結合ThumbEE來做帶條件的指令執行還是不錯的選擇。Thumb本身不具備帶條件指令執行的特性。
IT指令的描述為:IT{<x>{<y>{<z>}}} <firstcond>
其中,<x>表示第二條指令的條件;<y>表示第三條指令的條件;<z>表示第四條指令的條件。<firstcond>是條件操作數,表示第一條指令的條件。
<x>、<y>、<z>的標識其實就兩種符號——T或E。T表示Then,表示相應的指令所滿足的條件與<firstcond>一致;E表示else,表示相應的指令所滿足的條件與<firstcond>完全相反。因此,對於第一條指令而言,總是為T的,因此不需要在IT中顯示給出,它直接對應於<firstcond>的條件。
另外,在IT塊中不能再使用IT指令。即,相繼的四條指令中不允許出現IT指令。
下麵給出一些示例代碼:
cmp r1, #0 itete eq moveq r1, #10 movne r2, #20 moveq r3, #30 movne r12, #50 stmia r0, {r1-r3, r12} bx lr
可能會覺得奇怪,為何itete 指令中的 ete 已經表示了條件了,為何下麵的指令中還需要條件,moveq,movne。這點需要註意。