堆疊定址的命令ldmfa/stmfa
、ldmea/stmea
、ldmfd/stmfd
、ldmed/stmed。
ldm和
stm表示多暫存器定址,即一次可以傳送多個暫存器值。
ldm:一次裝載多個,這裡用來出棧。(另有,ldr暫存器間接定址 也是裝載r2內容作指標指向的記憶體到r1,如:ldrr1,[r2] )
stm:一次儲存多個,這裡用來入棧。(另有,str暫存器間接定址 也是把r1寫入到r2內容作指標指向的記憶體,如:ldr
r1,[r2]
)f/e表示指標指向的位置 f:
full
滿堆疊,表示堆疊指標指向最後乙個入棧的有效資料項。 e:
empty
a/d表示堆疊的生長方式
fd、ed、
fa和ea指定是滿棧還是空棧,是公升序棧還是降序棧,用於堆疊定址。
乙個滿棧的棧指標指向上次寫的最後乙個資料單元.
空棧的棧指標指向第乙個空閒單元。
乙個降序棧是在記憶體中反向增長而公升序棧在記憶體中正向增長。 :當
regs
中不包含
pc時,該字尾用於指示指令所用的暫存器為使用者模式下的暫存器,
否則指示指令執行時,將暫存器spsr
的值複製到
cpsr中。
例:area example,code,readonly
entry
export start
export loop
export over
start
mov r4,#4
mov r5,#5
mov r6,#6
add r0,sp,#0
stmfa sp!, ; 1:stmfa,2: stmfd,3: stmea,4: stmed
add r1,sp,#0
b loop
loop
b loop
over
end
記憶體中的表示:
假設sp指向0x00000000位址
1: stmfa
sp!,
0 1 2 3 4 5 6 7 8 9 a b c d e f
0x0000 0000 10 00 ff e7 04 00 00 00 05 00 00 00 06 00 00 00
a:向高位址+1
sp:0x0000 000c
2: stmfd
sp!,
0 1 2 3 4 5 6 7 8 9 a b c d e f
0xffff fff0 10 00 ff e7 04 00 00 00 05 00 00 00 06 00 00 00
d:向低位址+1
sp:0xffff fff4
3: stmea
sp!,
0 1 2 3 4 5 6 7 8 9 a b c d e f
0x0000 0000 04 00 00 00 05 00 00 00 06 00 00 00
00 e8 00 e8
a:向高位址+1
sp:0x0000 000c
4: stmed
sp!,
0 1 2 3 4 5 6 7 8 9 a b c d e f
0xffff fff0 10 00 ff e7 00 e8 00 e8 04 00 00 00 05 00 00 00
0x0000 0000 06 00 00 00
00 e8 00 e8 10 00 ff e7 00 e8 00 e8
d:向低位址+1
sp:0xffff fff4
又如:stmed sp!,
mov r2,#2
stmed sp!,
0 1 2 3 4 5 6 7 8 9 a b c d e f
0xffff fff0 10 00 ff e7 02 00 00 00
04 00 00 00 05 00 00 00
0x0000 0000 06 00 00 00
00 e8 00 e8 10 00 ff e7 00 e8 00 e8
d:向低位址+1
sp:0xffff fff0
ldmed sp!,
r7:0x02 (正確)
r8:0x04 (正確)
ldmfd sp!,
r7:0xe7ff0001 (不是想要的結果。)
r8:0x02 (不是想要的結果。)
所以,壓入堆疊,用的ed引數。彈出堆疊也要用回ed ,不能用fd.更不能用fa.訪問到的記憶體是不是想要的。
多暫存器定址指令ldmia ldmib
多暫存器和堆疊定址的用法 多暫存器定址 ldmia,ldmib,stmia,stmib,ldmda,ldmdb,s a,s b 堆疊定址 ldmfa,ldmfd,stmfa,stmfd,ldmea,ldmed,stmea,stmed fd 滿遞減堆疊 ed 空遞減堆疊 fa 滿遞增堆疊 ea 空遞增...
多暫存器和堆疊定址的用法
多暫存器定址 ldmia,ldmib,stmia,stmib,ldmda,ldmdb,s a,s b 堆疊定址 ldmfa,ldmfd,stmfa,stmfd,ldmea,ldmed,stmea,stmed ldm批量載入 stm批量儲存指令可以實現一組暫存器和一塊連續的記憶體單元之間傳輸資料。允許...
十四 暫存器和定址
1.暫存器分類 2.一共37個暫存器,31個通用暫存器,6個狀態暫存器 其中usr和sys的暫存器很類似 3.通用暫存器 1 不分組暫存器0 7 2 分組暫存器 8 14 3 pc指標 r15 4狀態暫存器 只有在異常模式下,才會既有cpsr又有spsr,usr和sys模式下只有cpsr,為的是保護...