ARM指令尋址方式之: 內(nèi)存訪問指令尋址
6.[Rn],±Rm>
(1)編碼格式
指令的編碼格式如圖4.29所示。
圖4.29 雜項(xiàng)內(nèi)存訪問指令——后索引寄存器偏移尋址編碼格式
指令訪問地址為實(shí)際的基址寄存器的值。當(dāng)指令的執(zhí)行條件滿足時(shí),將基址寄存器的值加/減索引寄存器Rm的值回寫到Rn基址寄存器。
(2)語法格式
LDR|STR{cond>}H|SH|SB|D Rd>,[Rn],±Rm>
其中:
· Rn為基址寄存器,該寄存器包含內(nèi)存訪問的基地址;
· Rm>為偏移地址寄存器,包含內(nèi)存訪問地址偏移量。
(3)操作偽代碼
Address = Rn
If conditionPassed{cond} then
If U = = 1 then
Rn = Rn + Rm
Else
Rn = Rn – Rm
(4)說明
① 程序寄存器r15被指定為Rm或Rn,指令的執(zhí)行結(jié)果不可預(yù)知。
② 如果Rm和Rn指定為同一寄存器,指令的執(zhí)行結(jié)果不可預(yù)知。
4.2.3 批量Load/Store指令尋址方式
批量Load/Store指令將一片連續(xù)內(nèi)存單元的數(shù)據(jù)加載到通用寄存器組中或?qū)⒁唤M通用寄存器的數(shù)據(jù)存儲到內(nèi)存單元中。
批量Load/Store指令的尋址模式產(chǎn)生一個(gè)內(nèi)存單元的地址范圍,指令寄存器和內(nèi)存單元的對應(yīng)關(guān)系滿足這樣的規(guī)則,即編號低的寄存器對應(yīng)于內(nèi)存中低地址單元,編號高的寄存器對應(yīng)于內(nèi)存中的高地址單元。
指令的語法格式如下。
LDM|STM{cond>}addressing_mode> Rn>{!},registers>^>
指令的尋址方式如表4.6所示。
表4.6 批量Load/Store指令的尋址方式
格 式 | 模 式 | |
1 | IA(Increment After) | 后遞增方式 |
2 | IB(Increment Before) | 先遞增方式 |
3 | DA(Decrement After) | 后遞減方式 |
4 | DB(Decrement Before) | 先遞減方式 |
指令的編碼格式如圖4.30所示。
圖4.30 批量Load/Store指令編碼格式
編碼格式中各標(biāo)志位的含義如表4.7所示。
表4.7 批量Load/Store指令編碼格式各標(biāo)志位含義
位標(biāo)識 | 取 值 | 含 義 |
P | P=0 | Rn包含的地址,是所要訪問的內(nèi)存塊的高地址(U=0)還是低地址(U=1) |
P=1 | 標(biāo)識Rn所指向的內(nèi)存單元是否被訪問 | |
U | U=0 | Rn所指內(nèi)存單元為所要訪問的內(nèi)存單元塊的高地址 |
U=1 | Rn所指內(nèi)存單元為所要訪問的內(nèi)存單元塊的低地址 | |
S | S=0 | 當(dāng)程序計(jì)數(shù)器PC作為要加載的寄存器之一時(shí),S標(biāo)識是否將spsr內(nèi)容拷貝到cpsr;對于不加載PC的load指令和所有store指令,S標(biāo)識特權(quán)模式下,使用用戶模式寄存器組代替當(dāng)前模式下寄存器組 |
S=1 | ||
W | W=0 | 數(shù)據(jù)傳送完畢,更新地址寄存器內(nèi)容 |
W=1 | ||
L | L=0 | Store指令 |
L=1 | Load指令 |
評論