嵌入式系統(tǒng)原理與接口技術(shù)2_第1頁
嵌入式系統(tǒng)原理與接口技術(shù)2_第2頁
嵌入式系統(tǒng)原理與接口技術(shù)2_第3頁
嵌入式系統(tǒng)原理與接口技術(shù)2_第4頁
嵌入式系統(tǒng)原理與接口技術(shù)2_第5頁
已閱讀5頁,還剩230頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1 嵌入式系統(tǒng)原理與接口技術(shù)嵌入式系統(tǒng)原理與接口技術(shù) 山東大學計算機科學與技術(shù)學院賈智平2005-7-272內(nèi)容簡介 以目前流行的ARM嵌入式微處理器、嵌入式Linux作為主要內(nèi)容,從嵌入式系統(tǒng)基本原理、系統(tǒng)設(shè)計,到抽象出研究嵌入式系統(tǒng)的技術(shù)途徑進行了較深入闡述。其內(nèi)容包括了嵌入式處理器原理、匯編語言、系統(tǒng)設(shè)計與軟件開發(fā)、計算機接口技術(shù)與應(yīng)用等方面的知識,并通過實例講解嵌入式系統(tǒng)設(shè)計過程和原理。3章節(jié)安排章節(jié)安排第1章:嵌入式系統(tǒng)的基礎(chǔ)知識第2章:ARM處理器技術(shù)第3章:ARM指令集Thumb指令集第4章:ARM匯編程序設(shè)計技術(shù)第5章:介紹實用的外圍接口設(shè)計與開發(fā)技術(shù)第6章:介紹嵌入式系統(tǒng)的設(shè)

2、計流程和設(shè)計方法第7章:介紹基于S3C44B0X的嵌入式實驗開發(fā)系統(tǒng)4第第 1 章章 嵌入式系統(tǒng)概述嵌入式系統(tǒng)概述本章主要內(nèi)容:嵌入式系統(tǒng)的概念、發(fā)展、特點、組成、分類 嵌入式微處理器系列嵌入式系統(tǒng)中信息表示與運算基礎(chǔ) 評估嵌入式系統(tǒng)處理器的主要指標嵌入式系統(tǒng)的應(yīng)用5 嵌入式系統(tǒng)的概念嵌入式系統(tǒng)的概念第一種,根據(jù)IEEE(國際電氣和電子工程師協(xié)會)的定義: 嵌入式系統(tǒng)是“用于控制、監(jiān)視或者輔助操作機器和設(shè)備的裝置”(原文為devices used to control, monitor, or assist the operation of equipment, machinery or pl

3、ants)。n第二種,嵌入式系統(tǒng)是以應(yīng)用為中心、以計算機技術(shù)為基礎(chǔ)、軟件硬件可裁剪、功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)。 6 嵌入式系統(tǒng)的發(fā)展史嵌入式系統(tǒng)的發(fā)展史n第一階段是以單芯片為核心的可編程控制器形式的系統(tǒng);n第二階段是以嵌入式CPU為基礎(chǔ)、以簡單操作系統(tǒng)為核心的嵌入式系統(tǒng);n第三階段是以嵌入式操作系統(tǒng)為標志的嵌入式系統(tǒng);n第四階段是以Internet為標志的嵌入式系統(tǒng) 。7 嵌嵌入式系統(tǒng)的特點入式系統(tǒng)的特點n通常是面向特定應(yīng)用的;n空間和各種資源相對不足,必須高效率地設(shè)計,量體裁衣、去除冗余; n產(chǎn)品升級換代和具體產(chǎn)品同步,具有較長的生命周期; n軟件一般都固化在存

4、儲器芯片或單片機本身; n不具備自舉開發(fā)能力 ,必須有一套開發(fā)工具和環(huán)境才能進行開發(fā)8 嵌嵌入式系統(tǒng)的分類入式系統(tǒng)的分類 根據(jù)嵌入式系統(tǒng)的復雜程度,可以將嵌入式系統(tǒng)分為以下4類 :單個微處理器 。常用的嵌入式處理器如Philips的89LPCxxx系列,Motorola的MC68HC05、08系列等。 嵌入式處理器可擴展的系統(tǒng) 。過程控制、信號放大器、位置傳感器及閥門傳動器。 復雜的嵌入式系統(tǒng)。開關(guān)裝置、控制器、電話交換機、電梯、數(shù)據(jù)采集系統(tǒng)、醫(yī)藥監(jiān)視系統(tǒng)、診斷及實時控制系統(tǒng)等 。在制造或過程控制中使用的計算機系統(tǒng) 。自動倉儲系統(tǒng)和自動發(fā)貨系統(tǒng) 9 嵌入式處理器嵌入式處理器10 嵌入式系統(tǒng)的組

5、成嵌入式系統(tǒng)的組成1.嵌入式系統(tǒng)的硬件 11 嵌入式系統(tǒng)的組成嵌入式系統(tǒng)的組成2. 嵌入式系統(tǒng)的軟件嵌入式操作系統(tǒng) 通常包括與硬件相關(guān)的底層驅(qū)動軟件、系統(tǒng)內(nèi)核、設(shè)備驅(qū)動接口、通信協(xié)議、圖形界面、標準化瀏覽器等。具有編碼體積小,面向應(yīng)用,可裁剪和移植,實時性強,可靠性高,專用性強等特點。相應(yīng)的各種應(yīng)用程序 12 嵌入式系統(tǒng)的組成嵌入式系統(tǒng)的組成3嵌入式系統(tǒng)的開發(fā)工具和開發(fā)系統(tǒng) 開發(fā)工具一般用于開發(fā)主機,包括語言編譯器、連接定位器、調(diào)試器等。 v注意:嵌入式系統(tǒng)的硬件和軟件位于嵌入式系統(tǒng)產(chǎn)品本身,開發(fā)工具則獨立于嵌入式系統(tǒng)產(chǎn)品之外 。13計算機中數(shù)的表示計算機中數(shù)的表示帶符號數(shù)與無符號數(shù) 一般用最

6、高有效位來表示數(shù)的符號,正數(shù)用0表示,負數(shù)用1來表示。原碼、補碼和反碼 原碼表示的數(shù)比較直觀。8位二進制原碼表示的數(shù)的范圍是-127+127,16位二進制原碼表示的數(shù)的范圍是-32767+32767 正數(shù)的補碼仍與原碼相同,一個負數(shù)的補碼,最高有效位為1,其余幾位按原碼各位求反,最末位加1 正數(shù)的反碼表示與原碼相同,負數(shù)的反碼表示為該數(shù)的原碼除符號位外按位取反 。 14 非數(shù)值數(shù)據(jù)編碼非數(shù)值數(shù)據(jù)編碼n非數(shù)值數(shù)據(jù)是指不能進行算術(shù)運算的數(shù)據(jù)。一般包括字符、漢字、聲音等。 字符編碼。字符包括大小寫英文字母、數(shù)字、運算符、標點符號等 ,最常用的是ASCII碼。漢字編碼 。漢字的內(nèi)碼是計算機內(nèi)部處理和存

7、儲漢字時使用的代碼。GB231280國家標準信息交換用漢字編碼(簡稱國標碼)。語音編碼。語音信號是模擬信號,語音的編解碼就是將語音的模擬信號轉(zhuǎn)換為二進制數(shù)字信號在計算機中處理、傳輸,到了接收端,再將數(shù)字信號還原為模擬語音。15 差錯控制編碼差錯控制編碼n基本思想:在發(fā)送端被傳送的信息碼序列的基礎(chǔ)上,加入若干“監(jiān)督碼元”后進行傳輸,這些碼元與原來的信息碼序列之間存在著某種確定的約束關(guān)系。在接收數(shù)據(jù)時,檢驗信息碼元與監(jiān)督碼元之間的既定的約束關(guān)系。n幾種常用的差錯控制編碼:奇偶校驗碼海明碼 循環(huán)冗余校驗碼16 評估嵌入式系統(tǒng)處理器的主要指標評估嵌入式系統(tǒng)處理器的主要指標n要先明確預期最終應(yīng)用程序在待

8、選平臺上的運行情況和測試目的,然后再挑選符合要求的特定測試向量。MIPS測試基準。測試方法是計算在單位時間內(nèi)各類指令的平均執(zhí)行條數(shù),單位:MIPS。Dhrystone。測試基準是一個簡單的C語言程序。EEMBC驗證實驗室研究指出,Dhrystone不適于作為嵌入式系統(tǒng)的測試向量。雖然它是市面上最普遍適用的測試向量,但它有許多漏洞。EEMBC?;诿棵腌娝惴▓?zhí)行的次數(shù)和編譯代碼大小的統(tǒng)計結(jié)果 。n一次詳盡的分析需要仔細衡量的因素包括:性能分析、功耗和效率分析、開發(fā)工具支持以及價格 17 嵌入式系統(tǒng)的應(yīng)用嵌入式系統(tǒng)的應(yīng)用嵌入式移動數(shù)據(jù)庫;嵌入式系統(tǒng)在智能家居網(wǎng)絡(luò)中的應(yīng)用;嵌入式語音芯片;基于小范圍

9、無線通信協(xié)議的嵌入式產(chǎn)品;其它工控和仿真領(lǐng)域 。18 第第 2 2 章章 ARMARM微處理器硬件結(jié)構(gòu)微處理器硬件結(jié)構(gòu) 本章主要內(nèi)容:計算機體系結(jié)構(gòu)分類ARM版本及系列ARM處理器結(jié)構(gòu)存儲系統(tǒng)機制19 計算機體系結(jié)構(gòu)計算機體系結(jié)構(gòu)1.馮諾依曼結(jié)構(gòu)20 計算機體系結(jié)構(gòu)計算機體系結(jié)構(gòu)2. 哈佛體系結(jié)構(gòu) 21 ARM簡介簡介 ARM(Advanced RISC Machines)系列微處理器,采用的ARM技術(shù)知識產(chǎn)權(quán)(IP)核都是由ARM公司提供的。 ARM公司本身不生產(chǎn)芯片,轉(zhuǎn)讓設(shè)計許可,由合作公司生產(chǎn)各具特色的芯片。 ARM32位體系結(jié)構(gòu)目前被公認為是嵌入式應(yīng)用領(lǐng)域領(lǐng)先的32位嵌入式RISC微處

10、理器結(jié)構(gòu)。從版本1到版本6,ARM體系的指令集功能不斷擴大。 22ARM處理器系列處理器系列ARM7系列ARM9系列ARM9E系列ARM10E系列SecurCore系列Inter的XscaleInter的StrongARM23 ARM處理器結(jié)構(gòu)處理器結(jié)構(gòu)從一下四個方面介紹:ARM和Thumb狀態(tài) RISC技術(shù)流水線技術(shù)超標量執(zhí)行 24 ARM和和Thumb狀態(tài)狀態(tài) qV4版以后有:32位ARM指令集16位Thumb指令集,功能是ARM指令集的功能子集。qARM7TDMI核以后,T變種的ARM微處理器有兩種工作狀態(tài):ARM狀態(tài)Thumb狀態(tài)。25 ARM與與Thumb狀態(tài)轉(zhuǎn)換狀態(tài)轉(zhuǎn)換 在程序的執(zhí)

11、行過程中,微處理器可以隨時在兩種工作狀態(tài)之間切換,并且該轉(zhuǎn)變不影響處理器的工作模式和相應(yīng)寄存器中的內(nèi)容。 進入Thumb狀態(tài):當操作數(shù)寄存器的狀態(tài)位(位0)為1時,執(zhí)行BX指令。 進入ARM狀態(tài):當操作數(shù)寄存器的狀態(tài)位(位0)為0時,執(zhí)行BX指令。26 RISC技術(shù)技術(shù) RISC體系結(jié)構(gòu)基本特點:大多數(shù)指令只需要執(zhí)行簡單和基本的功能,其執(zhí)行過程在一個機器周期內(nèi)完成。只保留加載/存儲指令。操作數(shù)由加載/存儲指令從存儲器取出放寄存器內(nèi)操作。芯片邏輯不采用或少采用微碼技術(shù),而采用硬布線邏輯。減少指令數(shù)和尋址方式。 指令格式固定,指令譯碼簡化。優(yōu)化編譯。 27 RISC技術(shù)技術(shù)ARM體系結(jié)構(gòu)還采用了一

12、些特別的技術(shù):所有的指令都可根據(jù)前面的執(zhí)行結(jié)果決定是否被執(zhí)行,提高了指令的執(zhí)行效率??捎肔oad/Store指令批量傳輸數(shù)據(jù),以提高數(shù)據(jù)的傳輸效率??稍谝粭l數(shù)據(jù)處理指令中同時完成邏輯處理和移位處理。28 流水線技術(shù)流水線技術(shù)1ARM的3級流水線 29 流水線技術(shù)流水線技術(shù)多周期ARM指令的3級流水線操作 30 流水線技術(shù)流水線技術(shù)2ARM的流水線設(shè)計問題 (1)縮短程序執(zhí)行時間: 提高時鐘頻率fclk減少每條指令的平均時鐘周期數(shù)CPI (2)解決流水線相關(guān):結(jié)構(gòu)相關(guān) 數(shù)據(jù)相關(guān) 控制相關(guān) 31 流水線技術(shù)流水線技術(shù)3ARM的5級流水線 ARM9和StrongARM架構(gòu)都采用了5級流水線.增加了I

13、-Cache和D-Cache,把存儲器的取指與數(shù)據(jù)存取分開;增加了數(shù)據(jù)寫回的專門通路和寄存器; 把指令的執(zhí)行過程分割為5部分: 取指-指令譯碼-執(zhí)行-數(shù)據(jù)緩存-寫回 32 超標量執(zhí)行超標量執(zhí)行 通過重復設(shè)置多套指令執(zhí)行部件,同時處理并完成多條指令,實現(xiàn)并行操作,來達到提高處理速度的目的。所有ARM內(nèi)核,包括流行的ARM7、ARM9和ARM11等,都是單周期指令機。ARM公司下一代處理器將是每周期能處理多重指令的超標量機。 但是,超標量處理器在執(zhí)行的過程中必須動態(tài)地檢查指令相關(guān)性如果代碼中有分支指令。33 存儲器部件的分類存儲器部件的分類 n按在系統(tǒng)中的地位分類: “主存儲器”(Main Mem

14、ory, 簡稱內(nèi)存或主存) “輔助存儲器”(Auxiliary Memory,Secondary Memory,簡稱輔存或外存) n按存儲介質(zhì)分類:磁存儲器(Magnetic Memory),半導體集成電路存儲器(通常稱為半導體存儲器),光存儲器(Optical Memory),激光光盤存儲器(Laser Optical Disk)n按信息存取方式分類:隨機存取存儲器RAM只讀存儲器ROM 34 存儲器的組織和結(jié)構(gòu)存儲器的組織和結(jié)構(gòu) n嵌入式存儲器一般采用存儲密度較大的存儲器芯片,典型的嵌入式存儲器系統(tǒng)由ROM、RAM、EPROM等組成。 35存儲器的性能存儲器的性能 大容量、高速度、低價格是

15、評價存儲器性能的三個主要指標,也是存儲體系設(shè)計的主要目標。 容量:SwWlm。其中W為存儲體的字長(單位為位或字節(jié)),l為單個存儲體的字數(shù),m為并行工作的存儲體個數(shù)。 速度:m個存儲體并行工作時,可達到的最大頻率寬度為BmWmTM 。其中TM是連續(xù)起動一個存儲器所必要的時間間隔,TMTA。Bm是連續(xù)提供數(shù)據(jù)的速率。價格:具有SM位的存儲器,每位價格表示為c=CSm。其中C是總價格。36 存儲體系的組成存儲體系的組成單體單字存儲器單體多字存儲器 多體單字交叉存取存儲器多體多字交叉存取存儲器一般把這些能并行讀出多個CPU字的單體多字和多體單字及多體多字的交叉存取系統(tǒng),統(tǒng)稱為并行主存系統(tǒng)。 37 存

16、儲體系的形式存儲體系的形式 (a)兩級存儲器層次結(jié)構(gòu) (b)三級存儲器層次結(jié)構(gòu) 38 總線結(jié)構(gòu)總線結(jié)構(gòu)n1.總線協(xié)議 :四周期握手協(xié)議 39 總線結(jié)構(gòu)總線結(jié)構(gòu)n2.總線讀寫 40 總線結(jié)構(gòu)總線結(jié)構(gòu)3總線的時序圖41 總線結(jié)構(gòu)總線結(jié)構(gòu)4直接內(nèi)存訪問(DMA) 42 總線結(jié)構(gòu)總線結(jié)構(gòu)5系統(tǒng)總線配置 多總線系統(tǒng)43 ARM存儲數(shù)據(jù)類型存儲數(shù)據(jù)類型ARM處理器支持以下六種數(shù)據(jù)類型: 8位有符號和無符號字節(jié)。16位有符號和無符號半字,以2字節(jié)的邊界對齊。32位有符號和無符號字,以4字節(jié)的邊界對齊。44 ARM存儲格式存儲格式 大端存儲模式 小端存儲模式(缺省)45 存儲器接口存儲器接口1.存儲周期的基本

17、類型:空閑周期非順序周期順序周期協(xié)處理器寄存器傳送周期 46 存儲器接口存儲器接口2.ARM的總線接口信號分成4類(以ARM7TDMI為例說明):時鐘和時鐘控制信號:MCLK、ECLK、nRESET、nWAIT。地址類信號:A31.0、nRW、MAS1.0、nOPC、nTRANS、LOCK、TBIT。存儲器請求信號:nMREQ、SEQ。數(shù)據(jù)時序信號:D31.0、DIN31.0、DOUT31.0、ABORT、BL3.0。47 存儲器接口存儲器接口3. ARM的總線接口可以實現(xiàn)4種不同類型的總線周期。48 高速緩沖存儲器高速緩沖存儲器1.分類:統(tǒng)一Cache VS 獨立的數(shù)據(jù)/程序Cache寫通c

18、ache VS 寫回cache讀操作分配cache VS 寫操作分配cache49 高速緩沖存儲器高速緩沖存儲器2.工作原理:50 高速緩沖存儲器高速緩沖存儲器3.地址映像和變換方式:全相聯(lián)地址映像和變換組相聯(lián)地址映像和變換直接映像和變換 51 高速緩沖存儲器高速緩沖存儲器4.Cache的替換算法:輪轉(zhuǎn)法隨機替換算法 52 存儲管理單元存儲管理單元MMU1.在ARM系統(tǒng)中,存儲管理單元MMU主要完成工作:虛擬存儲空間到物理存儲空間的映射。在ARM中采用了頁式虛擬存儲管理。存儲器訪問權(quán)限的控制。 設(shè)置虛擬存儲空間的緩沖的特性。53 存儲管理單元存儲管理單元MMU (1)2.存儲訪問過程使能MMU

19、時存儲訪問過程 :54 存儲管理單元存儲管理單元MMU (2)禁止MMU時存儲訪問過程: 先要確定芯片是否支持cache和write buffer。如果芯片規(guī)定當禁止MMU時禁止cache和write buffer,則存儲訪問將不考慮C和B控制位。如果芯片規(guī)定當禁止MMU時可以使能cache和write buffer,則數(shù)據(jù)訪問時,C=0,B=0;指令讀取時,如果使用分開的TLB,那么C=1,如果使用統(tǒng)一的TLB,那么C=0。 存儲訪問不進行權(quán)限控制,MMU也不會產(chǎn)生存儲訪問中止信號。 所有的物理地址和虛擬地址相等,即使用平板存儲模式。55 存儲管理單元存儲管理單元MMU (1)3. MMU中

20、的地址變換過程:通過兩級頁表實現(xiàn)。a)一級頁表中包含有以段為單位的地址變換條目以及指向二級頁表的指針。一級頁表是實現(xiàn)的地址映射粒度較大。以段為單位的地址變換過程只需要一級頁表。b)二級頁表中包含有以大頁和小頁為單位的地址變換條目。有一種類型的二級頁表還包含有以極小頁為單位的地址變換條目。以頁為單位的地址變換過程需要二級頁表。 56 存儲管理單元存儲管理單元MMU (2)一級頁表的地址變換過程 :57 存儲管理單元存儲管理單元MMU (1)4.一級描述符: 從頁表中得到的相應(yīng)地址變換條目稱為一級描述符。它定義了與之相應(yīng)的1M存儲空間是如何映射的。一級描述符的位1:0定義了該一級描述符的類型,共有

21、4種格式的一級描述符: 58 存儲管理單元存儲管理單元MMU (2)1)粗粒度頁表描述符:當一級描述符的位1.0為0b01(0b代表二進制)時,該一級描述符中包含了粗粒度的二級頁表的物理地址,這種一級描述符稱為粗粒度頁表描述符。它的格式和各個字段的含義如下: 59 存儲管理單元存儲管理單元MMU (3)由粗粒度頁表描述符獲取二級描述符的過程 :60 存儲管理單元存儲管理單元MMU (4)2)段描述符:當一級描述符的位1:0為0b10時,該一級描述符為段描述符,它的格式和各個字段的含義如下:61 存儲管理單元存儲管理單元MMU (5)基于段的地址變換過程 :62 存儲管理單元存儲管理單元MMU

22、(6)3)細粒度頁表描述符:當一級描述符的位1:0為0b11時,該一級描述符中包含了細粒度的二級頁表的物理地址,稱為細粒度頁表描述符。它的格式和各個字段的含義如下:63 存儲管理單元存儲管理單元MMU (7)由細粒度頁表描述符獲取二級描述符的過程 64 存儲管理單元存儲管理單元MMU 5.MMU中的存儲訪問權(quán)限控制65 存儲管理單元存儲管理單元MMU 6. MMU中的域(Domain) MMU中的域指的是一些段、大頁或者小頁的集合。ARM支持最多16個域,每個域的訪問控制特性都是由CP15中的寄存器C3中的兩位來控制的。這兩位的字段編碼和含義: 66 存儲管理單元存儲管理單元MMU 7.快速上

23、下文切換技術(shù) 快速上下文切換技術(shù)FCSE(Fast Context Switch Extension)通過修改系統(tǒng)中不同進程的虛擬地址,避免在進行進程間切換時造成的虛擬地址到物理地址的重映射,從而提高系統(tǒng)的性能。 FCSE位于CPU和MMU之間,其責任就是將不同進程使用的相同虛擬地址映射為不同的虛擬空間,使得在上下文切換時無需重建TLB等。67 存儲管理單元存儲管理單元MMU 8.存儲器映射的輸入/輸出 在ARM系統(tǒng)中,I/O操作通常被映射成存儲器操作,即輸入/輸出是通過存儲器映射的可尋址外圍寄存器和中斷輸入的組合來實現(xiàn)的。 但是,對于存儲器映射的I/O空間的操作,不能使用Cache技術(shù)。68

24、第第 3 3 章章 ARMARM尋址方式與指令系統(tǒng)尋址方式與指令系統(tǒng)本章主要內(nèi)容:ARM編程模型 ARM指令格式和尋址方式ARM指令集 Thumb指令集 69 機器指令、偽指令和宏指令機器指令、偽指令和宏指令 機器指令能被處理器直接執(zhí)行,而偽指令宏和宏指令不能。機器指令包括ARM指令集和Thumb指令集 ;偽指令是在源程序匯編期間,由匯編編譯器處理。其作用是為匯編程序完成準備工作;宏指令在程序中用于調(diào)用宏,宏是一段獨立的程序代碼;在程序匯編時,對宏調(diào)用進行展開,用宏體代替宏指令。70 ARM處理器模式處理器模式n除用戶模式之外的其余6種稱為非用戶模式,或特權(quán)模式(Privileged Mode

25、s);而特權(quán)模式中,除系統(tǒng)模式之外的其余5種又稱為異常模式(Exception Modes),不同的工作模式間可以相互切換。 工作模式功能M4:0用戶模式(usr)正常的程序執(zhí)行狀態(tài)10000快速中斷模式(fiq)用于高速數(shù)據(jù)傳輸或通道處理10001外部中斷模式(irq)用于通用的中斷處理10010管理模式(svc)操作系統(tǒng)的保護模式10011中止模式(abt)用于虛擬存儲及存儲保護10111未定義指令模式(und)用于支持硬件協(xié)處理器的軟件仿真11011系統(tǒng)模式(sys)運行特權(quán)級的操作系統(tǒng)任務(wù)1111171 處理器的工作狀態(tài)處理器的工作狀態(tài)ARM狀態(tài):處理器執(zhí)行32位的arm指令集時,工作

26、在此狀態(tài);Thumb狀態(tài):處理器執(zhí)行16位的thumb指令集時,工作在此狀態(tài)。 72 ARM的寄存器組織的寄存器組織73 ARM的寄存器組織的寄存器組織 1.通用寄存器:包括R0R15,以及程序計數(shù)器PC .R0R7稱為不分組寄存器;R8R12有兩組物理寄存器。一組屬于快速模式(R8_fiqR12_fiq),另一組屬于其它模式(R8_usrR12_usr) ;R13和R14有6組物理寄存器。其中用戶模式和系統(tǒng)模式共用一組 。寄存器R13通常作為堆棧指針(SP) ,寄存器R14常用作連接寄存器(LR);寄存器R15,又稱為PC 74 ARM的寄存器組織的寄存器組織 (1)2.狀態(tài)寄存器:當前程序

27、狀態(tài)寄存器 CPSR,可以在任何工作模式下被訪問;程序狀態(tài)備份寄存器SPSR,只有在異常模式下,才能被訪問 ; 75 ARM的寄存器組織的寄存器組織 (2)條件標志位標志位含 義N當兩個補碼表示的帶符號數(shù)運算時,N=1 表示運算的結(jié)果為負數(shù);N=0 表示運算的結(jié)果為正數(shù)或零;ZZ=1 表示運算的結(jié)果為零;Z=0表示運算的結(jié)果不為零;C有3種情況會改變C的值:加法運算(包括比較指令CMN):當運算結(jié)果產(chǎn)生了進位時(無符號數(shù)上溢出),C=1,否則C=0。減法運算(包括比較指令CMP):當運算時產(chǎn)生了借位(無符號數(shù)下溢出),C=0,否則C=1。對于包含移位操作的非加/減運算指令,C為移出值的最后一位

28、。V對于加/減法運算指令,當操作數(shù)和運算結(jié)果為二進制的補碼表示的帶符號數(shù)時,V=1表示符號位溢出。Q在ARM v5及以上版本的E系列處理器中,用Q標志位指示增強的DSP運算指令是否發(fā)生了溢出。76 ARM的寄存器組織的寄存器組織 (3)控制位標志位含義II1,表示禁止IRQ中斷;否則,表示允許IRQ中斷FF1,表示禁止FIQ中斷;否則,表示允許FIQ中斷T對于ARM v4以上版本的T系列處理器,T0,表示執(zhí)行ARM指令,否則,表示執(zhí)行Thumb指令;對于ARM v5以上版本的非T系列處理器,T0,表示指令ARM指令,否則,表示強制下一條執(zhí)行的指令產(chǎn)生未定義指令中斷。M4:0M4:0處理器工作模

29、式可訪問的寄存器10000用戶模式PC,R0R14,CPSR10001快速中斷模式PC,R0R7,R8_fiqR14_fiq,CPSR,SPSR_fiq10010外部中斷模式PC,R0R12,R13_irqR14_irq,CPSR,SPSR_irq10011管理模式PC,R0R12,R13_svcR14_svc,CPSR,SPSR_svc10111中止模式PC,R0R12,R13_abtR14_abt,CPSR,SPSR_abt11011未定義指令模式PC,R0R12,R13_undR14_und,CPSR,SPSR_und11111系統(tǒng)模式PC,R0R14,CPSR77 異常中斷異常中斷n異

30、常中斷是指處理器由于外部或內(nèi)部的原因,停止執(zhí)行當前任務(wù),轉(zhuǎn)而處理特定的事件,處理完后返回原程序,繼續(xù)執(zhí)行。 異常類型工作模式特定地址(低端)特定地址(高端)優(yōu)先級復位管理模式0 x000000000 xFFFF00001未定義指令未定義指令中止模式0 x000000040 xFFFF00046軟件中斷(SWI)管理模式0 x000000080 xFFFF00086指令預取中止中止模式0 x0000000C0 xFFFF000C5數(shù)據(jù)訪問中止中止模式0 x000000100 xFFFF00102外部中斷請求(IRQ)外部中斷模式0 x000000180 xFFFF00184快速中斷請求(FIQ)

31、快速中斷模式0 x0000001C0 xFFFF001C378 異常中斷異常中斷(1)n例子: 1.整個地址空間的起始位置(地址0 x00000000開始)有以下指令,一旦發(fā)生外部中斷請求,處理器首先自動保存當前狀態(tài)(PC-R14,CPSR-SPSR),進入外部中斷模式,接著執(zhí)行地址0 x00000018處的指令,即b IRQ_SVC_HANDLER跳轉(zhuǎn)到標號IRQ_SVC_HANDLER處開始執(zhí)行。 bSYS_RST_HANDLER;對0 x00000000bUDF_INS_HANDLER;0 x00000004bSWI_SVC_HANDLER;應(yīng)0 x00000008bINS_ABT_HA

32、NDLER;0 x0000000cbDAT_ABT_HANDLER;地0 x00000010b.;bIRQ_SVC_HANDLER;址0 x00000018bFIQ_SVC_HANDLER;0 x0000001c 79 異常中斷異常中斷(2) 2. IRQ_SVC_HANDLER處的代碼為: IRQ_SVC_HANDLERsub lr, lr, #4stmfdsp!, r0-r3, lrldr r0, =IRQ_SVC_Vectorldr pc, r0 處理器將通用寄存器和返回地址壓入堆棧,接著跳轉(zhuǎn) 到 外 部 中 斷 請 求 的 中 斷 服 務(wù) 程 序 中 。IRQ_SVC_Vector為外

33、部中斷請求的中斷向量。80 ARM指令的編碼格式指令的編碼格式 3128272524212019161512110cond opcodeSRnRdop20000001010010001000000000000001081 ARM指令的助記符指令的助記符 ARM指令在匯編程序中用助記符表示,一般ARM指令的助記符格式為: S , 其中: 操作碼,如ADD表示算術(shù)加操作指令; 決定指令執(zhí)行的條件域;S 決定指令執(zhí)行是否影響CPSR寄存器的值; 目的寄存器; 第一個操作數(shù),為寄存器; 第二個操作數(shù)。82 條件域條件域condCPSR中標志位含 義EQZ置位相等NEZ清零不相等CSC置位無符號數(shù)大于或

34、等于CCC清零無符號數(shù)小于MIN置位負數(shù)PLN清零正數(shù)或零VSV置位溢出VCV清零未溢出HIC置位Z清零無符號數(shù)大于LSC清零Z置位無符號數(shù)小于或等于GEN等于V帶符號數(shù)大于或等于LTN不等于V帶符號數(shù)小于GTZ清零且(N等于V)帶符號數(shù)大于LEZ置位或(N不等于V)帶符號數(shù)小于或等于AL忽略無條件執(zhí)行83 尋址方式尋址方式 立即數(shù)尋址寄存器尋址寄存器移位尋址寄存器間接尋址 基址變址尋址相對尋址 多寄存器尋址 塊拷貝尋址 堆棧尋址 84例:寄存器移位尋址例:寄存器移位尋址LSL邏輯左移 :Rx,LSL LSR邏輯右移 : Rx,LSR ASR算術(shù)右移 :Rx,ASR ROR循環(huán)右移 :Rx,R

35、OR RRX帶擴展的循環(huán)右移:Rx,RRX 85ARM指令集指令集數(shù)據(jù)處理指令;跳轉(zhuǎn)指令;Load/Store指令;程序狀態(tài)寄存器指令;協(xié)處理器指令;軟件中斷指令 86Thumb指令集指令集nThumb指令集可以看作是ARM指令集的一個子集,Thumb指令長度為16位,但Thumb指令集中的數(shù)據(jù)處理指令的操作數(shù)仍然是32位的,指令尋址地址也是32位的。 nThumb指令集由四大類構(gòu)成:數(shù)據(jù)處理指令;跳轉(zhuǎn)指令;Load/Store指令;和軟件中斷指令87第第 4 4 章章 匯編語言程序設(shè)計匯編語言程序設(shè)計 本章主要內(nèi)容:匯編語言源程序格式匯編語言上機過程匯編語言與C語言混合編程技術(shù)Linux下的

36、ARM匯編 程序優(yōu)化與性能測試88 ARM源程序文件源程序文件 文件類型擴展名匯編語言源文件.sC語言源文件.cC+源文件.cpp引入文件.INC頭文件.h89 匯編源程序示例匯編源程序示例 90 匯編源程序示例匯編源程序示例91 匯編源程序示例匯編源程序示例92 匯編源程序示例匯編源程序示例nARM的匯編語言程序一般由幾個段組成,每個段均由AREA偽操作定義。n段可以分為多種,如代碼段、數(shù)據(jù)段、通用段,每個段又有不同的屬性,象代碼段的默認屬性為READONLY,數(shù)據(jù)段的默認屬性為READWRITE。n本程序定義了兩個段,第一個段為代碼段codesec,它在存儲器中存放用于程序執(zhí)行的代碼以及m

37、ain函數(shù)的本地字符串;第二個段為數(shù)據(jù)段constdatasec,存放了全局的字符串,由于本程序沒有對數(shù)據(jù)進行寫操作,該數(shù)據(jù)段定義屬性為READONLY。93 匯編語言的行構(gòu)成匯編語言的行構(gòu)成格式:n 標簽標簽 指令指令/ /偽操作偽操作/ /偽指令偽指令 操作數(shù)操作數(shù) ; ;語句的注釋語句的注釋 所有的標簽必須在一行的開頭頂格寫,前面不能留空格,后面也不能跟C語言中的標簽一樣加上“:”; ARM匯編器對標識符的大小寫敏感書寫標號及指令時字母的大小寫要一致;注釋使用“;”符號,注釋的內(nèi)容從“;”開始到該行的結(jié)尾結(jié)束。94 匯編語言的行構(gòu)成匯編語言的行構(gòu)成n標簽 標簽是一個符號,可以代表指令的地

38、址、變量、數(shù)據(jù)的地址和常量。一般以字母開頭,由字母、數(shù)字、下劃線組成。當符號代表地址時又稱標號,可以以數(shù)字開頭,其作用范圍為當前段或者在下一個ROUT偽操作之前。n指令/偽操作 指令/偽操作是指令的助記符或者定義符,它告訴ARM的處理器應(yīng)該執(zhí)行什么樣的操作或者告訴匯編程序偽指令語句的偽操作功能。95 匯編語言的匯編語言的標號標號n標號代表地址。標號分為段內(nèi)標號和和段外標號。段內(nèi)標號的地址值在匯編時確定,段外編號的地址值在鏈接時確定 。n在程序段中,標號代表其所在位置與段首地址的偏移量。根據(jù)程序計數(shù)器(PC)和偏移量計算地址即程序相對尋址。n在映像中定義的標號代表標號到映像首地址的偏移量。映像的

39、首地址通常被賦予一個寄存器,根據(jù)該寄存器值與偏移量計算地址即寄存器相對尋址。n此外在宏中也可以使用局部符號。局部標號是099的十進位數(shù)開始,可以重復定義。 局部標號引用格式: F|BA|T Nroutname 96 匯編語言的匯編語言的常量常量 程序中的常量是指其值在程序的運行過程中不能被改變的量。數(shù)字常量:數(shù)字常量有3種表示方式:十進制數(shù),如1、2、123十六進制數(shù),如 0 x123,0 xabc n進制數(shù),形式為n_XXX,n的范圍是2到9,XXX是具體數(shù)字字符常量:由單引號及中間的字符組成,包括C語言中的轉(zhuǎn)義字符,如a,n字符串常量:由一對雙引號及中間的字符串表示,中間 也 可 以 使

40、用 C 語 言 中 的 轉(zhuǎn) 義 字 符 , 比 如 :“abcdef0 xarn”邏輯常量:TRUE,FALSE,注意帶大括號97 匯編程序的變量代換匯編程序的變量代換 這里所說的變量,是相對于匯編程序的“變量”,是用于匯編程序進行處理的,但一旦編譯到程序中,則不會改變,成為常量。如果在字符串變量的前面有一個$字符,在匯編時編譯器將用該字符串變量的內(nèi)容代替該串變量。如果在數(shù)字變量前面有一個代換操作符“$”,編譯器會將該數(shù)字變量的值轉(zhuǎn)換為十六進制的字符串,并用該十六進制的字符串代換“$”后的數(shù)字變量。如果需要將“$”字符 加入到字符串中,可以用“$”代替,此時編譯器將不再進行變量代換,而是把“$

41、”看作一個“$”.一般的,在兩個“|”之間的“$”并不進行變量的代換,但如果“|”在雙引號內(nèi),則將進行變量代換。使用“.”來表示字符串中變量名的結(jié)束。98 匯編程序的變量代換匯編程序的變量代換99 偽指令偽指令n在ARM匯編語言源程序中有些特殊助記符,它們沒有相對應(yīng)的操作碼或者機器碼,通常稱為偽指令,它們所完成的操作稱為偽操作。偽指令在源程序中的作用是為完成匯編程序作各種準備工作的,由匯編程序在源程序的匯編期間進行處理,僅在匯編過程中起作用。符號定義偽指令數(shù)據(jù)定義偽指令匯編控制偽指令信息報告?zhèn)沃噶詈曛噶钜约捌渌麄沃噶睢?00匯編語言上機過程匯編語言上機過程 用ARM匯編語言編寫的源程序,要使之

42、運行必須經(jīng)過以下幾個步驟:1.編輯匯編源程序,保存為文件名后綴是“.s”的文件;2.調(diào)用匯編程序?qū)υ闯绦蜻M行匯編,生成目標文件;3.連接目標文件,生成可以放進ARM軟件仿真器進行調(diào)試的映象文件或者可下載到ARM的目標板執(zhí)行的二進制文件;4.對生成的最終文件進行調(diào)試。101 ARM的開發(fā)工具的開發(fā)工具ADS1.2 ADS1.2是ARM公司推出的一套ARM匯編、C、C+的集成開發(fā)環(huán)境。包含了幾個有用的開發(fā)工具,包括:CodeWarrior IDE for the ARM Developer Suite :為ARM的程序員管理、開發(fā)軟件工程項目提供了一個簡單直觀、靈活的用戶界面。 AXD Debug

43、er:AXD是一個功能強大、使用方便的調(diào)試器。 102 編輯匯編語言源程序編輯匯編語言源程序 n可以使用簡單的Windows自帶的記事本程序來編輯ARM的匯編程序: 單擊開始菜單程序附件記事本 敲入?yún)R編代碼保存為.s文件 n也可以使用CodeWarrior IDE來編輯匯編程序: 單擊File菜單的New菜單項 單擊Project標簽頁 單擊工具欄的New Text按鈕 敲入?yún)R編代碼保存為hello.s文件 單擊Project菜單,選擇“Add *.s to project” 103 編譯匯編語言源程序編譯匯編語言源程序nARM的編譯器有如下幾種armcc:ARM C編譯器,具有優(yōu)化功能,兼容

44、ANSI Ctcc:Thumb的C編譯器,同樣具有優(yōu)化功能兼容ANSI C。armcpp:ARM C+編譯器,遵循ANSI C+或者EC+標準tcpp:Thubm的C+編譯器,遵循ANSI C+或者EC+標準armasm:支持ARM和Thumb的匯編器 這些編譯器輸出的是ELF格式的目標文件,可以包括RAWF2格式的調(diào)試信息。同時通過特殊的控制選項可以輸出匯編語言文件或者列表文件。104 編譯匯編語言源程序編譯匯編語言源程序n4種ARM C和C+編譯器(armcc,tcc, armcpp和 tcpp)的命令通用語法: compiler PCS-options source-language s

45、earch-paths preprocessor-options output-format target-options debug-options code-generation-options warning-options additional-checks error-options source -via filename 用戶通過命令行操作選項指引編譯器運行。所有的選項都是以符號”-”開始,有些選項后面還跟有參數(shù)。在大多數(shù)情況下,ARM C和 C+編譯器允許在選項和參數(shù)之間存在空格。 105 編譯匯編語言源程序編譯匯編語言源程序 PCS-options:指定了要使用的過程調(diào)用標準

46、;source-language:指定了編譯器可以接受的編寫源程序的語言種類。對于C編譯器默認的語言是ANSI C,對于C+編譯器默認是ISO標準C+;search-paths:該選項指定了對包含的文件(包括源文件和頭文件)的搜索路徑;preprocessor-options:該選項指定了預處理器的行為,其中包括預處理器的輸出和宏定義等特性;output-format:該選項指定了編譯器的輸出格式,可以使用該項生成匯編語言輸出列表文件和目標文件;target-options:該選項指定目標處理器或ARM體系結(jié)構(gòu);debug-options:該選項指定調(diào)試信息表是否生成,和該調(diào)試信息表生成時的格

47、式;106 編譯匯編語言源程序編譯匯編語言源程序code-generation-options:該選項指定了例如優(yōu)化,字節(jié)順序和由編譯器產(chǎn)生的數(shù)據(jù)對齊格式等選項;warning-options:該選項決定警告信息是否產(chǎn)生;additional-checks:該選項指定了幾個能用于源碼的附加檢查,例如檢查數(shù)據(jù)流異常,檢查沒有使用的聲明等;error-options:該選項可以關(guān)閉指定的可恢復的錯誤,或者將一些指定的錯誤降級為警告;source:該選項提供了包含有C或C+源代碼的一個或多個文件名,默認的,編譯器在當前路徑尋找源文件和創(chuàng)建輸出文件。如果源文件是用匯編語言編寫的(也就是說該文件的文件名

48、是以.s作為擴展名),匯編器將被調(diào)用來處理這些源文件。-via filename :WINDOWS系統(tǒng)對命令行的長度有限制,可以通過filename的文件讀取命令行選項。用戶可以對-via進行嵌套調(diào)用,在文件filename中再通過-via filename2包含了另外一個文件。 107連接裝配匯編程序連接裝配匯編程序 n使用armlink程序?qū)RM的匯編源程序進行連接,它也可以將多個.o目標文件連接生成最終的可執(zhí)行文件。n術(shù)語 :映像文件(image):是指一個可執(zhí)行文件,在執(zhí)行的時候被加載到處理器中。一個映像文件可以有多個線程。它是ELF(Executable and linking f

49、ormat)格式的。 段(Section):描述映像文件的代碼或數(shù)據(jù)塊。RO:Read-only縮寫。RW:是Read-write縮寫。ZI:是Zero-initialized縮寫。108 連接裝配匯編程序連接裝配匯編程序Read Only Position Independent(ROPI):只讀數(shù)據(jù)中代碼和的地址在運行時候可以改變。Read Write Position Independent(RWPI):一個段中的可讀/寫的數(shù)據(jù)地址在運行期間可以改變。輸入段(input section):它包含著代碼,初始化數(shù)據(jù)或描述了在應(yīng)用程序運行之前必須要初始化為0的一段內(nèi)存。輸出段(output

50、section):它包含了一系列具有相同的RO,RW或ZI屬性的輸入段。 域(Regions):在一個映像文件中,一個域包含了1至3個輸出段。多個域組織在一起,就構(gòu)成了最終的映像文件。 加載時地址:映像文件載入存儲器時的地址。運行時地址:映像文件運行時的地址。109匯編程序的運行匯編程序的運行 生成的*.axf文件是ARM 的ELF 格式的可執(zhí)行映像文件;這個文件可以載入AXD 進行仿真調(diào)試。使用armsd在終端模擬它在ARM目標機上的運行 :執(zhí)行armsd -exec *.axf 直接在CodeWarrior IDE中運行映象文件:在project窗口中點擊run按鈕。在AXD上調(diào)試成功之后

51、,我們可以通過fromelf 工具將ELF 文件轉(zhuǎn)換為二進制格式文件下載到目標板執(zhí)行。轉(zhuǎn)化的命令如下: fromelf *.axf -bin *110 匯編程序的調(diào)試匯編程序的調(diào)試n使用AXD進行調(diào)試 :編譯、連接成功之后,我們可以點擊project 窗口的debug按鈕啟動AXD進行調(diào)試:主框架窗口上方的調(diào)試工具欄有幾個常用的按鈕:go:使程序運行直到下一個斷點停止step in:進入函數(shù)內(nèi)部運行step:單步調(diào)試,每次移動一行step out :跳出循環(huán)或函數(shù)run to cursor:運行到光標所在的位置然后停止。111 匯編語言與匯編語言與C C語言混合編程技術(shù)語言混合編程技術(shù)nARM

52、體系結(jié)構(gòu)支持ARM的匯編語言與C與C+的混合編程.一般的在一個完整的程序設(shè)計的中,除了初始化部分用匯編語言完成外,其大部分的編程任務(wù)一般都用C或C+完成。112 匯編程序中訪問匯編程序中訪問C C程序變量程序變量 在匯編的源程序中調(diào)用C語言風格的字符串需要使用IMPORT偽操作。IMPORT相當于C語言中的extern關(guān)鍵字,告訴編譯器引用的符號不是在本文件中定義的,而是在其他的源文件中定義的。 IMPORT symbol ,WEAKsymbol是聲明的符號的名稱;,WEAK指示編譯器如果發(fā)現(xiàn)symbol在所有的源文件中都沒有找到,那么它也不會產(chǎn)生任何的錯誤信息。示例見下頁。113 匯編程序中

53、訪問匯編程序中訪問C C程序變量程序變量C語言代碼文件str.c,里面只有一個簡單的字符串的定義char *strhello=Hello world!n0;匯編代碼文件hello.s1 AREA |.text|, CODE, READONLY 2 main PROC3 STMFD sp!,lr4 LDR r0,strtemp5 LDRr0,r06 BL _printf7 LDMFD sp!,pc8 strtemp9 DCDstrhello10 ENDP11 EXPORT main12 IMPORT strhello13 IMPORT _main14 IMPORT _main15 IMPORT

54、_printf16 IMPORT |Lib$Request$armlib|, WEAK17 END114 C C程序中內(nèi)嵌匯編指令程序中內(nèi)嵌匯編指令 n在ARM的C語言程序中我們可以使用關(guān)鍵字_asm來加入一段匯編語言的程序,格式如下: _asm instruction/*comment*/ 115 C C程序中內(nèi)嵌匯編指令程序中內(nèi)嵌匯編指令n在C語言中嵌入的ARM匯編需要注意一些問題:在匯編指令中,可以使用表達式,使用逗號“,”作為分隔符 ;如果一條指令占用了多行,那么應(yīng)該使用符號“”續(xù)行,如果一行中有多個匯編指令,那么應(yīng)該使用“;”將多個指令隔開,匯編中不能再使用“;”作為注釋行的開頭,而

55、應(yīng)該使用C語言中的“/*/”或者“/”進行注釋;不要企圖使用一個物理寄存器去改變一個C變量;對于內(nèi)嵌的匯編代碼用到的寄存器,編譯器在編譯時會自動加入保存和恢復這些寄存器的代碼而不用用戶去管理,除了寄存器CPSR和SPSR,其他寄存器都必須先賦值然后再讀取,否則編譯時將出現(xiàn)錯誤。116 C C程序中內(nèi)嵌匯編指令程序中內(nèi)嵌匯編指令n內(nèi)嵌的ARM匯編與純粹的ARM匯編的區(qū)別有:內(nèi)嵌的ARM匯編不支持ADR、ADRL偽指令;十六進制數(shù)使用0 x作為前綴,而后者使用&;編譯器在編譯函數(shù)時使用R0、R1、R2、R3、IP和LR存放中間結(jié)果,因此使用這些寄存器時要特別小心;注意C語言中的C語言變量不

56、要和物理寄存器同名,否則可能出現(xiàn)混亂;內(nèi)嵌的匯編代碼不能使用PC寄存器返回當前指令的地址;STM和LDM指令中不能使用C語言表達式;不支持BX和BLX;用戶可以改變處理器的模式,但仍然需要自己把處理器模式恢復過來,編譯器不會自動做處理;嵌匯編指令常量前面的符號“#”可以省略;嵌匯編指令不支持內(nèi)存分配的偽操作。117 C程序調(diào)用匯編程序程序調(diào)用匯編程序 n為了滿足ARM匯編、C與C+之間的互相調(diào)用,必須保證編寫的代碼遵循APCS(ARM過程調(diào)用標準)。APCS規(guī)定了子程序調(diào)用的基本規(guī)則,這些規(guī)則包括子程序調(diào)用過程中寄存器、數(shù)據(jù)棧的使用規(guī)則以及參數(shù)的傳遞規(guī)則。n示例見課本P*。 118 Linux

57、下的下的ARM匯編匯編nLinux下的ARM匯編指令與Window下的匯編相比,在ARM處理器的指令使用方面是大同小異的,不同的是編譯工具和ARM匯編的偽操作,其語法更類似于gas 風格的匯編.nGNU提供的基于ARM平臺的編譯工具如下:匯編器arm-elf-as,作用是將匯編語言程序轉(zhuǎn)化為ELF格式的可重定位目標代碼。C編譯器arm-elf-gcc,是ARM的交叉編譯器,運行于Linux平臺,它在編譯時,首先通過預處理程序?qū)υ创a進行處理,然后調(diào)用ccl將處理后的程序轉(zhuǎn)化為匯編代碼,最后通過arm-elf-as將匯編代碼編譯為目標代碼。連接器arm-elf-ld,可以根據(jù)鏈接定位文件的代碼區(qū)

58、 數(shù)據(jù)區(qū) BSS區(qū)和棧區(qū)等定位信息,將多個可重定位的目標模塊鏈接成一個單一的,絕對定位的,ELF格式的目標程序。二進制轉(zhuǎn)換工具arm-elf-objcopy,是目標格式轉(zhuǎn)化工具,它能夠?qū)LF格式的文件轉(zhuǎn)化為其他格式的文件。119 Linux匯編程序中的標號匯編程序中的標號 n標號只能由az,AZ,09,“.”, _等字符組成.當標號為09的數(shù)字時為局部標號,局部標號可以重復出現(xiàn),使用方法如下:標號f:在引用的地方向前的標號;標號b:在引用的地方向后的標號n使用局部符號的例子(“”符號后的語句為注釋):1: subs r0,r0,#1 每次循環(huán)使r0=r0-1 bne 1f 跳轉(zhuǎn)到1標號去執(zhí)行

59、n局部標號代表它所在的地址,因此也可以當作變量或者函數(shù)來使用。120 Linux匯編程序中的分段名匯編程序中的分段名 n段名:匯編系統(tǒng)預定義的段名有: .text、.data、.bss、.sdata、.sbss等,每一個段以段名為開始,以下一個段名或者文件結(jié)尾為結(jié)束.n用戶可以通過.section偽操作來自定義一個段,格式如下: .section section_name , flags, %type,flag_specific_argumentsn示例: .section .mysection 自定義數(shù)據(jù)段,段名為 “.mysection” .align2 .strtemp: .asciiT

60、emp string n0121 Linux匯編程序中的宏定義匯編程序中的宏定義n格式如下: .macro 宏名 參數(shù)名列表 偽指令.macro定義一個宏 宏體 .endm .endm表示宏結(jié)束n如果宏使用參數(shù),那么在宏體中使用該參數(shù)時添加前綴“”。宏定義時的參數(shù)還可以使用默認值。n可以使用偽指令來退出宏。122Linux下下ARM匯編的常用偽操作匯編的常用偽操作 n數(shù)據(jù)定義偽操作: .byte,.short,.long,.quad, .float,.string/.asciz/.ascii,重復定義偽操作.rept,賦值語句.equ/.set ;n函數(shù)的定義 ;n對齊方式偽操作 .align;n源文

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論