ARM指令尋址方式之: 內(nèi)存訪問指令尋址
雜類Load/Store指令的解碼格式如圖4.23所示。
圖4.23 雜類Load/Store指令解碼格式
編碼格式中各標志位的含義如表4.5所示。
表4.5 雜類Load/Store指令編碼格式各標志位含義
位 標 識 | 取 值 | 含 義 |
P | P=0 | 使用后索引尋址 |
P=1 | 使用偏移地址或前索引尋址(由W位決定) |
續(xù)表
位 標 識 | 取 值 | 含 義 |
U | U=0 | 訪問的地址=基址寄存器的值-偏移量(offset) |
U=1 | 訪問的地址=基址寄存器的值+偏移量(offset) | |
W | W=0 | 如果P=0,使用后索引尋址;P=1,指令不改變基址寄存器的值 |
W=1 | 如果P=0,未定義指令;如果P=1,將計算的內(nèi)存訪問地址回寫到基址寄存器 | |
L | L=0 | Store指令 |
L=1 | Load指令 | |
S | S=0 | 無符號半字內(nèi)存訪問 |
S=1 | 有符號半字內(nèi)存訪問 | |
H | H=0 | 字節(jié)訪問 |
H=1 | 半字訪問 |
注意 | 當S=0并且H=0時,并非無符號的字節(jié)內(nèi)存訪問指令。無符號的內(nèi)存訪問指令不使用該種尋址方式,詳見本章上一節(jié)。 當S=1并且L=0時,并非是有符號的存儲指令,而是未定義指令。ARM指令并未區(qū)分有符號和無符號的字節(jié)和半字存儲。 |
1.[Rn,#±offset_8>]
(1)編碼格式
指令的編碼格式如圖4.24所示。
圖4.24 雜項內(nèi)存訪問指令——立即數(shù)偏移尋址編碼格式
內(nèi)存訪問地址為基址寄存器Rn的值加(或減)立即數(shù)offset_8。
編程中,在訪問結(jié)構(gòu)體或記錄(record)類型的變量時,這些內(nèi)存的操作指令是十分有效的。另外,在子程序中,也常用這些指令訪問本地變量和堆棧。當offset_8=0時,內(nèi)存訪問地址即基址寄存器Rn的值。
(2)語法格式
LDR|STR{cond>}H|SH|SB|D Rd>,[Rn>,#±offset_12>]
其中:
· Rn為基址寄存器,該寄存器包含內(nèi)存訪問的基地址。
· offset_8>為8位立即數(shù),內(nèi)存訪問地址偏移量。
(3)操作偽代碼
offset_8 = (immedH 4) OR immedL
If U = = 1 then
Address = Rn + offset_8
Else
Address = Rn – offset_8
(4)說明
① 如果指令中沒有指定立即數(shù),使用[Rn>],編譯器按[Rn>,#0]形式編碼。
② 如果Rn被指定為程序計數(shù)器r15,其值為當前指令地址加8。
評論