ARM多寄存器加载/存储指令
ARM中如何實現跳轉?
a. 直接向PC 寄存器賦值實現跳轉
MOV PC ,R14
b.使用分支指令直接跳轉
分支指令種類
1.B:分支指令
2.BL:帶鏈接的分支指令(可返回)
3.BX:帶狀態切換的分支指令
多寄存器加載/存儲指令:
可以實現在一組寄存器和一塊連續的內存但愿之間傳輸數據
LDM 加載多個寄存器
STM 存儲多個寄存器
(允許1條指令傳送16個寄存器的任何子集或所有寄存器,主要用于現場保護.數據復制.常數傳遞等)
詳情舉例:
加載指令:
LDM 源地址,目標寄存器列表
(從源地址 -----> 目標寄存器列表)
存儲指令:
STM 目標地址,源寄存器列表
(從源寄存器列表---->目標地址)
LDM/STM指令搭配不同的后綴實現不同的方式地址增長:
IA:每次傳送后地址+4
IB:每次傳送前地址+4
DA:每次傳送后地址-4
DB:每次傳送前地址-4
舉例如圖:
這里大家會不會想到堆棧操作里面的 滿堆棧 和 空堆棧 里面的一系列操作呢?
其實他們之間是有相互關系的,當然,如果不了解什么是空堆棧和滿堆棧的話,可以查看以下博客:ARM處理器尋址方式 之 堆棧尋址
關系如下圖所示
最大區別
數據傳送:使用臨時寄存器作為基址來尋址
堆棧操作:使用SP寄存器作為基址來尋址
堆棧操作圖
特殊情況
右上角多了一個^符號
表示SPSR(程序狀態保存寄存器)要對CPSR(程序狀態寄存器)進行還原(即取出數據來進行覆蓋),進行程序狀態寄存器的還原
寄存器和存儲器交換指令:
SWP指令用于將一個內存但愿(該內存地址放在寄存器Rn中)的內容讀取到一個寄存器Rd中,同時將另一個寄存器Rm的內容寫入到該內存單元中。使用SWP可實現信號量的操作。(注:Rm和Rd可以相同)
SWP 讀入寄存器 ,輸出寄存器 ,目標地址
首先把 目標地址里面的值取出放入到讀入寄存器中,
然后把輸出寄存器里面的值取出來存儲到目標地址的內存單元。
(可以帶后綴B,代表字節操作,不帶B的默認是字 數據操作)
數據處理指令大致分為3類:
a.數據傳送指令
b.算數邏輯運算指令
c.比較指令
數據處理指令只能對寄存器的內容進行操作,而不能對內存中的數據進行操作。所有的ARM數據處理指令均可選擇使用S后綴,并影響(CPSR寄存器)標志狀態
總結
以上是生活随笔為你收集整理的ARM多寄存器加载/存储指令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 逆向扫雷(2)
- 下一篇: ReadFile 和 补充Create