新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM 匯編指令條件執(zhí)行詳解

        ARM 匯編指令條件執(zhí)行詳解

        作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
        2.5 條件執(zhí)行

        ARM模式下,任何一條數(shù)據(jù)處理指令可以選擇是否根據(jù)操作的結(jié)果來(lái)更新CPSR寄存器中的ALU狀態(tài)標(biāo)志位。在數(shù)據(jù)處理指令中使用S后綴來(lái)實(shí)現(xiàn)該功能。

        本文引用地址:http://www.104case.com/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ài)標(biāo)志.

        幾乎所有的ARM指令都可以根據(jù)CPSR中的ALU狀態(tài)標(biāo)志位來(lái)?xiàng)l件執(zhí)行。參見表2-1條件執(zhí)行后綴表。

        在ARM模式下,你可以:

        · 根據(jù)數(shù)據(jù)操作的結(jié)果更新CPSR中的ALU狀態(tài)標(biāo)志;

        · 執(zhí)行其他幾種操作,但不更新狀態(tài)標(biāo)志;

        · 根據(jù)當(dāng)前狀態(tài)標(biāo)志,決定是否執(zhí)行接下來(lái)的指令。

        在Thumb模式,大多數(shù)操作總是更新狀態(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 r0, r1, r2 ; r0 = r1 + r2, 不更新標(biāo)志位

        ADDS r0, r1, r2 ; r0 = r1 + r2, 后綴S表示更新標(biāo)志位

        ADDCSS r0, r1, r2 ; If C 標(biāo)志為1,則執(zhí)行r0 = r1 + r2, 且更新標(biāo)志,

        CMP r0, r1 ; CMP指令肯定會(huì)更新標(biāo)志.

        示例2:(請(qǐng)自行分析)

        gcd CMP r0, r1

        BEQ end

        BLT less

        SUB r0, r0, r1

        B gcd

        less

        SUB r1, r1, r0

        B gcd

        end



        關(guān)鍵詞: ARM匯編指令條件執(zhí)

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 临城县| 和政县| 宁夏| 阿鲁科尔沁旗| 巴青县| 漳州市| 合山市| 阳春市| 漳浦县| 紫金县| 麻栗坡县| 正定县| 青州市| 华容县| 关岭| 临汾市| 奉贤区| 肇东市| 绥化市| 辽阳市| 都兰县| 西乡县| 亚东县| 宜春市| 武鸣县| 海兴县| 元氏县| 万宁市| 普陀区| 双流县| 黑龙江省| 邛崃市| 台中县| 洛宁县| 宾川县| 积石山| 肇源县| 萝北县| 崇义县| 昭通市| 马公市|