ARM指令尋址方式之: 內(nèi)存訪問(wèn)指令尋址
4.2 內(nèi)存訪問(wèn)指令尋址
根據(jù)內(nèi)存訪問(wèn)指令的分類(lèi),內(nèi)存訪問(wèn)指令的尋址方式可以分為以下幾種。
① 字及無(wú)符號(hào)字節(jié)的Load/Store指令的尋址方式。
② 雜類(lèi)Load/Store指令的尋址方式。
③ 批量Load/Store指令的尋址方式。
④ 協(xié)處理器Load/Store指令的尋址方式。
4.2.1 字及無(wú)符號(hào)字節(jié)的Load/Store指令的尋址方式
字及無(wú)符號(hào)字節(jié)的Load/Store指令語(yǔ)法格式如下:
LDR|STR{cond>}{B}{T} Rd>,addressing_mode>
其中addressing_mode>共有9種尋址方式,如表4.2所示。
表4.2 字及無(wú)符合字節(jié)的Load/Store指令的尋址方式
格 式 | 模 式 | |
1 | [Rn,#±offset_12>] | 立即數(shù)偏移尋址 (Immediate offset) |
2 | [Rn,±Rm] | 寄存器偏移尋址 (Register offset) |
3 | [Rn,Rm,shift># offset_12>] | 帶移位的寄存器偏移尋址 (Scaled register offset) |
4 | [Rn,#± offset_12>]! | 立即數(shù)前索引尋址 (Immediate pre-indexed) |
5 | [Rn,±Rm]! | 寄存器前索引尋址 (Register post-indexed) |
6 | [Rn,Rm,shift># offset_12>]! | 帶移位的寄存器前索引尋址 (Scaled register pre-indexed) |
7 | [Rn],#± offset_12> | 立即數(shù)后索引尋址 (Immediate post-indeded) |
8 | [Rn],±Rm> | 寄存器后索引尋址 (Register post-indexed) |
9 | [Rn],±Rm>,shift># offset_12> | 帶移位的寄存器后索引尋址 (Scaled register post-indexed) |
字及無(wú)符號(hào)字節(jié)的Load/Store指令的解碼格式如圖4.13所示。
圖4.13 字及無(wú)符號(hào)字節(jié)的Load/Store指令的解碼格式
編碼格式中各位的含義如表4.3所示。
表4.3 字和無(wú)符號(hào)半字Load/Store指令編碼格式各位含義
位 標(biāo) 識(shí) | 取 值 | 含 義 |
P | P=0 | 使用后索引尋址 |
P=1 | 使用偏移地址或前索引尋址(由W位決定) | |
U | U=0 | 訪問(wèn)的地址=基址寄存器的值-偏移量(offset) |
U=1 | 訪問(wèn)的地址=基址寄存器的值+偏移量(offset) | |
B | B=0 | 字訪問(wèn)Load/Store |
B=1 | 無(wú)符號(hào)字節(jié)訪問(wèn)Load/Store | |
W | W=0 | 如果P=0,該指令為L(zhǎng)DR、LDRB、STR或STRB指令,且內(nèi)存訪問(wèn)指令為正常訪問(wèn)指令;如果P=1,指令執(zhí)行不更新基地址 |
W=1 | 如果P=0,該指令為L(zhǎng)DRBT、LDRT、STRBT或STRT,且指令為非特權(quán)(用戶模式)訪問(wèn)指令;如果P=1,計(jì)算內(nèi)存地址并更新基地址 | |
L | L=0 | Store指令 |
L=1 | Load指令 |
評(píng)論