Thumb指令集之: 單寄存器數據傳送指令
11.5.3寄存器裝載指令LDR(3)
(1)編碼格式
寄存器裝載指令LDR(3)的編碼格式如圖11.44所示。
圖11.44LDR(3)指令的編碼格式
寄存器裝載指令LDR(3)允許將一個32位內存數據裝載到通用寄存器。此種形式的LDR指令常被用于訪問PC相關(PC-relative)數據。
(2)指令的語法格式
LDRRd>,[PC,#immed_8>*4]
①Rd>
目的寄存器。
②PC
程序指針寄存器,用于計算內存訪問的地址。計算地址時,PC值的bit[1]被系統(tǒng)默認為0進行計算,所以產生的內存訪問地址必為字對齊。
③immed_8>
8位立即數。該立即數的4倍將和PC值相加,形成內存訪問地址。
(3)指令操作的偽代碼
Address=(PC[31:2]2)+(immed_8*4)
Rd=Memory[address,4]
(4)對應的ARM指令
LDRRd>,[PC,#immed_8>*4]
11.5.4寄存器裝載指令LDR(4)
(1)編碼格式
寄存器裝載指令LDR(4)的編碼格式如圖11.45所示。
圖11.45LDR(4)指令的編碼格式
寄存器裝載指令LDR(4)允許將一個32位內存數據裝載到通用寄存器。此種形式的LDR指令常被用于訪問堆棧數據。
(2)指令的語法格式
LDRRd>,SP,#immed_8>*4]
①Rd>
目的寄存器。
②SP
堆棧指針寄存器,用于計算內存訪問地址。
③immed_8>
8位立即數。該立即數的4倍將和SP值相加,形成內存訪問地址。
(3)指令操作的偽代碼
Address=SP+(immed_8*4)
Ifaddress[1:0]==0b00
Data=memory[address,4]
Else
Data=UNPREDICTABLE
Rd=data
(4)對應的ARM指令
LDRRd>,[SP,#immed_8>*4]
評論