ARM 匯編指令條件執行詳解
在ARM模式下,任何一條數據處理指令可以選擇是否根據操作的結果來更新CPSR寄存器中的ALU狀態標志位。在數據處理指令中使用S后綴來實現該功能。
本文引用地址:http://cqxgywz.com/article/201611/317772.htm不要在CMP,CMN,TST或者TEQ指令中使用S后綴。這些比較指令總是會更新標志位。
在Thumb模式下,所有數據處理指令都更新CPSR中的標志位。有一個例外就是:當一個或更多個高寄存器被用在MOV和ADD指令時,此時MOV和ADD不能更新狀態標志.
幾乎所有的ARM指令都可以根據CPSR中的ALU狀態標志位來條件執行。參見表2-1條件執行后綴表。
在ARM模式下,你可以:
· 根據數據操作的結果更新CPSR中的ALU狀態標志;
· 執行其他幾種操作,但不更新狀態標志;
· 根據當前狀態標志,決定是否執行接下來的指令。
在Thumb模式,大多數操作總是更新狀態標志位,并且只能使用條件轉移指令(B)來實現條件執行。該指令(B)的后綴和在ARM模式下是一樣的。其他指令不能使用條件執行。
2.5.1 ALU狀態標志
CPSR寄存器包含下面的ALU狀態標志:

2.5.2 執行條件
N,Z,C,V相關的條件碼后綴如下表所列:

舉例說明:
示例1:
ADD
ADDS
ADDCSS
CMP
示例2:(請自行分析)
gcd
BEQ end
BLT less
SUB r0, r0, r1
B gcd
less
SUB r1, r1, r0
B gcd
end


評論