Thumb指令集之: 單寄存器數(shù)據(jù)傳送指令
11.5單寄存器數(shù)據(jù)傳送指令
Thumb指令集支持寄存器的裝載和存儲(chǔ),即LDR和STR指令。8和類型的Load/Store指令在Thumb指令集中可用。這些指令使用兩種尋址模式:寄存器偏移和立即數(shù)偏移。指令所能存取的數(shù)據(jù)包括字、半字和字節(jié),同時(shí)半字和字節(jié)可以為有符號(hào)數(shù)或無符號(hào)數(shù)。
表11.4總結(jié)了Thumb狀態(tài)下可用的數(shù)據(jù)傳送指令。
表11.4 Thumb狀態(tài)數(shù)據(jù)傳送指令
助記符 | 說明 | 操作 |
LDR | 傳送32位字到寄存器 | Rd-mem32[address] |
STR | 存儲(chǔ)32位寄存器的值 | Rd->mem32[address] |
LDRB | 傳送8位字節(jié)到寄存器 | Rd-mem8[address] |
STRB | 保存寄存器中的字節(jié) | Rd->mem8[address] |
LDRH | 傳送16位半字到寄存器 | Rd-mem16[address] |
STRH | 保存寄存器中的半字 | Rd->mem16[address] |
LDRSB | 裝載有符號(hào)字節(jié)到寄存器 | Rd-sighExtend(mem8[address]) |
STRSB | 裝載有符號(hào)半字到寄存器 | Rd-sighExtend(mem16[address]) |
Thumb數(shù)據(jù)傳送指令的基本語法格式分為以下4種。
①opcode1>Rd>,[Rn>,#5_bit_offset>]
其中,opcode1>:=LDR|LDRH|LDRB|STR|STRH|STRB
②opcode2>Rd>,[Rn>,Rm>]
其中,opcode2>:=LDR|LDRH|LDRB|LSRSH|STR|STRH|STRB
③LDRRd>,[PC,8_bit_offset>]
④opcode3>Rd>,[SP,#8_bit_offset>]
其中,opcode3>:=LDR|STR
下面詳細(xì)介紹各數(shù)據(jù)傳送指令的語法和使用。
11.5.1寄存器裝載指令LDR(1)
(1)編碼格式
圖11.42LDR(1)指令的編碼格式
這種形式的LDR指令將32位內(nèi)存數(shù)據(jù)裝載到通用寄存器。常用于結(jié)構(gòu)體的數(shù)據(jù)訪問。域的基地址放在Rn寄存器中。
(2)指令的語法格式
LDRRd>,[Rn>,#immed_5>*4]
①Rd>
目的寄存器。用于存放從內(nèi)存中取出的數(shù)據(jù)。
②Rn>
基址寄存器,用于存放所取數(shù)據(jù)的基地址。
③immed_5>
5位立即數(shù)。該立即數(shù)的4倍加上基址寄存器的值形成目標(biāo)地址。
(3)指令操作的偽代碼
Address=Rn+(immed_5*4)
Ifaddress[1:0]==0b00
Data=Memory[address,4]
Else
Data=UNPREDICTABLE
Rd=data
(4)對(duì)應(yīng)的ARM指令
LDRRd>,[Rn>,#immed_5>*4]
注意 | 如果指令訪問地址非字對(duì)齊,則指令的執(zhí)行結(jié)果不可預(yù)知。 |
11.5.2寄存器裝載指令LDR(2)
(1)編碼格式
寄存器裝載指令LDR(2)的編碼格式如圖11.43所示。
圖11.43LDR(2)指令的編碼格式
寄存器裝載指令LDR(2)允許將一個(gè)32位內(nèi)存數(shù)據(jù)裝載到通用寄存器。此種形式的LDR指令常被用于訪問數(shù)組中的元素。
(2)指令的語法格式
LDRRd>,[Rn>,Rm>]
①Rd>
目的寄存器。
②Rn>
寄存器存放內(nèi)存訪問基地址。
③Rm>
寄存器存放內(nèi)存訪問偏移地址。
(3)指令操作的偽代碼
Address=Rn+Rm
Ifaddress[1:0]==0b00
Data=Memory[address,4]
Else
Data=UNPREDICTABLE
Rd=data
(4)對(duì)應(yīng)的ARM指令
LDRRd>,[Rn>,Rm>]
評(píng)論