版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課程內(nèi)容,第一章嵌入式系統(tǒng)概述第二章ARM微處理器概述和編程模型第三章ARM9命令系統(tǒng)第四章嵌入式內(nèi)部編程基礎(chǔ)第五章嵌入式內(nèi)部編程模塊第六章嵌入式接口技術(shù)應(yīng)用程序第七章軟件開發(fā)環(huán)境,第四章嵌入式編程基礎(chǔ),基于ARM的編譯器通常支持匯編語言編程、C/C語言編程和兩種混合編程。本章介紹了ARM中內(nèi)置程序的基本知識偽命令匯編語言的語句格式匯編語言C/C語言的混合編程.說明4.1偽指令。ARM匯編語言程序包含命令系統(tǒng)中的助記符和其他特殊命令助記符。沒有相應(yīng)的操作代碼。通常,這些特殊命令助記符稱為偽命令,它們執(zhí)行的任務(wù)如下:在源程序中,偽指令的作用是將普通程序表示為計(jì)算機(jī)外部的指令,并將程序員的意圖傳達(dá)
2、給編譯器。例如,要通知編譯器程序段的開始和結(jié)束,必須定義數(shù)據(jù)等。ARM的裝配程序?qū)蚊罘譃槿糠?,介紹與ARM命令相關(guān)的偽命令和與Thumb命令相關(guān)的偽命令。4.1偽命令、4.1.1常規(guī)偽命令、常規(guī)偽命令包括:符號定義偽命令數(shù)據(jù)定義偽命令組件控制偽命令和其他常規(guī)偽命令。4.1.1一般偽命令,1 .符號定義偽命令符號定義偽命令用于在ARM匯編器中聲明變量、為變量賦值以及定義寄存器的名稱。典型的符號定義偽指令具有以下語法格式:(1)GBLA、GBLL和GBLS。GBLA(GBLL或GBLS)全局變量名GBLA、GBLL和GBLS偽指令是用于在ARM程序中定義和初始化全局變量的全局變量的偽指令。4
3、.1.1 GBLA是用于聲明全局?jǐn)?shù)字變量和初始化0的通用偽指令。GBLL偽指令用于聲明全局邏輯變量并將其初始化為F(假)。GBLS偽指令用于聲明全局字符串變量并將其初始化為null。對于全域變數(shù),變數(shù)名稱在來源程式中必須是唯一的。1 .符號定義偽命令符號定義偽命令用于在ARM匯編器中聲明變量,為變量賦值,以及定義寄存器的名稱。典型的符號定義偽命令包括(1)GBLA、GBLL和GBLS、4.1.1常規(guī)偽命令,命令示例:GBLAdate1。聲明全局?jǐn)?shù)字變量date1gbl ldate1。聲明全局邏輯變量date2gbl sdata3。聲明全局字符串變量date3date3sets testing
4、。將此變量指定為“測試”、4 . 1 . 1 . 1通用偽指令、(2)LCLA、LCLL和LCLS語法格式:LCLA(LCLL或LCLS)本地變量名稱LCLA、LCLL和LCLS偽指令,其中LCLA聲明本地?cái)?shù)字變量并將其初始化為0LCLL用于聲明本地邏輯變量并將其初始化為f (false)。LCLS用于聲明本地字符串變量并將其初始化為null。對于局部變量,變量名在使用的范圍內(nèi)必須唯一,其范圍僅限于定義該變量的宏程序段。4.1.1通用偽命令,命令示例:LCL adate 4;聲明本地?cái)?shù)字變量date4lclldate5。聲明本地邏輯變量date5data4setl0x10。將0x10lclsd
5、ata6分配給變量DATE4。本地字符串變量DATA6,4 . 1 . 1 . 1常規(guī)偽命令聲明,(3)SETA、SETL和SETS語法格式:變量名SETA(SETL或SETS)表達(dá)式SETA、SETL、SETS是變量賦值偽指令其中SETA用于為數(shù)學(xué)變量賦值。SETL用于向邏輯變量賦值。SETS用于為字符串變量賦值。4.1.1通用偽命令,命令示例:GBlaexamp1首先聲明全局?jǐn)?shù)字變量examp1 examp1 seta0xaa。將0xaa lcll examp2分配給變量EXAMP1。聲明本地邏輯變量examp2examp1 setltrue。將truegbla examp3值指定給EXA
6、MP1變數(shù)。首先聲明全局字符串變量examp3examp3sets string 。變量EXAMP3中的string、4.1.1通用偽指令指定、(4)RLIST語法格式:名稱RLIST寄存器列表RLIST偽指令是定義通用寄存器列表偽指令。通用寄存器列表定義主要應(yīng)用于堆棧操作或多寄存器傳輸。也就是說,使用此偽指令定義的名稱可以在ARM命令LDM中,在LDM/STM命令中,列表中寄存器的訪問順序是從低到高,具體取決于列表中寄存器的排序順序。4.1.1通用偽命令,命令示例:RegListRLISTR0-R5,r8;在RegList定義程序中使用注冊表列表:STMFD SP!reglist堆棧ldmi
7、a r5、將存儲列表加載到reglist、4.1.1通用偽指令、2 .數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令通常用于為特定數(shù)據(jù)分配存儲設(shè)備,完成分配的存儲設(shè)備的初始化。典型的數(shù)據(jù)定義偽指令如下:(1)DCB語法格式:標(biāo)簽DCB表達(dá)式DCB偽指令是字節(jié)分配的內(nèi)存單元偽指令,它分配連續(xù)字節(jié)存儲設(shè)備并將其初始化為偽指令中指定的數(shù)字或字符。其中數(shù)字范圍為0255,DCB也可以替換為=。4.1.1一般醫(yī)生指導(dǎo),指導(dǎo)示例:String DCB“This is a test!”。分配和初始化連續(xù)字節(jié)存儲設(shè)備。Data 2 dcb 15,25,62,00;數(shù)字常量15,25,62,00片內(nèi)存單位,4.1.1通用偽命令,
8、(2)DCW(或DCWU)語法格式:標(biāo)簽DCW(或DCWU)表達(dá)式DCW(或DCWU)偽命令DCW用于將半自動對齊內(nèi)存設(shè)備分配給半自動并初始化指定數(shù)據(jù)偽命令DCWU用于將非半角內(nèi)存設(shè)備分配給半角,并使用指定數(shù)據(jù)初始化。4.1.1通用偽命令,命令示例:data1 dcw 1,2,3;分配連續(xù)的半自動存儲設(shè)備,并將其初始化為1、2、3。Data 2 dcwu 45,0x2a *0x2a:分配和初始化非半自動校準(zhǔn)存儲設(shè)備。4.1.1通用偽指令,(3)DCD(或DCDU)語法格式:標(biāo)簽DCD(或DCDU)表達(dá)式DCD(或DCDU)偽指令是為文字分配內(nèi)存單元偽指令。其中表達(dá)式可以是程序標(biāo)簽或數(shù)字表達(dá)式,
9、DCD可以是“r0 ADR R1,loop0x 40 * 2;插入回路0x40 * 2。絕對地址是與R1 ALIGN LOOP ADD R2、R0、R1、4.1.3 Thumb指令相關(guān)的偽指令,2 .LDR偽指令語法格式:LDRcondRd,=數(shù)字表達(dá)式;加載數(shù)字常量ldrcondrd,=語句標(biāo)簽數(shù)字表達(dá)式;地址加載LDR偽指令是將數(shù)字常數(shù)或地址作為低端寄存器偽指令加載。加載32位數(shù)字常量時(shí),編譯器可以使用MOV命令編譯該語句,如果不能用MOV指令表示,則可以使用LDR指令編譯該語句。加載地址后,編譯器將此語句編譯為LDR指令。與4.1.3 Thumb指令相關(guān)的偽指令在使用LDR指令而不是偽指
10、令時(shí),編譯器首先將數(shù)據(jù)(或地址)存儲在數(shù)據(jù)緩沖區(qū)中,然后在執(zhí)行LDR指令時(shí)從緩沖區(qū)中讀取該數(shù)據(jù),并將其加載到寄存器中。因此,使用此偽指令時(shí),必須為程序創(chuàng)建數(shù)據(jù)緩沖區(qū)。指令示例:ldrr1,=0xffe將0 xFFE加載到R1。組裝器組裝為movr1,#0xffe ldrr1,=start。將START的地址加載到R1,與4.1.3 Thumb指令相關(guān)的偽指令,3 .NOP語法格式:NOP NOP偽指令在裝配時(shí)編譯為錯誤的指令(如MOV R0,R0),占用32位代碼空間。、4.2匯編語言的語句格式、匯編語言的源程序主要為:命令偽命令語句標(biāo)簽注釋、4.2.1編寫格式、ARM(Thumb)匯編語言的
11、語句格式:語句標(biāo)簽命令或偽命令注釋1。門標(biāo)簽語句標(biāo)簽可以混合使用大小寫,并且可以使用數(shù)字和下劃線。語句標(biāo)簽不能與命令助記符、寄存器、變量名具有相同的名稱。2.命令和偽命令助記符和偽命令助記符可以是大寫或小寫,但不能混合使用大小寫。命令助記符和下一個(gè)操作數(shù)寄存器之間必須有空格,不能在其間使用逗號。3.注釋匯編程序在編譯時(shí)遇到分號,會將以下內(nèi)容解釋為注釋,并且不會編譯:4.2.1寫格式,如area example 1、code、readonlyEXAMPLE1程序片段、只讀屬性、4.2.2程序集語言中的表達(dá)式和運(yùn)算符、程序集語言編程中經(jīng)常使用地址、變量和常量等各種符號,從而提高程序的可讀性。1.變
12、量ARM(Thumb)匯編程序支持的變量格式可以在編譯過程中更改三個(gè)3360數(shù)字變量邏輯變量字符串變量。4.2.2程序集語言中的表達(dá)式和運(yùn)算符,(1)數(shù)字變量用于在程序運(yùn)行時(shí)存儲數(shù)值,數(shù)字變量的范圍不能超過32位數(shù)字的表示范圍。全局?jǐn)?shù)值變量使用偽命令GBLA定義。局部數(shù)值變量使用偽命令LCLA定義。數(shù)值變量使用偽命令SETA賦值。4.2.2程序集語言中的表達(dá)式和運(yùn)算符,(2)邏輯變量用于在程序運(yùn)行時(shí)存儲邏輯值,邏輯值只有兩種值方案:真或假。全局邏輯變量使用偽命令GBLL定義。本地邏輯變量使用偽命令LCLL定義。邏輯變量使用偽命令SETA賦值。4.2.2程序集語言中的表達(dá)式和運(yùn)算符,(3)將字符
13、串存儲在程序執(zhí)行中的字符串變量。全局字符串變量使用偽命令GBLS定義。本地字符串變量使用偽命令LCLS定義。字符串變量使用偽命令SETS指定值。字符串變量必須用雙引號括起來。4.2.2程序集語言中的表達(dá)式和運(yùn)算符,(4)替換變量程序中的變量可通過替換操作獲得常量。替代運(yùn)算符為“$”。如果數(shù)字變量前面有替代運(yùn)算符“$”,編譯器會將數(shù)字變量的值轉(zhuǎn)換為十六進(jìn)制字符串,并將十六進(jìn)制字符串替換為“$”后面的數(shù)字變量。如果邏輯變量前面有替代運(yùn)算符“$”,編譯器將使用其值(真或假)替換邏輯變量。如果字符串變量前面有替代運(yùn)算符“$”,編譯器會將該字符串變量的值替換為“$”后面的字符串變量。4.2.2程序集語言
14、中的表達(dá)式和運(yùn)算符,命令示例:lclsstring1本地字符串變量String1和string 2 lcls string 2 string 1 sets“pen!”定義String 2sets this is a $ string 1字符串變量S2的值為 This is a Test!。4.2.2程序集語言中的表達(dá)式和運(yùn)算符,2 .數(shù)值表達(dá)式和運(yùn)算符數(shù)值表達(dá)式包含數(shù)字、數(shù)字常量、數(shù)字變量、數(shù)字運(yùn)算符和括號。表達(dá)式的結(jié)果不能超過32位表達(dá)式的范圍。(1)數(shù)字格式可以在表示中直接表示,例如:十進(jìn)制十六進(jìn)制n進(jìn)制ASCII、4.2.2程序集語言中的表達(dá)式和運(yùn)算符,以及1234、56789(表示十進(jìn)
15、制)。如果是十六進(jìn)制的話,有兩種表達(dá)方法。一個(gè)是在數(shù)字前面加“0 x”,另一個(gè)是在數(shù)字前面加“instruction匯編語言程序段和注釋instruction”。如果每行有多個(gè)裝配命令,請?jiān)诿钪g輸入分號;使用“分離;如果一個(gè)指令占用多行,請使用“連續(xù)符號”指示以下內(nèi)容:您可以在組件指令區(qū)段中使用C語言的注釋語句。您也可以在ARM C/C程式中使用關(guān)鍵字ASM,以包含下列格式的組件程式:ASM(“instruction”);instruction);其中ASM后面的括號必須是組件語句,不能包含注釋語句。,4.4.2 C/C和程序集語言的混合編程應(yīng)用程序,此處主要介紹C/C和程序集混合編程(包
16、括相互之間的函數(shù)調(diào)用)。下面分五種情況討論。包含在1 C語言中的組件C中的組件命令包含大多數(shù)ARM和Thumb命令,但是與組件文件中的命令不同,存在一些限制。(1)不能直接為PC寄存器指定值,必須使用B或BL命令進(jìn)行程序跳轉(zhuǎn)。(2)使用物理寄存器時(shí),不要使用太復(fù)雜的C表達(dá)式,避免物理寄存器沖突。(3)R12和R13可用于編譯器保存中間編譯結(jié)果,在計(jì)算表達(dá)式值時(shí),可以在子程序調(diào)用中使用R0R3、R12和R14,因此應(yīng)避免直接使用這些物理寄存器。4.4.2 C/C和匯編語言的混合編程應(yīng)用程序,(4)通常不要直接指定物理寄存器,而是讓編譯器分配。下面是如何在c中包含程序集語言的示例:# include void my _ str cpy(constchar * src,char *dest) /函數(shù)char ch聲明/字符變量聲明_asm /調(diào)用關(guān)鍵字_循環(huán)入口LDRB CH,SRC,# 1;Thumb命令,chsrc 1。不匹配。編號src地址的數(shù)量1將發(fā)送到ch STRB CH,dest,# 1。Thumb命令,dest 1 ch,將無符號CH數(shù)據(jù)發(fā)送到DST1存儲CMP CH,# 0。比較CH是否為零或比較循環(huán)。共循環(huán)256次BNE LOOP;B命令跳轉(zhuǎn),NE不等于Z位清零,4.4.2 C/C和匯編語言的混合編程應(yīng)用程序,Intm
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/Z 18620.6-2025檢驗(yàn)實(shí)施規(guī)范第6部分:錐齒輪測量
- 婦科腫瘤精準(zhǔn)診療全程管理模式
- 女性更年期慢病社區(qū)管理評價(jià)
- 大數(shù)據(jù)驅(qū)動的ICU床位動態(tài)分配公平性
- 多藥聯(lián)合試驗(yàn)中的受試者招募精準(zhǔn)策略-1
- 多組學(xué)聯(lián)合研究在精準(zhǔn)醫(yī)學(xué)中的方法學(xué)創(chuàng)新
- 2025年中職中西面點(diǎn)(糕點(diǎn)裝飾工藝)試題及答案
- 2025年高職應(yīng)用化工技術(shù)(化工產(chǎn)品制備)試題及答案
- 2025年中職城市軌道交通運(yùn)營服務(wù)(車站調(diào)度)試題及答案
- 2026年黑玉米炒貨機(jī)維修(加工機(jī)故障排除)試題及答案
- 電力線通信技術(shù)
- 人工流產(chǎn)手術(shù)知情同意書
- 教師三筆字培訓(xùn)課件
- 中國醫(yī)藥行業(yè)中間體出口全景分析:破解政策難題深挖全球紅利
- 河南省百師聯(lián)盟2025-2026學(xué)年高一上12月聯(lián)考英語試卷(含解析含聽力原文及音頻)
- 污水管道更換工程施工方案
- 租戶加裝充電樁免責(zé)補(bǔ)充合同(房東版)
- 甘肅省天水市2024-2025學(xué)年九年級上學(xué)期期末考試物理試題(含答案)
- 2025年佛山市均安鎮(zhèn)專職消防隊(duì)招聘消防員5人備考題庫及1套參考答案詳解
- 2026年海南衛(wèi)生健康職業(yè)學(xué)院單招職業(yè)技能考試題庫參考答案詳解
- 法制副校長課件
評論
0/150
提交評論