




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第4章 ARM系統(tǒng)硬件設(shè)計基礎(chǔ)精選課件1、匯編語言程序常用的符號(1)常量常量是指其值在程序運行過程中不能被改變的量。 ARM匯編程序支持的常量有數(shù)字常量、邏輯常量和字符串常量。 數(shù)字常量一般為32位的整數(shù); 邏輯常量只有兩種取值:真或假; 字符串常量為一個固定的字符串。精選課件(2)變量 變量是指其值在程序運行過程中可以改變的量。 在ARM匯編語言程序中,可使用GBLA、GBLL、GBLS偽指令聲明全局變量,使用LCLA、LCLL、LCLS偽指令聲明局部變量,并可使用SETA、SETL和SETS對其進行初始化。 精選課件(3)變量代換 程序中的變量可通過代換操作取得一個常量。代換操作符為“$
2、” 。 數(shù)字變量前面有一個代換操作符“$” ,編譯器會將該數(shù)字變量的值轉(zhuǎn)換為十六進制的字符串,并將該十六進制的字符串代換“$”后的數(shù)字變量。 邏輯變量前面有一個代換操作符“$” ,編譯器會將該邏輯變量代換為它的取值(真或假)。 字符串變量前面有一個代換操作符“$” ,編譯器會將該字符串變量的值代換“$”后的字符串變量。精選課件(3)變量代換LCLSS1;定義局部字符串變量S1和S2LCLSS2S1SETS “Test!”S2SETS “This is a $S1”;字符串變量S2的值為“This is a Test!”精選課件4.2.1 ARM匯編器支持的偽指令 偽操作不像機器指令一樣在CPU
3、運行時執(zhí)行,而是在匯編程序期間進行處理的。1、符號定義(Symbol Definition)偽操作2、數(shù)據(jù)定義(Data Definition)偽操作3、匯編控制(Assembly Control)偽操作4、其他常用的偽操作精選課件1、符號定義偽操作 符號定義偽指令用于定義ARM匯編程序中的變量、對變量賦值以及定義寄存器的別名等操作。 常見的符號定義偽指令有如下幾種:(1)定義全局變量 GBLA、GBLL和GBLS(2)定義局部變量 LCLA、LCLL和LCLS(3)對變量賦值 SETA、SETL、SETS精選課件(1)GBLA、GBLL和GBLS語法 GBLA(GBLL或GBLS) 全局變量
4、名GBLA (Global Arithmetic) 定義一個全局的數(shù)字變量,并初始化為0 GBLL (Global Logic) 定義一個全局的邏輯變量,并初始化為F(假)GBLS (Global String) 定義一個全局的字符串變量,并初始化為空 精選課件(1)GBLA、GBLL和GBLSGBLATest1Test1SETA0 xaaGBLLTest2Test2SETLTRUEGBLSTest3Test3SETS“Testing”精選課件(2)LCLA、LCLL和LCLS語法格式 LCLA(LCLL或LCLS) 局部變量名LCLA偽指令用于定義一個局部的數(shù)字變量,并初始化為0 LCLL偽
5、指令用于定義一個局部的邏輯變量,并初始化為F(假)LCLS偽指令用于定義一個局部的字符串變量,并初始化為空 精選課件(2)LCLA、LCLL和LCLSLCLATest4Test1SETA0 xaaLCLLTest5Test2SETLTRUELCLSTest6Test3SETS“Testing”精選課件(3)SETA、SETL和SETS語法 變量名 SETA(SETL或SETS) 表達式 SETA偽指令用于給一個數(shù)字變量賦值SETL偽指令用于給一個邏輯變量賦值SETS偽指令用于給一個字符串變量賦值 精選課件(4) RLIST (Register List)語法 名稱 RLIST 寄存器列表作用
6、對一個通用寄存器列表定義名稱,使用該偽指令定義的名稱可在ARM指令LDM/STM中使用實例 RegListRLIST R0-R5,R8,R10 精選課件2、數(shù)據(jù)定義偽操作 數(shù)據(jù)定義偽操作一般用于為特定的數(shù)據(jù)分配存儲單元,同時可完成已分配存儲單元的初始化。 精選課件(1) DCB (Distribute Continuous Byte)語法 標號 DCB 表達式 作用 分配一片連續(xù)的字節(jié)存儲單元并用偽指令中指定的表達式初始化。其中,表達式可以為0255的數(shù)字或字符串。DCB也可用“=”代替。 實例 Str DCB“This is a test!”精選課件(2) DCW語法 標號 DCW 表達式
7、作用 分配一片連續(xù)的半字存儲單元并用偽指令中指定的表達式初始化。其中,表達式可以為程序標號或數(shù)字表達式。 實例 DataTest DCW1, 2, 3精選課件(3) DCD語法 標號 DCD 表達式 作用 分配一片連續(xù)的字存儲單元并用偽指令中指定的表達式初始化。其中,表達式可以為程序標號或數(shù)字表達式。DCD也可用“&”代替。實例 DataTest DCD 4, 5, 6精選課件(4) DCFD語法 標號 DCFD 表達式 作用 為雙精度的浮點數(shù)分配一片連續(xù)的字存儲單元并用偽指令中指定的表達式初始化。每個雙精度的浮點數(shù)占據(jù)兩個字單元。實例 FDataTest DCFD 2E115, -5E7 精
8、選課件(5) DCFS語法 標號 DCFS 表達式 作用 為單精度的浮點數(shù)分配一片連續(xù)的字存儲單元并用偽指令中指定的表達式初始化。每個單精度的浮點數(shù)占據(jù)一個字單元 。 實例 FDataTest DCFS 2E5, -5E-7 精選課件(6) DCQ語法 標號 DCQ 表達式 作用 分配一片以8個字節(jié)為單位的連續(xù)存儲區(qū)域并用偽指令中指定的表達式初始化。實例 DataTest DCQ 100精選課件(7) SPACE語法 標號 SPACE 表達式 作用 分配一片連續(xù)的存儲區(qū)域并初始化為0。其中,表達式為要分配的字節(jié)數(shù)。SPACE也可用“”代替。 實例 DataTest SPACE 100精選課件(
9、8) MAP語法 MAP 表達式,基址寄存器 作用 定義一個結(jié)構(gòu)化的內(nèi)存表的首地址。MAP也可用“”代替。表達式可以為標號或數(shù)學(xué)表達式,當基址寄存器選項不存在時,表達式的值即為內(nèi)存表的首地址;當該選項存在時,內(nèi)存表的首地址為表達式的值與基址寄存器的和。實例 MAP 0 x100, R0 精選課件(9) FIELD語法 標號 FIELD 表達式 作用 定義一個結(jié)構(gòu)化內(nèi)存表中的數(shù)據(jù)域。FILED也可用“#”代替。表達式的值為當前數(shù)據(jù)域在內(nèi)存表中所占的字節(jié)數(shù)。實例 MAP 0 x100 A FIELD 16B FIELD 32S FIELD 256精選課件4、其他常用的偽指令A(yù)REAALIGNENT
10、RYENDEQUEXPORT(或GLOBAL)IMPORTEXTERNGET(或INCLUDE)INCBIN精選課件(1) AREA語法 AREA段名屬性1, 屬性2, 作用 用于定義一個代碼段或數(shù)據(jù)段。 段名若以數(shù)字開頭,則該段名需用“|”括起來,如|1_test| 。 屬性字段表示該代碼段(或數(shù)據(jù)段)的相關(guān)屬性,多個屬性用逗號分隔。精選課件(1) AREA常用的屬性如下:CODE 定義代碼段DATA 定義數(shù)據(jù)段READONLY 指定本段為只讀,代碼段默認為READONLY READWRITE 指定本段為可讀可寫,數(shù)據(jù)段的默認為READWRITE精選課件(1) AREACOMMON 定義一個
11、通用的段,不包含任何的用戶代碼和數(shù)據(jù)。各源文件中同名的COMMON段共享同一段存儲單元。實例AREAInit,CODE,READONLY 精選課件(2) ALIGN語法 ALIGN表達式,偏移量 作用 通過添加填充字節(jié)的方式,使當前位置滿足一定的對齊方式。其中,表達式的值用于指定對齊方式,可能的取值為2的冪,如1、2、4、8、16等。若未指定表達式,則將當前位置對齊到下一個字的位置。偏移量也為一個數(shù)字表達式,若使用該字段,則當前位置的對齊方式為:2的表達式次冪+偏移量。 實例 AREA Init,CODE,READONLY,ALIGN3 精選課件(3) ENTRY語法 ENTRY 作用 指定匯
12、編程序的入口點實例 AREAInit,CODE,READONLY ENTRY 精選課件(4) END語法 END 作用 通知編譯器已經(jīng)到了源程序的結(jié)尾實例 AREAInit,CODE,READONLY END 精選課件(5) EQU語法 名稱 EQU 表達式, 類型 作用 為程序中的常量、標號等定義一個等效的字符名稱。其中EQU可用“*”代替。名稱為EQU偽指令定義的字符名稱。 實例 Test EQU 50精選課件(6) EXPORT(或GLOBAL)語法 EXPORT 標號 作用 聲明一個全局的標號,該標號可在其他的文件中引用。標號在程序中區(qū)分大小寫。實例 AREAInit,CODE,REA
13、DONLY EXPORTStest精選課件(7) IMPORT語法 IMPORT 標號 作用 通知編譯器要使用的標號在其他的源文件中定義,但要在當前源文件中引用。而且無論當前源文件是否引用該標號,該標號均會被加入到當前源文件的符號表中。 實例 AREAInit,CODE,READONLY IMPORTmain精選課件(8) EXTERN語法 EXTERN 標號作用 通知編譯器要使用的標號在其他的源文件中定義,但要在當前源文件中引用,如果當前源文件實際并未引用該標號,該標號就不會被加入到當前源文件的符號表中。實例 AREAInit,CODE,READONLY EXTERNmain精選課件(9)
14、GET語法 GET 文件名作用 將一個源文件包含到當前的源文件中,并將被包含的源文件在當前位置進行匯編處理??梢允褂肐NCLUDE代替GET。實例 AREAInit,CODE,READONLY GETa1.s GETC:a2.s精選課件(10) INCBIN語法 INCBIN文件名作用 將一個目標文件或數(shù)據(jù)文件包含到當前的源文件中,被包含的文件不作任何變動的存放在當前文件中,編譯器從其后開始繼續(xù)處理。實例 AREAInit,CODE,READONLY INCBINa1.dat INCBIN C:a2.txt精選課件(11) RN語法 名稱 RN 表達式作用 給一個寄存器定義一個別名。其中,名稱
15、為給寄存器定義的別名,表達式為寄存器的編碼。實例 Temp RN R0精選課件(12) ROUT語法 名稱ROUT作用 給一個局部變量定義作用范圍。在程序中未使用該偽指令時,局部變量的作用范圍為所在的AREA,而使用ROUT后,局部變量的作為范圍為當前ROUT和下一個ROUT之間。精選課件4.2.2 基于ARM的匯編語言程序設(shè)計 ARM匯編語言的語句格式為: 標號指令或偽指令 ;注釋 每條指令的助記符可以全部用大寫、或全部用小寫,但不允許在一條指令中大、小寫混用。 如果一條語句太長,可分為若干行,在行尾用續(xù)行符“” 。精選課件匯編語言的語句格式1、標號是代表地址的符號,必須在一行的頂格書寫,其
16、后不能添加冒號“:”。2、程序中所有指令均不能頂格書寫。3、在ARM匯編語言中,ARM指令、偽指令、寄存器名等可以全部大寫或者全部小寫,但不能大小寫混合使用。精選課件4.2.3 ARM匯編語言程序的基本結(jié)構(gòu) 在ARM匯編程序中,以程序段為單位組織代碼。段是相對獨立的指令或數(shù)據(jù)序列,具有特定的名稱。 段可以分為代碼段和數(shù)據(jù)段,代碼段的內(nèi)容為執(zhí)行代碼,數(shù)據(jù)段存放代碼運行時需要用到的數(shù)據(jù)。 一個匯編程序至少應(yīng)該有一個代碼段,當程序較長時,可以分割為多個代碼段和數(shù)據(jù)段,多個段在程序編譯鏈接時最終形成一個可執(zhí)行的映象文件。 精選課件AREAInit,CODE,READONLYENTRYStartLDRR
17、0,= 0 x3FF5000LDRR1,= 0 xFFSTRR1,R0LDRR0,= 0 x3FF5008LDRR1,= 0 x01STRR1,R0.END精選課件 在匯編語言程序中,用AREA偽指令定義一個段,并說明所定義段的相關(guān)屬性,本例定義一個名為Init的代碼段,屬性為只讀。 ENTRY偽指令標識程序的入口點,接下來為指令序列。 程序的末尾為END偽指令,該偽指令告訴編譯器源文件的結(jié)束,每一個匯編程序段都必須有一條END偽指令,指示代碼段的結(jié)束。精選課件匯編語言的子程序調(diào)用 在ARM匯編語言程序中,子程序的調(diào)用一般是通過BL指令來實現(xiàn)的。 BL 子程序名精選課件匯編語言的子程序調(diào)用 該
18、指令在執(zhí)行時完成如下操作:將子程序的返回地址存放在連接寄存器LR中,同時將程序計數(shù)器PC指向子程序的入口點。 當子程序執(zhí)行完畢需要返回調(diào)用處時,只需要將存放在LR中的返回地址重新拷貝給程序計數(shù)器PC即可。 在調(diào)用子程序的同時,也可以完成參數(shù)的傳遞和從子程序返回運算的結(jié)果,通常可以使用寄存器R0R3完成。精選課件AREAInit,CODE,READONLYENTRYStartLDRR0,= 0 x3FF5000LDRR1,= 0 xFFSTRR1,R0LDRR0,= 0 x3FF5008LDRR1,= 0 x01STRR1,R0BLPRINT_TEXT.精選課件PRINT_TEXT . MOVP
19、C,LR . END精選課件一個數(shù)據(jù)段的例子AREA DataArea, DATA, NOINIT, ALIGN=2 DISPBUFSPACE200 RCVBUFSPACE200 其中DATA為數(shù)據(jù)段的標識。 精選課件4.2.4 基于ARM的匯編語言程序舉例以下是一個基于S3C2410的LED點燈程序。;LED點燈實驗; 端口F寄存器預(yù)定義rGPFCON EQU 0 x56000050 rGPFDAT EQU 0 x56000054rGPFUP EQU 0 x56000058精選課件AREAInit,CODE,READONLYENTRYResetEntry ldr r0, = rGPFCON
20、ldr r1, = 0 x4000 ; 設(shè)置I/O口GPF7為輸出屬性str r1, r0 ldr r0, = rGPFUPldr r1, = 0 xff ; 禁止GPF端口的上拉電阻str r1, r0ldr r2, = rGPFDAT精選課件ledloop ldr r1, = 0 x80 str r1, r2 ;使GPF7輸出高電平,D14燈亮 bl delay ;調(diào)用延遲子程序 ldr r1, = 0 x00 str r1, r2 ;使GPF7輸出低電平,D14燈滅 bl delay ;調(diào)用延遲 b ledloop ;不斷的循環(huán),D14將不停的閃爍精選課件;下面是延遲子程序delay l
21、dr r3, = 0 x1ffff ;設(shè)置延遲的時間delay1sub r3, r3, #1 ;r3=r3-1 cmp r3, #0 x0 ;將r3的值與0相比較bne delay1 ;比較的結(jié)果不為0,繼續(xù)調(diào) 用delay1,否則執(zhí)行下一條語句mov pc, lr ;返回 END精選課件4.4 基于ARM的C語言與匯編語言混合編程 匯編語言與C/C+的混合編程通常有以下幾種方式: 在C/C+代碼中嵌入?yún)R編指令 在匯編程序和C/C+的程序之間進行變量的互訪 匯編程序、C/C+程序間的相互調(diào)用 在實際的編程應(yīng)用中,使用較多的方式是:程序的初始化部分用匯編語言完成,然后用C/C+完成主要的編程任務(wù)
22、,程序在執(zhí)行時首先完成初始化過程,然后跳轉(zhuǎn)到C/C+程序代碼中。精選課件4.4.1 C語言與匯編語言混合編程應(yīng)遵守的規(guī)則 在C程序和ARM匯編程序之間相互調(diào)用時必須遵守ATPCS規(guī)則。ATPCS規(guī)定了一些子程序間調(diào)用的基本規(guī)則,比如: 寄存器的使用規(guī)則子程序之間通過寄存器r0r3來傳遞參數(shù),當參數(shù)個數(shù)多于4個時,使用堆棧來傳遞參數(shù)。在子程序中,使用寄存器r4r11保存局部變量。寄存器r12用于保存堆棧指針SP,當子程序返回時使用該寄存器出棧,記作IP。寄存器r13用作堆棧指針,記作SP。寄存器r14稱為鏈接寄存器,記作LR。該寄存器用于保存子程序的返回地址。寄存器r15稱為程序計數(shù)器,記作PC。 精選課件4.4.1 C語言與匯編語言混合編程應(yīng)遵守的規(guī)則 在C程序和ARM匯編程序之間相互調(diào)用時必須遵守ATPCS規(guī)則。ATPCS規(guī)定了一些子程序間調(diào)用的基本規(guī)則,比如:堆棧的使用規(guī)則堆棧采用滿遞減類型(FD,F(xiàn)ull Descending),即堆棧通過減小存儲器地址而向下增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項的最低地址。 參數(shù)的傳遞規(guī)則整數(shù)參數(shù)的前4個使用r0r3傳遞,其他參數(shù)使用堆棧傳遞;浮點參數(shù)使用編號最小且能夠滿足需要的一組連續(xù)的FP寄存器傳遞參數(shù)子程序的返回結(jié)果為一個32位整數(shù)時,通過r0返回;返回結(jié)果為一個64位整數(shù)時,通過r
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 甘肅省武威市涼州區(qū)武威第八中學(xué)2024-2025學(xué)年高一下學(xué)期開學(xué)生物學(xué)試題(含答案)
- 古代寓言故事教案狐貍與烏鴉新解
- 雪孩子幼兒教育動畫片觀后感
- 故事性文本的寫作技巧與實踐練習(xí):初中作文指導(dǎo)課程教案
- 互聯(lián)網(wǎng)產(chǎn)品聯(lián)合推廣合作協(xié)議書
- 古詩文朗讀技巧與欣賞
- 小學(xué)生綜合素質(zhì)評價標準征文
- 法律學(xué)科民法學(xué)原理試題及答案庫
- 家用電器選購與使用注意事項指南
- 協(xié)作方案指南
- 2025年危化企業(yè)安全教育培訓(xùn)計劃
- 《HR的成長之路》課件
- 2025年山東浪潮集團有限公司招聘筆試參考題庫含答案解析
- U8UAP開發(fā)手冊資料
- 2018NFPA10便攜式滅火器標準
- 橋梁樁基工程培訓(xùn)課件
- 裝修完成情況報告范文
- 考試五類職業(yè)適應(yīng)性測試試題庫及答案
- 《中國各民族的語言》課件
- 2024年中考數(shù)學(xué)壓軸題預(yù)測《圓的綜合壓軸題》及答案解析
- (大學(xué)生國家安全教育課程)全套10篇教學(xué)課件-國家安全教育
評論
0/150
提交評論