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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 數(shù)據(jù)傳送指令之:?jiǎn)渭拇嫫鞯腖oad/Store指令

          數(shù)據(jù)傳送指令之:?jiǎn)渭拇嫫鞯腖oad/Store指令

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

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

          LDR指令根據(jù)addr_mode>所確定的地址模式將一個(gè)32位字讀取到指令中的目標(biāo)寄存器Rd>。如果指令中的尋址方式確定的地址不是字對(duì)齊的,則讀出的數(shù)值要進(jìn)行循環(huán)右移。所移位數(shù)為尋址方式確定的地址bits[1∶0]8的倍,也就是說(shuō)處理器將取到的數(shù)值作為字的最低位處理。

          如果設(shè)置了L位,則進(jìn)行裝載,否則進(jìn)行存儲(chǔ)。

          如果設(shè)置了P位,則使用預(yù)先變址尋址,否則使用過(guò)后變址尋址。

          如果設(shè)置了U位,則給出的偏移量被加到基址寄存器上,否則從中減去偏移量。

          如果設(shè)置了B位,傳送內(nèi)存的一個(gè)字節(jié),否則傳送一個(gè)字。這在助記符末尾添加后綴“B”,如MOV r7,r5變?yōu)镸OVB r7,r5。

          W位的解釋依賴(lài)于使用的地址模式。

          · 對(duì)于預(yù)先變址尋址,設(shè)置W位強(qiáng)制把它用做地址轉(zhuǎn)換的最終地址寫(xiě)回基址寄存器中(例如,傳送的副作用是Rn:= Rn +/-offset。這在匯編器中表示為給指令加上后綴“!”。)。

          · 對(duì)于過(guò)后變址尋址,地址總是寫(xiě)回,設(shè)置 W 位指示在進(jìn)行傳送之前強(qiáng)制地址轉(zhuǎn)換。這在匯編器中表示為給指令加上后綴“T”。

          當(dāng)PC作為L(zhǎng)DR的目的寄存器Rd>時(shí),從存儲(chǔ)器取得的數(shù)據(jù)將被當(dāng)作目標(biāo)地址值,程序?qū)⑻D(zhuǎn)到目標(biāo)地址開(kāi)始執(zhí)行。

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

          LDR{cond>} Rd>,addr_mode>

          ① cond>

          為指令編碼中的條件域。它指示LDR指令在什么條件下執(zhí)行。當(dāng)cond>忽略時(shí),指令為無(wú)條件執(zhí)行(cond=AL(Alway))。

          ② Rd>

          確定使用哪個(gè)通用寄存器作為目標(biāo)寄存器。

          ③ addr_mode>

          它確定了指令編碼中的I、P、U、W、Rn和addr_mode>位。所有的尋址模式中,都會(huì)確定一個(gè)基址寄存器Rn。

          (3)指令操作的偽代碼

          指令操作的偽代碼如下面程序段所示。

          If ConditionPassed{cond} then

          If address[1:0] == 0b00 then

          Value = Memory[address,4]

          Else if address[1:0] == 0b01 then

          Value = Memory[address,4] Rotate_Right 8

          Else if address[1:0] == 0b10 then

          Value = Memory[address,4] Rotate_Right 16

          Eles /* address[1:0] == 0b11*/

          Value = Memory[address,4] Rotate_Right 24

          If (Rd is R15) then

          If (architecture version 5 or above) then

          PC = value AND 0xfffffffe

          T Bit = value[0]

          Else

          PC = value AND 0xfffffffc

          Else

          Rd = value

          (4)指令舉例

          LDR r1,[r0,#0x12] ;將r0+12地址處的數(shù)據(jù)讀出,保存到r1中(r0的值不變)

          LDR r1,[r0] ;將r0地址處的數(shù)據(jù)讀出,保存到r1中(零偏移)

          LDR r1,[r0,r2] ;將r0+r2地址的數(shù)據(jù)讀出,保存到r1中(r0的值不變)

          LDR r1,[r0,r2,LSL #2] ;將r0+r2×4地址處的數(shù)據(jù)讀出,保存到r1中(r0,r2的值不變)

          LDR Rd,label ;label為程序標(biāo)號(hào),label必須是當(dāng)前指令的±4KB范圍內(nèi)

          LDR Rd,[Rn],#0x04 ;Rn的值用作傳輸數(shù)據(jù)的存儲(chǔ)地址。在數(shù)據(jù)傳送后,將偏移量0x04與

          Rn相加,結(jié)果寫(xiě)回到Rn中。Rn不允許是r15

          注意

          地址對(duì)齊問(wèn)題:大多數(shù)情況下,必須保證用于32位傳送的地址是32位對(duì)齊的。

          存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理




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