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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Thumb指令集之: 多寄存器數(shù)據(jù)傳送指令

          Thumb指令集之: 多寄存器數(shù)據(jù)傳送指令

          作者: 時(shí)間:2013-09-30 來(lái)源:網(wǎng)絡(luò) 收藏

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

          11.6.3多寄存器壓棧指令PUSH

          (1)編碼格式

          多寄存器壓棧指令PUSH的編碼格式如圖11.61所示。

          圖11.61PUSH指令的編碼格式

          多寄存器數(shù)據(jù)壓棧指令PUSH(PushMultipleRegisters)將r0~r7和LR中的一個(gè)或多個(gè)寄存器內(nèi)容加載到數(shù)據(jù)堆棧中。

          (2)指令的語(yǔ)法格式

          PUSHregisters>

          registers>

          被存儲(chǔ)的寄存器列表。不同的寄存器之間用“,”隔開(kāi)。完整的寄存器列表包含在“{}”中。寄存器r0~r7分別對(duì)應(yīng)于指令編碼中bit[0]~bit[7]位;返回連接寄存器LR對(duì)應(yīng)于bit[8]。如果ri存在于寄存器列表中,則相應(yīng)的bit[i]置1,否則為0。如果寄存器列表為空,即bit[8:0]=0,則指令的執(zhí)行結(jié)果不可預(yù)知。

          注意

          該指令的基址寄存器為堆棧寄存器SP。該基址寄存器為PUSH指令默認(rèn)寄存器,不必在指令中指定。

          (3)指令操作的偽代碼

          Start_address=SP–Number_of_Set_Bits_In(register_list)*4

          End_address=SP–4

          Address=start_address

          Fori=0to7

          Ifregister_list[i]==1

          Memory[address,4]=Ri

          Address=address+4

          IfR==1

          Memory[address,4]=LR

          Address=address+4

          Assertend_address==address–4

          SP=SP-(Number_of_Set_Bits_In(register_list)+R)*4

          (4)對(duì)應(yīng)的ARM指令

          STMDBSP!,registers>

          11.6.4多寄存器出棧指令POP

          (1)編碼格式

          多寄存器出棧指令POP的編碼格式如圖11.62所示。

          多寄存器數(shù)據(jù)出棧指令POP(PopMultipleRegisters)將堆棧中的內(nèi)容恢復(fù)到r0~r7和PC寄存器中(r0~r7和PC的子集或全集)。

          圖11.62POS指令的編碼格式

          (2)指令的語(yǔ)法格式

          POPregisters>

          ①registers>

          被存儲(chǔ)的寄存器列表。不同的寄存器之間用“,”隔開(kāi)。完整的寄存器列表包含在“{}”中。寄存器r0~r7分別對(duì)應(yīng)于指令編碼中bit[0]~bit[7]位;程序計(jì)數(shù)器PC對(duì)應(yīng)于bit[8]。如果ri存在于寄存器列表中,則相應(yīng)的bit[i]置1,否則為0。如果寄存器列表為空,即bit[8∶0]=0,則指令的執(zhí)行結(jié)果不可預(yù)知。

          注意

          如果程序計(jì)數(shù)器PC存在于寄存器列表中,將產(chǎn)生程序的分支跳轉(zhuǎn),但程序狀態(tài)寄存器CPSR不會(huì)改變。

          (3)指令操作的偽代碼

          Start_address=SP

          End_address=SP+4*(R+Number_of_Set_Bits_In(register_list))

          Address=start_address

          Fori=0to7

          Ifregister_list[i]==1then

          Ri=Memory[address,4]

          Address=address+4

          IfR==1then

          value=Memory[address,4]

          PC=valueAND0xfffffffe

          If(architectureversion5orabove)then

          TBit=Value[0]

          Address=address+4

          Assertend_address=address

          SP=end_address

          (4)對(duì)應(yīng)的ARM指令

          SP!,registers>

          11.6.5舉例

          下面的例子程序綜合使用了,通過(guò)該例可以對(duì)Thumb狀態(tài)下有更深入的了解。

          r7!,{r0-r3,r5} ;從r7為基地址的內(nèi)存單元中加載5個(gè)連續(xù)字單元到r0~r3

          ;和r5,并回寫(xiě)r7,使r7=r7+20

          STMIAr0!,{r3,r4,r5} ;將r3、r4和r5寄存器的內(nèi)容存儲(chǔ)到以r0為基地址的內(nèi)存單

          ;元中,并回寫(xiě)r0的值,使r0=r0+12

          Function

          PUSH{r0-r7,LR} ;將寄存器r0~r7和程序返回寄存器LR的內(nèi)容壓棧

          … ;程序體

          POP{r0-r7,PC} ;保存的寄存器內(nèi)容出棧,子程序返回


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();