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