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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM匯編編程基礎(chǔ)之三-基本尋址方式與基本指令

          ARM匯編編程基礎(chǔ)之三-基本尋址方式與基本指令

          作者: 時(shí)間:2016-11-27 來源:網(wǎng)絡(luò) 收藏

          3、分支指令,共3條:B、BL、BX

          B label :跳轉(zhuǎn)到標(biāo)號(hào)label處,也就是說在該條b指令執(zhí)行后,下一條執(zhí)行的指令是標(biāo)號(hào)label處的指令。

          BL label :與B指令的功能相同,也實(shí)現(xiàn)跳轉(zhuǎn),不同之處在于,bl在跳轉(zhuǎn)的同時(shí)還要將返回地址(bl指令的下一條指令的地址)保存到lr中

          BX r0 :將r0的值作為地址,跳轉(zhuǎn)到該地址處,并根據(jù)r0的值決定是否在ARM和thumb態(tài)之間進(jìn)行切換。(關(guān)于BX指令,以及ARM態(tài)和thumb態(tài)的切換,詳見“ARM程序與thumb程序的切換”一文)

          特別說明:

          B和BL指令,其跳轉(zhuǎn)范圍限制在當(dāng)前指令的±32M字節(jié)地址內(nèi)(ARM指令為字對(duì)齊,最低2位地址固定為0)。這是為什么呢?詳見“雜項(xiàng)解釋”一文。

          4、數(shù)據(jù)處理指令

          MOV r0, r1:將r1的值賦給r0

          ADD(SUB) r0, r1, r2:將r1的值加上(減去)r2的值,結(jié)果存放到r0中

          AND(ORR, EOR) r0, r1, r2:將r1的值與(或、異或)r2的值,結(jié)果存放到r0中

          CMP r1, r2:比較r1與r2值的大小

          特別需要說明的問題:

          指令CMP r1,r2,其作用細(xì)節(jié)是:執(zhí)行r1-r2的操作,如果結(jié)果為負(fù)數(shù),則置位CPSR的N位,清零Z位;結(jié)果為0,則清零CPSR的N位,置位Z位;結(jié)果為正,則清零CPSR的N位,清零Z位。但r1-r2的結(jié)果并不保存。CMP指令通常用于分支跳轉(zhuǎn)。例如,如下的C程序

          int i,j;

          if (i == j) {

          i++;

          } else {

          j++;

          }

          如果使用匯編語句改寫的話,就應(yīng)該寫為:

          使用ldr指令將變量i的值放入r0

          使用ldr指令將變量j的值放入r1

          cmp r0, r1

          addeq r0, r0, #1

          使用streq指令將r0的值放入變量i中

          beq label

          add r1, r1, #1

          使用str指令將r1的值放入變量j中

          label其它代碼

          ……

          其中addeq, streq, beq這幾條指令,是add, str, b指令的條件執(zhí)行版本。講到這里就不得不講解一下什么是條件執(zhí)行了。ARM指令集的所有指令均支持條件執(zhí)行,條件執(zhí)行指的是,指令可以根據(jù)執(zhí)行時(shí)的情況(CPSR的條件代碼標(biāo)志位)決定自身是否被執(zhí)行。eq表示如果CPSR的Z位為1(對(duì)于本程序,實(shí)際上就是r0的值與r1的值相等,因?yàn)閏mp會(huì)根據(jù)r0與r1的值設(shè)置Z位)的情況下,該指令要執(zhí)行,否則不執(zhí)行。

          其它條件助記符如下:

          條件助記符標(biāo)志含義
          EQZ=1相等
          NEZ=0不相等
          CS/HSC=1無符號(hào)數(shù)大于或等于
          CC/LOC=0無符號(hào)數(shù)小于
          MIN=1負(fù)數(shù)
          PLN=0正數(shù)或零
          VSV=1溢出
          VCV=0沒有溢出
          HIC=1,Z=0無符號(hào)數(shù)大于
          LSC=0,Z=1無符號(hào)數(shù)小于或等于
          GEN=V有符號(hào)數(shù)大于或等于
          LTN!=V有符號(hào)數(shù)小于
          GTZ=0,N=V有符號(hào)數(shù)大于
          LEZ=1,N!=V有符號(hào)數(shù)小于或等于
          AL任何無條件執(zhí)行 (指令默認(rèn)條件)
          NV任何從不執(zhí)行(不要使用)


          上一頁 1 2 下一頁

          評(píng)論


          技術(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); })();