日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ARM多寄存器加载/存储指令

發(fā)布時間:2025/3/21 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ARM多寄存器加载/存储指令 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ARM中如何實現(xiàn)跳轉(zhuǎn)?

a. 直接向PC 寄存器賦值實現(xiàn)跳轉(zhuǎn)
MOV PC ,R14

b.使用分支指令直接跳轉(zhuǎn)

分支指令種類
1.B:分支指令
2.BL:帶鏈接的分支指令(可返回)
3.BX:帶狀態(tài)切換的分支指令

多寄存器加載/存儲指令:

可以實現(xiàn)在一組寄存器和一塊連續(xù)的內(nèi)存但愿之間傳輸數(shù)據(jù)

LDM 加載多個寄存器
STM 存儲多個寄存器
(允許1條指令傳送16個寄存器的任何子集或所有寄存器,主要用于現(xiàn)場保護(hù).數(shù)據(jù)復(fù)制.常數(shù)傳遞等)

詳情舉例:

加載指令:

LDM 源地址,目標(biāo)寄存器列表
(從源地址 -----> 目標(biāo)寄存器列表)

存儲指令:

STM 目標(biāo)地址,源寄存器列表
(從源寄存器列表---->目標(biāo)地址)

LDM/STM指令搭配不同的后綴實現(xiàn)不同的方式地址增長:
IA:每次傳送后地址+4
IB:每次傳送前地址+4
DA:每次傳送后地址-4
DB:每次傳送前地址-4

舉例如圖:

這里大家會不會想到堆棧操作里面的 滿堆棧 和 空堆棧 里面的一系列操作呢?
其實他們之間是有相互關(guān)系的,當(dāng)然,如果不了解什么是空堆棧和滿堆棧的話,可以查看以下博客:ARM處理器尋址方式 之 堆棧尋址

關(guān)系如下圖所示

最大區(qū)別
數(shù)據(jù)傳送:使用臨時寄存器作為基址來尋址
堆棧操作:使用SP寄存器作為基址來尋址

堆棧操作圖


特殊情況


右上角多了一個^符號
表示SPSR(程序狀態(tài)保存寄存器)要對CPSR(程序狀態(tài)寄存器)進(jìn)行還原(即取出數(shù)據(jù)來進(jìn)行覆蓋),進(jìn)行程序狀態(tài)寄存器的還原

寄存器和存儲器交換指令:
SWP指令用于將一個內(nèi)存但愿(該內(nèi)存地址放在寄存器Rn中)的內(nèi)容讀取到一個寄存器Rd中,同時將另一個寄存器Rm的內(nèi)容寫入到該內(nèi)存單元中。使用SWP可實現(xiàn)信號量的操作。(注:Rm和Rd可以相同
SWP 讀入寄存器 ,輸出寄存器 ,目標(biāo)地址
首先把 目標(biāo)地址里面的值取出放入到讀入寄存器中,
然后把輸出寄存器里面的值取出來存儲到目標(biāo)地址的內(nèi)存單元。

(可以帶后綴B,代表字節(jié)操作,不帶B的默認(rèn)是字 數(shù)據(jù)操作)

數(shù)據(jù)處理指令大致分為3類:
a.數(shù)據(jù)傳送指令
b.算數(shù)邏輯運算指令
c.比較指令

數(shù)據(jù)處理指令只能對寄存器的內(nèi)容進(jìn)行操作,而不能對內(nèi)存中的數(shù)據(jù)進(jìn)行操作。所有的ARM數(shù)據(jù)處理指令均可選擇使用S后綴,并影響(CPSR寄存器)標(biāo)志狀態(tài)

總結(jié)

以上是生活随笔為你收集整理的ARM多寄存器加载/存储指令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。