日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式分享
[導讀]本文將會簡單介紹ARM當中的的arm匯編指令的學習。

本文將會簡單介紹ARM當中的的arm匯編指令的學習。

macro restore_user_regs

ldr r1,[sp, #S_PSR]

ldr lr,[sp, #S_PC]! @ !用來控制基址變址尋址的最終新地址是否進行回寫操作,

@ 執(zhí)行l(wèi)dr之后sp被回寫成sp+#S_PC基址變址尋址的新地址

msr spsr,r1 @ 把cpsr的值保存到spsr中

ldmdb sp,{r0 - lr}^ @ lr=[sp-1*4],r13=[sp-2*4],r12=[sp-3*4],......,r0=[sp-15*4]

@ 因為沒對pc賦值,所以^的表示將數據恢復到User模式的[r0-lr]寄存器組中[gliethttp]

mov r0,r0

add sp,sp,#S_FRAME_SIZE - S_PC

movs pc,lr

.endm

其他指令正在學習中[隨時補充gliethttp]

-----------------------------

1.ldr ip,[sp],#4 將sp中內容存入ip,之后sp=sp+4;

ldr ip,[sp,#4] 將sp+4這個新地址下內容存入ip,之后sp值保持不變

ldr ip,[sp,#4]!將sp+4這個新地址下內容存入ip,之后sp=sp+4將新地址值賦給sp

str ip,[sp],#4 將ip存入sp地址處,之后sp=sp+4;

str ip,[sp,#4] 將ip存入sp+4這個新地址,之后sp值保持不變

str ip,[sp,#4]!將ip存入sp+4這個新地址,之后sp=sp+4將新地址值賦給sp

-----------------------------

2.movs r1,#3 ;movs將導致ALU被更改,因為r1賦值非0,即操作結果r0非0,所以ALU的Z標志清0

bne 1f ;因為Z=0,說明不等,所以向前跳到標號1:所在處繼續(xù)執(zhí)行其他語句

-----------------------------

3.LDM表示裝載,STM表示存儲.

LDMED LDMIB 預先增加裝載

LDMFD LDMIA 過后增加裝載

LDMEA LDMDB 預先減少裝載

LDMFA LDMDA 過后減少裝載

STMFA STMIB 預先增加存儲

STMEA STMIA 過后增加存儲

STMFD STMDB 預先減少存儲

STMED STMDA 過后減少存儲

注意ED不同于IB;只對于預先減少裝是相同的.在存儲的時候,ED是過后減少的.

FD、ED、FA、和 EA 指定是滿棧還是空棧,是升序棧還是降序棧.

對于存儲STM而言

先加后存 FA 姑且這么來記,先加(first add),存數據

后加先存 EA 姑且這么來記,存數據,后加end add

先減后存 FD 姑且這么來記,先減first dec,存數據

后減先存 ED 姑且這么來記,存數據,后減end dec

然后記憶LDM,LDM是STM的反相彈出動作,所以

因為是先加后存,所以后減先取 FA 就成了與STM對應的取數據,后減

因為是后加先存,所以先減后取 EA 就成了與STM對應的先減,取數據

因為是先減后存,所以后加先取 FD 就成了與STM對應的取數據,后加

因為是后減先存,所以先加后取 ED 就成了與STM對應的先加,取數據

我想通過上面的變態(tài)方式可以比較容易的記住這套指令[gliethttp]

一個滿棧的棧指針指向上次寫的最后一個數據單元,而空棧的棧指針指向第一個空閑單元.

一個降序棧是在內存中反向增長(就是說,從應用程序空間結束處開始反向增長)而升序棧在內存中正向增長.

其他形式簡單的描述指令的行為,意思分別是

IA過后增加(Increment After)、

IB預先增加(Increment Before)、

DA過后減少(Decrement After)、

DB預先減少(Decrement Before).

RISC OS使用傳統的滿降序棧.在使用符合APCS規(guī)定的編譯器的時候,它通常把你的棧指針設置在應用程序空間的結束處并接著使用一個FD(滿降序-Full Descending)棧.如果你與一個高級語言(BASIC或C)一起工作,你將別無選擇.

棧指針(傳統上是R13)指向一個滿降序棧.你必須繼續(xù)這個格式,或則建立并管理你自己的棧.

4.teq r1,#0 //r1-0,將結果送入狀態(tài)標志,如果r1和0相減的結果為0,那么ALU的Z置位,否則Z清0

bne reschedule//ne表示Z非0,即:不等,那么執(zhí)行reschedule函數

-----------------------------

5.使用tst來檢查是否設置了特定的位

tst r1,#0x80 //按位and操作,檢測r1的0x1<<7,即第7位是否置1,按位與之后結果為0,那么ALU的Z置位

beq reset //如果Z置位,即:以上按位與操作結果是0,那么跳轉到reset標號執(zhí)行

-----------------------------

6.^的理解

^是一個后綴標志,不能在User模式和Sys系統模式下使用該標志.該標志有兩個存在目的:

6.1.對于LDM操作,同時恢復的寄存器中含有pc(r15)寄存器,那么指令執(zhí)行的同時cpu自動將spsr拷貝到cpsr中

如:在IRQ中斷返回代碼中[如下為ads環(huán)境下的代碼gliethttp]

ldmfd {r4} //讀取sp中保存的的spsr值到r4中

msr spsr_cxsf,r4 //對spsr的所有控制為進行寫操作,將r4的值全部注入spsr

ldmfd {r0-r12,lr,pc}^//當指令執(zhí)行完畢,pc跳轉之前,將spsr的值自動拷貝到cpsr中[gliethttp]

6.2.數據的送入、送出發(fā)生在User用戶模式下的寄存器,而非當前模式寄存器

如:ldmdb sp,{r0 - lr}^;表示sp棧中的數據到User分組寄存器r0-lr中,而不是恢復到當前模式寄存器r0-lr 當然對于User,System,IRQ,SVC,Abort,Undefined這6種模式來說[gliethttp]r0-r12是共用的,只是r13和r14

為分別獨有,對于FIQ模式,僅僅r0-r7是和前6中模式的r0-r7共用,r8-r14都是FIQ模式下專有.

7.spsr_cxsf,cpsr_cxsf的理解

c - control field mask byte(PSR[7:0])

x - extension field mask byte(PSR[15:8])

s - status field mask byte(PSR[23:16)

f - flags field mask byte(PSR[31:24]).

老式聲明方式:cpsr_flg,cpsr_all在ADS中已經不在支持

cpsr_flg對應cpsr_f

cpsr_all對應cpsr_cxsf

需要使用專用指令對cpsr和spsr操作:mrs,msr

mrs tmp,cpsr //讀取CPSR的值

bic tmp,tmp,#0x80 //如果第7位為1,將其清0

msr cpsr_c,tmp //對控制位區(qū)psr[7:0]進行寫操作

-----------------------------

8.cpsr的理解

CPSR = Current Program Status Register

SPSR = Saved Program Status Registers

CPSR寄存器(和保存它的SPSR寄存器)

N,Z,C,V稱為ALU狀態(tài)標志

N:如果結果是負數則置位

Z:如果結果是零則置位

C:如果發(fā)生進位則置位

V:如果發(fā)生溢出則置位

I:置位表示禁用IRQ中斷,清0表示使能IRQ

F:置位表示禁用FIQ中斷,清0表示使能FIQ

T:置位表示系統運行在Thumb態(tài),清0表示運行在ARM態(tài)

M[4:0]:

10000 User模式,和System系統模式一樣

10001 FIQ模式

10010 IRQ模式

10011 SVC超級管理模式

10111 Abort數據異常模式

11011 Undefined未定義指令模式

11111 System系統模式,和User模式一樣

舉例:

ands r2,r2,#7 使用運算結果改變標志位,如果運算結果r2=0,那么Z置位,EQ相等判斷成立

subs r2,r2,#1 使用運算結果改變標志位,如果運算結果r2=0,那么Z置位,EQ相等判斷成立

beq wordcopy

EQ : 等于

NE : 不等

CS : 無符號>=

CC : 無符號<

MI : 負數

PL : 非負[>=0]

VS : 溢出

VC : 無溢出

HI : 無符號>

LS : 無符號<=

GE : 有符號>=

LT : 有符號<

GT : 有符號>

LE : 有符號<=

AL : 總是[默認]

以上就是arm匯編中的指令學習,你還有要補充的嗎?

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統,而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉