版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
3ARM9匯編語言ARM9微處理器采用的是ARMv4版本的指令集架構,其指令集代碼的格式如:3.1ARM9指令集
32位的ARM指令集由14種基本指令類型組成。指令操作碼中的Cond子域是條件域,它表明ARM指令集中的所有指令是有條件執(zhí)行的。指令執(zhí)行的條件是根據CPSR寄存器中的狀態(tài)標志位和指令的條件域確定,見下表:寄存器裝載及存儲類指令這類指令是最常用的指令之一。它們把數據從存儲器單元中裝載(讀入)到微處理器核的寄存器(即R0~R15)中,或者把微處理器核的寄存器中的數據存儲(寫入)到存儲器單元中。(1)單一數據加載/存儲指令:LDR/STR
指令書寫格式:(1)LDR/STR{條件碼}{B}Rd,[Rn]
(2)LDR/STR{條件碼}{B}Rd,[Rn,Flexoffset]{!}
(3)LDR/STR{條件碼}{B}Rd,label
(4)LDR/STR{條件碼}{B}Rd,[Rn],Flexoffset下面是幾條LDR/STR指令書寫的示例:LDRR2,[R5];無偏移量,R2←[R5]LDREQR5,[R6,#28]??;(若相等)R5←[R6+28],R6←R6+28LDRR8,label
;加載一個字到R8,該字存于label對應單元處STRR1,[R3],#-6!;R1→[R3],R3←R3-6STRBR0,[R3,-R8ASR#2]
;R0的最低字節(jié)→[R3-R8/4]單元的低字節(jié)
(2)多數據加載/存儲指令:LDM和STM。指令書寫格式:LDM/STM{條件碼}類型Rn{!},寄存器列表{^}指令中的類型是指存儲器地址變化的方式。也就是說,每加載或者存儲完一個寄存器后,存儲器的地址需要自動變化,如何變化則由指令助記符后面所跟的類型確定。類型可以是下列情況之一:IA每次數據傳送后存儲器的地址加1;IB每次數據傳送前存儲器的地址加1;DA每次數據傳送后存儲器的地址減1;DB每次數據傳送前存儲器的地址減1;FD滿遞減堆棧;ED空遞減堆棧;FA滿遞增堆棧;EA空遞增堆棧。例如:STMFDR13!,{R0-R12,R14};寄存器進?!璍DMFDR13!,{R0-R12,PC};寄存器出棧,返回利用STM指令把存儲在LR寄存器中的當前PC值保存到存儲器中的時候,同時還保存了CPSR寄存器的值。在用LDM指令重新裝載PC寄存器的時候,除非設計者在指令中寫上相應的符號,否則不會恢復CPSR的值。所寫的符號是在寄存器列表后跟隨一個“^”符號。例如:STMFDR13!,{R0-R12,R14};寄存器進?!璍DMFDR13!,{R0-R12,PC}^;寄存器出棧,返回,同時恢復CPSR(3)單一數據交換指令:SWP。該指令完成在寄存器和存儲器之間進行數據交換的功能,其句法如下:
SWP{條件碼}{B}Rd,Rm,[Rn]若指令助記符中加上可選后綴B,則交換的是字節(jié)數據,否則交換的是字數據。該指令的具體作用是數據從存儲單元加裁到Rd寄存器中,Rm寄存器的內容存儲到存儲單元中,該存儲單元的地址是Rn寄存器的值。影響狀態(tài)標志位類指令CPSR寄存器是ARM9微處理器核中保存狀態(tài)標志位的寄存器,其中N、V、C、Z標志是由指令執(zhí)行結果確定的。能影響這些標志生成的指令或讀/寫CPSR寄存器的指令如下:(1)ADC,ADD,SBC,SUB,RSC和RSB指令;(2)AND,ORR,EOR和BIC指令;(3)MOV和MVN指令;注:MOV和MVN是寄存器與寄存器間的傳送指令。若R15是目的寄存器,則會修改程序計數器PC的值或標志。這一點可被用于子程序返回,方法是把鏈接寄存器R14的內容傳送到R15中。(4)MUL和MLA指令;(5)MRS和MSR指令。注:MRS:只能完成CPSR寄存器和SPSR寄存器的讀操作;
MSR:只能完成CPSR寄存器和SPSR寄存器的寫操作。比較類指令
(1)CMP和CMN指令
CMP{條件碼}Op1,Op2
該條指令的功能如下:狀態(tài)位=Op1-Op2的結果。
CMN:與取負的數比較指令CMN{條件碼}Op1,Op2
該條指令的功能如下:狀態(tài)位=Op1-(-Op2)的結果。(2)TST和TEQ指令
TST{條件碼}Op1,Op2
該條指令的功能如下:狀態(tài)位=Op1ANDOp2的結果。
TEQ{條件碼}Op1,Op2
該條指令的功能如下:狀態(tài)位=Op1EOROp2的結果。分枝類指令
(1)B和BLB:分枝指令,其句法是:B{條件碼}destaddB指令是最簡單的分枝指令。ARM9微處理器一旦遇到一個B指令,將立即跳轉到指令中給定的目的地址處,從那里繼續(xù)執(zhí)行。BL:帶鏈接的分枝指令,其句法是:BL{條件碼}destaddBL指令是一個需要返回的分枝指令。該分枝指令在分枝之前,R14寄存器(即LR寄存器)中會裝載上R15寄存器(即PC寄存器)的內容。若要從分枝處返回發(fā)生轉移的地方,可以通過重新把R14寄存器的內容裝載到R15寄存器中來實現,ARM微處理器返回到這個分枝指令之后的第一條指令處繼續(xù)執(zhí)行。軟件中斷指令
SWI:軟件中斷指令,SWI是SoftwareInterrupt的縮寫。其句法是:
SWI{條件碼}destcoad
上述句法中destcoad是一個24位的編號,即軟件中斷號。SWI指令會引起SWI異常,使得微處理器的工作模式變換為管理模式,CPSR將被保存到管理模式的SPSR中,指令執(zhí)行流水被阻塞,并轉移到SWI異常向量處。該指令不影響條件碼標志。SWI指令主要是為操作系統提供的。匯編器偽指令
偽指令不是目標系統能夠執(zhí)行的指令,而是匯編器采用的,用來指示如何進行匯編的符號,這種符號在匯編時,匯編器會把它匯編成一條或幾條正真的匯編指令。幾種主要的偽指令:(1)ADR
將程序相對偏移或寄存器相對偏移地址加載到寄存器中
(2)ADRL
該偽指令是加載長地址,功能類似如ADR偽指令
(3)LDR
該偽指令作用是把一個32位常量或常量表達式加載到寄存器中。
3.3匯編程序設計嵌入式系統發(fā)展到今天,程序的運行效率及存儲容量已不是嵌入式系統設計時所需考慮的主要問題。若只是關心嵌入式系統所具有的應用功能,那么,在設計中,采用高級編程語言(例如C語言等)編寫程序更合適,它隱藏了微處理器執(zhí)行指令的許多細節(jié),設計時相對方便。但是,如果嵌入式系統設計者希望對嵌入式系統有更深層次的了解,希望能完成系統啟動程序的編寫、操作系統移植等任務,那么,掌握匯編語言程序設計是非常必要的。匯編編程規(guī)則利用ARM9匯編指令進行程序設計時,程序中的每一語句行的格式為:
{標號}{指令“或”指示符“或”偽指令}{;注解}。指示符是匯編器定義的,也是用來指示匯編器如何進行匯編的符號,這些符號僅指示匯編器如何進行匯編和連接,不會被匯編成一條正真的匯編指令。幾個主要指示符:(1)AREA指示匯編器匯編一段新的代碼段或數據段的指示符;(2)ENTRY指示匯編器把其后的首條指令作為程序入口的指示符,一個源文件中只能有一個ENTRY指示符;(3)END表示源程序結束的指示符;(4)IMPORT告訴匯編器某個變量名或標號在當前程序段中未曾定義的指示符,這個變量名或標號由連接器進行定位;(5)EXPORT指示由連接器在目標和庫文件中使用的符號的指示符;(6)CODE32指示匯編器將隨后的指令作為32位ARM指令進行匯編的指示符;(7)CODE16指示匯編器將隨后的指令作為16位Thumb指令進行匯編的指示符;(8)GET指示包含一個文件的指示符,匯編器在GET處匯編包含的文件;(9)DATA指示一個標號是代碼段中數據區(qū)域的標號,該符號后是通常是偽指令DCB或DCD。匯編指令的特點ARM9的匯編指令相對于其他微處理器的匯編指令來說,具有許多特點:(1)指令的條件執(zhí)行:32位ARM指令集中的所有指令都是條件執(zhí)行的指令。需要條件執(zhí)行的指令只需要使用條件后綴,就可以實現條件執(zhí)行。例1:
CMPR0,R1;比較R0和R1的值,結果用于更新標志
ADDEQSR0,R1,R2;如標志Z=1,則加法指令執(zhí)行,并更新標志(2)多種形式的傳送類指令(3)多寄存器加載/存儲指令(4)映射存儲的指示符:ARM匯編器可以使用MAP和“#”指示符,來描述一個結構體,指示符MAP和“#”主要用于完成結構體的定義,并不一定具體確定其內存空間地址。指示符MAP說明結構體的基地址,指示符“#”定義數據項的標號并說明所需空間。例如:
MAP0x00001000element1#4;element1占用4字節(jié)
element2#4;element2占用4字節(jié)
element3#8;element3占用8字節(jié)
element4#8;element4占用8字節(jié)
element5#256;element5占用256字節(jié)(5)程序中的宏定義:在匯編程序設計時,宏定義的使用是為了提高程序的可讀性、以及可維護性。ARM匯編器提供的宏類似于標準C語言中的#define,其功能是在程序源代碼中進行字符替代。ARM匯編器把指示符MACRO作為宏定義的開始,指示符MEND作為宏定義的結束,并且可以帶有參數。例如:
MACRO$aaexample$bb,$cc,$dd$aaCMP$cc,#0B$dd$bbMEND匯編程序實例--系統引導程序
系統引導程序(Bootloader)是目標系統硬件上電或復位后執(zhí)行的第一段程序代碼,它通常被安排在系統復位異常向量地址處。系統引導程序是依賴于具體硬件環(huán)境的,除了依賴于微處理器的體系結構外,還依賴于具體的板級硬件配置。通常系統引導程序需完成以下功能:設置異常向量表(即在異常向量地址處設置相關分枝指令)關看門狗定時器,關中斷。有時需要設置系統微處理器的速度和時鐘頻率。設置好堆棧指針。系統堆棧初始化取決于用戶使用哪些異常,以及系統需要處理哪些錯誤類型。一般情況下,管理模式堆棧必須設置;若使用了IRQ中斷,則IRQ中斷堆棧必須設置。如果系統應用程序是運行在用戶模式下,可在系統引導程序中將微處理器的工作模式改為用戶模式并初始化用戶模式下的堆棧指針。若系統使用了DRAM或其他外設,需要設置相關寄存器,以確定其刷新頻率、總線寬度等信息。初始化所需的存儲器空間。跳轉到C程序的入口點。一個啟動引導程序示例(文件名:Startup.s);下面指令包含2440addr.s文件,該文件中定義了S3C2440內部寄存器地址對應的變量,如WTCON、INTMSK等。GET2440addr.s;某些ARM920TCPSR寄存器位的定義,定義了部分常量。USERMODE EQU 0x10FIQMODE EQU 0x11IRQMODE EQU 0x12SVCMODE EQU 0x13ABORTMODE EQU 0x17UNDEFMODE EQU 0x1bMODEMASK EQU 0x1fNOINT EQU 0xc0I_Bit * 0x80F_Bit * 0x40;AREA指示匯編器匯編一段新的代碼
AREA Init,CODE,READONLY;IMPORT提供匯編器在當前匯編中未曾定義的符號名。
IMPORT__use_no_semihosting_swi IMPORT Enter_UNDEF IMPORT Enter_SWI IMPORT Enter_PABORT IMPORT Enter_DABORT IMPORT Enter_FIQ;下面ENTRY指明了程序的入口,在應用程序中有且只有一個程序入口。
ENTRY;下面是異常向量表,第一條語句是復位異常對應的跳轉指令。
B ColdReset ;復位
B Enter_UNDEF ;未定義指令錯誤
B Enter_SWI ;軟件中斷
B Enter_PABORT ;預取指令錯誤
B Enter_DABORT ;數據存取錯誤
B . ;一個保留的中斷向量
B IRQ_Handler ;IRQHandler B Enter_FIQ ;FIQHandler;涉及IRQ異常的處理
EXPORT IRQ_Handler IRQ_Handler IMPORT ISR_IrqHandler STMFD sp!,{r0-r12,lr} BL ISR_IrqHandler LDMFD sp!,{r0-r12,lr} SUBS pc,lr, #4;系統上電或復位后跳轉到此處開始進行運行。
EXPORTColdResetColdReset;關看門狗定時器
LDR R0,=WTCON LDR R1,=0x0 STR R1,[R0];關所有中斷
LDR R0,=INTMSK LDR R1,=0xffffffff
STR R1,[r0] LDR R0,=INTSUBMSK LDR R1,=0x7ff ;關所有子中斷源
STR R1,[r0];初始化堆棧,使用了帶鏈接的分枝指令,跳轉到堆棧指針設置子程序中
BL InitStacks;下面調轉到C語言的主函數處
IMPORT__main BL __main;轉移到用戶C語言的主函數,引導應用程序
B .;下面是初始化堆棧的子函數 IMPORTUserStack IMPORTSVCStack
IMPORT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年教工教育培訓計劃
- 2025年財政監(jiān)督總結與2025工作計劃
- 2025年婦幼保健院工作計劃
- 2025年第二學期學校安全工作計劃范文
- Unit 2 Lesson 3 In the library(說課稿)-2024-2025學年冀教版(三起)(2024)英語三年級上冊
- Unit7 Protect the Earth 第一課時(說課稿)2024-2025學年譯林版(三起)英語六年級上冊
- 2025年銷售月工作計劃
- 2024年公務員考試邊壩縣《行政職業(yè)能力測驗》考前沖刺試卷含解析
- 全國清華版信息技術小學三年級上冊新授課 第2課 認識新伙伴-計算機 說課稿
- 2025幼兒園大班教育教學計劃
- (一模)株洲市2025屆高三教學質量統一檢測 英語試卷
- 社區(qū)意識形態(tài)工作責任制實施細則模版(2篇)
- 礦業(yè)公司規(guī)章制度匯編
- 介入導管室護士長職責
- 《國家課程建設》課件
- 四川省南充市2023-2024學年高一上學期期末考試 歷史 含解析
- 2024-2025學年湖北省武漢市華中師大一附中高三上學期期中英語試題及答案
- 浙江省衢州市2023-2024學年高一上學期1月期末數學試題 含解析
- 大學老師工作述職報告
- 辦公樓裝飾裝修工程施工組織設計方案
- 汽車產業(yè)AIGC技術應用白皮書 2024
評論
0/150
提交評論