1. 程式人生 > >多暫存器定址指令ldmia/ldmib和ARM儲存器訪問指令——多暫存器存取

多暫存器定址指令ldmia/ldmib和ARM儲存器訪問指令——多暫存器存取

多暫存器和堆疊定址的用法:多暫存器定址:LDMIA,LDMIB,STMIA,STMIB,LDMDA,LDMDB,STMDA,STMDB;
堆疊定址:LDMFA,LDMFD,STMFA,STMFD,LDMEA,LDMED,STMEA,STMED;

弄清堆疊定址的SP的變化:LDMFA,LDMFD,STMFA,STMFD,LDMEA,LDMED,STMEA,STMED;

IA: 每次傳送後地址加4;
IB: 每次傳送前地址加4;
DA: 每次傳送後地址減4;
DB: 每次傳送前地址減4;
FD: 滿遞減堆疊;
ED: 空遞減堆疊;
FA: 滿遞增堆疊;
EA: 空遞增堆疊。

1、多暫存器定址:
LDMIA R0!,{R1-R4}  

                               ;R1<----[R0]
                               ;R2<----[R0+4]
                               ;R3<----[R0+8]
                               ;R4<----[R0+12]         

例如:

所有的示例指令執行前:
mem32[0x1000C] = 0x04
mem32[0x10008] = 0x03
mem32[0x10004] = 0x02
mem32[0x10000] = 0x01
r0 = 0x00010010
r1 = 0x00000000
r3 = 0x00000000
r4 = 0x00000000
1) ldmia r0!, {r1-r3} 2) ldmib r0!, {r1-r3}
執行後:                      執行後:
r0 = 0x00100000    r0 = 0x00100000
r1 = 0x01                   r1 = 0x02
r2 = 0x02                   r2 = 0x03
r3 = 0x03                   r3 = 0x04

2、堆疊定址:
STMFD入棧指令,相當於STMDB
STMFD SP!,{R2-R4}                            ;[SP-4]<---R4
                                             ;[SP-8]<---R3 
                                             ;[SP-12]<---R2   
LDMFD出棧指令,相當於LDMIA
LDMFD SP!,{R6-R8}                ;R6<----[SP]
                                 ;R7<----[SP+4]
                                 ;R8<----[SP+8]