ARM 匯編指令條件執(zhí)行詳解
在ARM模式下,任何一條數(shù)據(jù)處理指令可以選擇是否根據(jù)操作的結(jié)果來(lái)更新CPSR寄存器中的ALU狀態(tài)標(biāo)志位。在數(shù)據(jù)處理指令中使用S后綴來(lái)實(shí)現(xiàn)該功能。
本文引用地址:http://m.butianyuan.cn/article/201611/317772.htm不要在CMP,CMN,TST或者TEQ指令中使用S后綴。這些比較指令總是會(huì)更新標(biāo)志位。
在Thumb模式下,所有數(shù)據(jù)處理指令都更新CPSR中的標(biāo)志位。有一個(gè)例外就是:當(dāng)一個(gè)或更多個(gè)高寄存器被用在MOV和ADD指令時(shí),此時(shí)MOV和ADD不能更新?tīng)顟B(tài)標(biāo)志.
幾乎所有的ARM指令都可以根據(jù)CPSR中的ALU狀態(tài)標(biāo)志位來(lái)?xiàng)l件執(zhí)行。參見(jiàn)表2-1條件執(zhí)行后綴表。
在ARM模式下,你可以:
· 根據(jù)數(shù)據(jù)操作的結(jié)果更新CPSR中的ALU狀態(tài)標(biāo)志;
· 執(zhí)行其他幾種操作,但不更新?tīng)顟B(tài)標(biāo)志;
· 根據(jù)當(dāng)前狀態(tài)標(biāo)志,決定是否執(zhí)行接下來(lái)的指令。
在Thumb模式,大多數(shù)操作總是更新?tīng)顟B(tài)標(biāo)志位,并且只能使用條件轉(zhuǎn)移指令(B)來(lái)實(shí)現(xiàn)條件執(zhí)行。該指令(B)的后綴和在ARM模式下是一樣的。其他指令不能使用條件執(zhí)行。
2.5.1 ALU狀態(tài)標(biāo)志
CPSR寄存器包含下面的ALU狀態(tài)標(biāo)志:
2.5.2 執(zhí)行條件
N,Z,C,V相關(guān)的條件碼后綴如下表所列:
舉例說(shuō)明:
示例1:
ADD
ADDS
ADDCSS
CMP
示例2:(請(qǐng)自行分析)
gcd
BEQ end
BLT less
SUB r0, r0, r1
B gcd
less
SUB r1, r1, r0
B gcd
end
評(píng)論