版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
3ARM9匯編語言ARM9微處理器采用的是ARMv4版本的指令集架構(gòu),其指令集代碼的格式如:3.1ARM9指令集
32位的ARM指令集由14種基本指令類型組成。指令操作碼中的Cond子域是條件域,它表明ARM指令集中的所有指令是有條件執(zhí)行的。指令執(zhí)行的條件是根據(jù)CPSR寄存器中的狀態(tài)標(biāo)志位和指令的條件域確定,見下表:寄存器裝載及存儲(chǔ)類指令這類指令是最常用的指令之一。它們把數(shù)據(jù)從存儲(chǔ)器單元中裝載(讀入)到微處理器核的寄存器(即R0~R15)中,或者把微處理器核的寄存器中的數(shù)據(jù)存儲(chǔ)(寫入)到存儲(chǔ)器單元中。(1)單一數(shù)據(jù)加載/存儲(chǔ)指令:LDR/STR
指令書寫格式:(1)LDR/STR{條件碼}{B}Rd,[Rn]
(2)LDR/STR{條件碼}{B}Rd,[Rn,F(xiàn)lexoffset]{!}
(3)LDR/STR{條件碼}{B}Rd,label
(4)LDR/STR{條件碼}{B}Rd,[Rn],F(xiàn)lexoffset下面是幾條LDR/STR指令書寫的示例:LDRR2,[R5];無偏移量,R2←[R5]LDREQR5,[R6,#28]?。唬ㄈ粝嗟龋㏑5←[R6+28],R6←R6+28LDRR8,label
;加載一個(gè)字到R8,該字存于label對(duì)應(yīng)單元處STRR1,[R3],#-6??;R1→[R3],R3←R3-6STRBR0,[R3,-R8ASR#2]
;R0的最低字節(jié)→[R3-R8/4]單元的低字節(jié)
(2)多數(shù)據(jù)加載/存儲(chǔ)指令:LDM和STM。指令書寫格式:LDM/STM{條件碼}類型Rn{!},寄存器列表{^}指令中的類型是指存儲(chǔ)器地址變化的方式。也就是說,每加載或者存儲(chǔ)完一個(gè)寄存器后,存儲(chǔ)器的地址需要自動(dòng)變化,如何變化則由指令助記符后面所跟的類型確定。類型可以是下列情況之一:IA每次數(shù)據(jù)傳送后存儲(chǔ)器的地址加1;IB每次數(shù)據(jù)傳送前存儲(chǔ)器的地址加1;DA每次數(shù)據(jù)傳送后存儲(chǔ)器的地址減1;DB每次數(shù)據(jù)傳送前存儲(chǔ)器的地址減1;FD滿遞減堆棧;ED空遞減堆棧;FA滿遞增堆棧;EA空遞增堆棧。例如:STMFDR13!,{R0-R12,R14};寄存器進(jìn)?!璍DMFDR13!,{R0-R12,PC};寄存器出棧,返回利用STM指令把存儲(chǔ)在LR寄存器中的當(dāng)前PC值保存到存儲(chǔ)器中的時(shí)候,同時(shí)還保存了CPSR寄存器的值。在用LDM指令重新裝載PC寄存器的時(shí)候,除非設(shè)計(jì)者在指令中寫上相應(yīng)的符號(hào),否則不會(huì)恢復(fù)CPSR的值。所寫的符號(hào)是在寄存器列表后跟隨一個(gè)“^”符號(hào)。例如:STMFDR13!,{R0-R12,R14};寄存器進(jìn)棧…LDMFDR13!,{R0-R12,PC}^;寄存器出棧,返回,同時(shí)恢復(fù)CPSR(3)單一數(shù)據(jù)交換指令:SWP。該指令完成在寄存器和存儲(chǔ)器之間進(jìn)行數(shù)據(jù)交換的功能,其句法如下:
SWP{條件碼}{B}Rd,Rm,[Rn]若指令助記符中加上可選后綴B,則交換的是字節(jié)數(shù)據(jù),否則交換的是字?jǐn)?shù)據(jù)。該指令的具體作用是數(shù)據(jù)從存儲(chǔ)單元加裁到Rd寄存器中,Rm寄存器的內(nèi)容存儲(chǔ)到存儲(chǔ)單元中,該存儲(chǔ)單元的地址是Rn寄存器的值。影響狀態(tài)標(biāo)志位類指令CPSR寄存器是ARM9微處理器核中保存狀態(tài)標(biāo)志位的寄存器,其中N、V、C、Z標(biāo)志是由指令執(zhí)行結(jié)果確定的。能影響這些標(biāo)志生成的指令或讀/寫CPSR寄存器的指令如下:(1)ADC,ADD,SBC,SUB,RSC和RSB指令;(2)AND,ORR,EOR和BIC指令;(3)MOV和MVN指令;注:MOV和MVN是寄存器與寄存器間的傳送指令。若R15是目的寄存器,則會(huì)修改程序計(jì)數(shù)器PC的值或標(biāo)志。這一點(diǎn)可被用于子程序返回,方法是把鏈接寄存器R14的內(nèi)容傳送到R15中。(4)MUL和MLA指令;(5)MRS和MSR指令。注:MRS:只能完成CPSR寄存器和SPSR寄存器的讀操作;
MSR:只能完成CPSR寄存器和SPSR寄存器的寫操作。比較類指令
(1)CMP和CMN指令
CMP{條件碼}Op1,Op2
該條指令的功能如下:狀態(tài)位=Op1-Op2的結(jié)果。
CMN:與取負(fù)的數(shù)比較指令CMN{條件碼}Op1,Op2
該條指令的功能如下:狀態(tài)位=Op1-(-Op2)的結(jié)果。(2)TST和TEQ指令
TST{條件碼}Op1,Op2
該條指令的功能如下:狀態(tài)位=Op1ANDOp2的結(jié)果。
TEQ{條件碼}Op1,Op2
該條指令的功能如下:狀態(tài)位=Op1EOROp2的結(jié)果。分枝類指令
(1)B和BLB:分枝指令,其句法是:B{條件碼}destaddB指令是最簡單的分枝指令。ARM9微處理器一旦遇到一個(gè)B指令,將立即跳轉(zhuǎn)到指令中給定的目的地址處,從那里繼續(xù)執(zhí)行。BL:帶鏈接的分枝指令,其句法是:BL{條件碼}destaddBL指令是一個(gè)需要返回的分枝指令。該分枝指令在分枝之前,R14寄存器(即LR寄存器)中會(huì)裝載上R15寄存器(即PC寄存器)的內(nèi)容。若要從分枝處返回發(fā)生轉(zhuǎn)移的地方,可以通過重新把R14寄存器的內(nèi)容裝載到R15寄存器中來實(shí)現(xiàn),ARM微處理器返回到這個(gè)分枝指令之后的第一條指令處繼續(xù)執(zhí)行。軟件中斷指令
SWI:軟件中斷指令,SWI是SoftwareInterrupt的縮寫。其句法是:
SWI{條件碼}destcoad
上述句法中destcoad是一個(gè)24位的編號(hào),即軟件中斷號(hào)。SWI指令會(huì)引起SWI異常,使得微處理器的工作模式變換為管理模式,CPSR將被保存到管理模式的SPSR中,指令執(zhí)行流水被阻塞,并轉(zhuǎn)移到SWI異常向量處。該指令不影響條件碼標(biāo)志。SWI指令主要是為操作系統(tǒng)提供的。匯編器偽指令
偽指令不是目標(biāo)系統(tǒng)能夠執(zhí)行的指令,而是匯編器采用的,用來指示如何進(jìn)行匯編的符號(hào),這種符號(hào)在匯編時(shí),匯編器會(huì)把它匯編成一條或幾條正真的匯編指令。幾種主要的偽指令:(1)ADR
將程序相對(duì)偏移或寄存器相對(duì)偏移地址加載到寄存器中
(2)ADRL
該偽指令是加載長地址,功能類似如ADR偽指令
(3)LDR
該偽指令作用是把一個(gè)32位常量或常量表達(dá)式加載到寄存器中。
3.3匯編程序設(shè)計(jì)嵌入式系統(tǒng)發(fā)展到今天,程序的運(yùn)行效率及存儲(chǔ)容量已不是嵌入式系統(tǒng)設(shè)計(jì)時(shí)所需考慮的主要問題。若只是關(guān)心嵌入式系統(tǒng)所具有的應(yīng)用功能,那么,在設(shè)計(jì)中,采用高級(jí)編程語言(例如C語言等)編寫程序更合適,它隱藏了微處理器執(zhí)行指令的許多細(xì)節(jié),設(shè)計(jì)時(shí)相對(duì)方便。但是,如果嵌入式系統(tǒng)設(shè)計(jì)者希望對(duì)嵌入式系統(tǒng)有更深層次的了解,希望能完成系統(tǒng)啟動(dòng)程序的編寫、操作系統(tǒng)移植等任務(wù),那么,掌握匯編語言程序設(shè)計(jì)是非常必要的。匯編編程規(guī)則利用ARM9匯編指令進(jìn)行程序設(shè)計(jì)時(shí),程序中的每一語句行的格式為:
{標(biāo)號(hào)}{指令“或”指示符“或”偽指令}{;注解}。指示符是匯編器定義的,也是用來指示匯編器如何進(jìn)行匯編的符號(hào),這些符號(hào)僅指示匯編器如何進(jìn)行匯編和連接,不會(huì)被匯編成一條正真的匯編指令。幾個(gè)主要指示符:(1)AREA指示匯編器匯編一段新的代碼段或數(shù)據(jù)段的指示符;(2)ENTRY指示匯編器把其后的首條指令作為程序入口的指示符,一個(gè)源文件中只能有一個(gè)ENTRY指示符;(3)END表示源程序結(jié)束的指示符;(4)IMPORT告訴匯編器某個(gè)變量名或標(biāo)號(hào)在當(dāng)前程序段中未曾定義的指示符,這個(gè)變量名或標(biāo)號(hào)由連接器進(jìn)行定位;(5)EXPORT指示由連接器在目標(biāo)和庫文件中使用的符號(hào)的指示符;(6)CODE32指示匯編器將隨后的指令作為32位ARM指令進(jìn)行匯編的指示符;(7)CODE16指示匯編器將隨后的指令作為16位Thumb指令進(jìn)行匯編的指示符;(8)GET指示包含一個(gè)文件的指示符,匯編器在GET處匯編包含的文件;(9)DATA指示一個(gè)標(biāo)號(hào)是代碼段中數(shù)據(jù)區(qū)域的標(biāo)號(hào),該符號(hào)后是通常是偽指令DCB或DCD。匯編指令的特點(diǎn)ARM9的匯編指令相對(duì)于其他微處理器的匯編指令來說,具有許多特點(diǎn):(1)指令的條件執(zhí)行:32位ARM指令集中的所有指令都是條件執(zhí)行的指令。需要條件執(zhí)行的指令只需要使用條件后綴,就可以實(shí)現(xiàn)條件執(zhí)行。例1:
CMPR0,R1;比較R0和R1的值,結(jié)果用于更新標(biāo)志
ADDEQSR0,R1,R2;如標(biāo)志Z=1,則加法指令執(zhí)行,并更新標(biāo)志(2)多種形式的傳送類指令(3)多寄存器加載/存儲(chǔ)指令(4)映射存儲(chǔ)的指示符:ARM匯編器可以使用MAP和“#”指示符,來描述一個(gè)結(jié)構(gòu)體,指示符MAP和“#”主要用于完成結(jié)構(gòu)體的定義,并不一定具體確定其內(nèi)存空間地址。指示符MAP說明結(jié)構(gòu)體的基地址,指示符“#”定義數(shù)據(jù)項(xiàng)的標(biāo)號(hào)并說明所需空間。例如:
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)程序中的宏定義:在匯編程序設(shè)計(jì)時(shí),宏定義的使用是為了提高程序的可讀性、以及可維護(hù)性。ARM匯編器提供的宏類似于標(biāo)準(zhǔn)C語言中的#define,其功能是在程序源代碼中進(jìn)行字符替代。ARM匯編器把指示符MACRO作為宏定義的開始,指示符MEND作為宏定義的結(jié)束,并且可以帶有參數(shù)。例如:
MACRO$aaexample$bb,$cc,$dd$aaCMP$cc,#0B$dd$bbMEND匯編程序?qū)嵗?-系統(tǒng)引導(dǎo)程序
系統(tǒng)引導(dǎo)程序(Bootloader)是目標(biāo)系統(tǒng)硬件上電或復(fù)位后執(zhí)行的第一段程序代碼,它通常被安排在系統(tǒng)復(fù)位異常向量地址處。系統(tǒng)引導(dǎo)程序是依賴于具體硬件環(huán)境的,除了依賴于微處理器的體系結(jié)構(gòu)外,還依賴于具體的板級(jí)硬件配置。通常系統(tǒng)引導(dǎo)程序需完成以下功能:設(shè)置異常向量表(即在異常向量地址處設(shè)置相關(guān)分枝指令)關(guān)看門狗定時(shí)器,關(guān)中斷。有時(shí)需要設(shè)置系統(tǒng)微處理器的速度和時(shí)鐘頻率。設(shè)置好堆棧指針。系統(tǒng)堆棧初始化取決于用戶使用哪些異常,以及系統(tǒng)需要處理哪些錯(cuò)誤類型。一般情況下,管理模式堆棧必須設(shè)置;若使用了IRQ中斷,則IRQ中斷堆棧必須設(shè)置。如果系統(tǒng)應(yīng)用程序是運(yùn)行在用戶模式下,可在系統(tǒng)引導(dǎo)程序中將微處理器的工作模式改為用戶模式并初始化用戶模式下的堆棧指針。若系統(tǒng)使用了DRAM或其他外設(shè),需要設(shè)置相關(guān)寄存器,以確定其刷新頻率、總線寬度等信息。初始化所需的存儲(chǔ)器空間。跳轉(zhuǎn)到C程序的入口點(diǎn)。一個(gè)啟動(dòng)引導(dǎo)程序示例(文件名:Startup.s);下面指令包含2440addr.s文件,該文件中定義了S3C2440內(nèi)部寄存器地址對(duì)應(yīng)的變量,如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提供匯編器在當(dāng)前匯編中未曾定義的符號(hào)名。
IMPORT__use_no_semihosting_swi IMPORT Enter_UNDEF IMPORT Enter_SWI IMPORT Enter_PABORT IMPORT Enter_DABORT IMPORT Enter_FIQ;下面ENTRY指明了程序的入口,在應(yīng)用程序中有且只有一個(gè)程序入口。
ENTRY;下面是異常向量表,第一條語句是復(fù)位異常對(duì)應(yīng)的跳轉(zhuǎn)指令。
B ColdReset ;復(fù)位
B Enter_UNDEF ;未定義指令錯(cuò)誤
B Enter_SWI ;軟件中斷
B Enter_PABORT ;預(yù)取指令錯(cuò)誤
B Enter_DABORT ;數(shù)據(jù)存取錯(cuò)誤
B . ;一個(gè)保留的中斷向量
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;系統(tǒng)上電或復(fù)位后跳轉(zhuǎn)到此處開始進(jìn)行運(yùn)行。
EXPORTColdResetColdReset;關(guān)看門狗定時(shí)器
LDR R0,=WTCON LDR R1,=0x0 STR R1,[R0];關(guān)所有中斷
LDR R0,=INTMSK LDR R1,=0xffffffff
STR R1,[r0] LDR R0,=INTSUBMSK LDR R1,=0x7ff ;關(guān)所有子中斷源
STR R1,[r0];初始化堆棧,使用了帶鏈接的分枝指令,跳轉(zhuǎn)到堆棧指針設(shè)置子程序中
BL InitStacks;下面調(diào)轉(zhuǎn)到C語言的主函數(shù)處
IMPORT__main BL __main;轉(zhuǎn)移到用戶C語言的主函數(shù),引導(dǎo)應(yīng)用程序
B .;下面是初始化堆棧的子函數(shù) IMPORTUserStack IMPORTSVCStack
IMPORT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 寵物服務(wù)保安工作總結(jié)
- 【正版授權(quán)】 ISO 59040:2025 EN Circular economy - Product circularity data sheet
- 2025-2030全球商業(yè)藥品采購行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國草酸镥水合物行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球農(nóng)機(jī)三角帶行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球工業(yè)級(jí)硅酸鉀行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國航空航天設(shè)備零部件用清洗機(jī)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球直流電流分流器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球帳篷地面釘行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球500+Ah電芯行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030年中國電動(dòng)高爾夫球車市場(chǎng)運(yùn)行狀況及未來發(fā)展趨勢(shì)分析報(bào)告
- 河南省濮陽市2024-2025學(xué)年高一上學(xué)期1月期末考試語文試題(含答案)
- 長沙市2025屆中考生物押題試卷含解析
- 2024年08月北京中信銀行北京分行社會(huì)招考(826)筆試歷年參考題庫附帶答案詳解
- 蘇教版二年級(jí)數(shù)學(xué)下冊(cè)全冊(cè)教學(xué)設(shè)計(jì)
- 職業(yè)技術(shù)學(xué)院教學(xué)質(zhì)量監(jiān)控與評(píng)估處2025年教學(xué)質(zhì)量監(jiān)控督導(dǎo)工作計(jì)劃
- 金字塔原理與結(jié)構(gòu)化思維考核試題及答案
- 2024年湖南高速鐵路職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測(cè)試題庫及答案解析
- 過松源晨炊漆公店(其五)課件
- 最新交管12123學(xué)法減分題庫含答案(通用版)
- 安全事故案例圖片(76張)課件
評(píng)論
0/150
提交評(píng)論