<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

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

          本文引用地址:http://www.ex-cimer.com/article/201611/317772.htm

          不要在CMP,CMN,TST或者TEQ指令中使用S后綴。這些比較指令總是會更新標(biāo)志位。

          在Thumb模式下,所有數(shù)據(jù)處理指令都更新CPSR中的標(biāo)志位。有一個例外就是:當(dāng)一個或更多個高寄存器被用在MOV和ADD指令時,此時MOV和ADD不能更新狀態(tài)標(biāo)志.

          幾乎所有的ARM指令都可以根據(jù)CPSR中的ALU狀態(tài)標(biāo)志位來條件執(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í)行接下來的指令。

          在Thumb模式,大多數(shù)操作總是更新狀態(tài)標(biāo)志位,并且只能使用條件轉(zhuǎn)移指令(B)來實現(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)的條件碼后綴如下表所列:

          舉例說明:

          示例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指令肯定會更新標(biāo)志.

          示例2:(請自行分析)

          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í)

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();