RealView編譯工具 匯編程序指南-_第1頁(yè)
RealView編譯工具 匯編程序指南-_第2頁(yè)
RealView編譯工具 匯編程序指南-_第3頁(yè)
RealView編譯工具 匯編程序指南-_第4頁(yè)
RealView編譯工具 匯編程序指南-_第5頁(yè)
已閱讀5頁(yè),還剩53頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、RealView®編譯工具3.1 版匯編程序指南版權(quán)所有 © 2002-2007 ARM Limited。保留所有權(quán)利。ARM DUI 00204HCRealView 編譯工具匯編程序指南版權(quán)所有 ©2002-2007 ARM Limited。保留所有權(quán)利。版本信息本手冊(cè)進(jìn)行了以下更改。更改歷史記錄日期發(fā)行號(hào)保密性更改2002 年 8 月A非保密 1.2 版2003 年 1 月B非保密 2.0 版2004 年 1 月D非保密RVDS v2.1 的 2.1 版2004 年 12 月E非保密RVDS v2.2 的 2.2 版2005 年 5 月F非保密RVDS v2.

2、2 SP1 的 2.2 版2006 年 3 月G非保密RVDS v3.0 的 3.0 版2007 年 3 月H非保密RVDS v3.1 的 3.1 版。所有權(quán)聲明帶有®或標(biāo)記的詞語(yǔ)和徽標(biāo)是 ARM 公司的注冊(cè)商標(biāo)或商標(biāo)。此處提及的其他品牌和名稱(chēng)可能是其各自所有者的商標(biāo)。除非事先得到版權(quán)所有人的書(shū)面許可,否則不得以任何形式修改或復(fù)制本文檔包含的部分或全部信息以及產(chǎn)品說(shuō)明。本文檔描述的產(chǎn)品還將不斷發(fā)展和完善。 ARM 公司將如實(shí)提供本文檔所述產(chǎn)品的所有特性及其使用方法。但是,所有暗示或明示的擔(dān)保,包括但不限于對(duì)特定用途適銷(xiāo)性或適用性的擔(dān)保,均不包括在內(nèi)。本文檔的目的僅在于幫助讀者使用產(chǎn)品

3、。對(duì)由于使用本文檔任何信息出現(xiàn)的遺漏、損壞或錯(cuò)誤使用產(chǎn)品造成的任何損失,ARM 公司概不負(fù)責(zé)。使用 ARM 一詞時(shí),它表示“ARM 或其任何相應(yīng)的子公司”。保密狀態(tài)本文檔的內(nèi)容是非保密的。根據(jù) ARM 與 ARM 將本文檔交予的參與方的協(xié)議條款,使用、復(fù)制和公開(kāi)本文檔內(nèi)容的權(quán)利可能會(huì)受到許可限制的制約。產(chǎn)品狀態(tài)本文檔的信息是開(kāi)發(fā)的產(chǎn)品的最新信息。網(wǎng)址ii版權(quán)所有 © 2002-2007 ARM Limited。保留所有權(quán)利。ARM DUI 00204HC目錄RealView 編譯工具匯編程序指南前言關(guān)于本手冊(cè) (viii反饋 (xi第1章簡(jiǎn)介1.1關(guān)于 RealView 編譯工具匯編

4、程序 . 1-2第2章編寫(xiě) ARM 匯編語(yǔ)言2.1簡(jiǎn)介 . 2-22.2ARM 體系結(jié)構(gòu)概述 .2-32.3匯編語(yǔ)言模塊的結(jié)構(gòu) . 2-112.4條件執(zhí)行 . 2-172.5將常數(shù)加載到寄存器 . 2-252.6將地址加載到寄存器中 .2-332.7加載和存儲(chǔ)多個(gè)寄存器指令 . 2-392.8使用宏 .2-452.9添加符號(hào)版本 .2-492.10使用框架指令 .2-502.11匯編語(yǔ)言變更 .2-51 ARM DUI 00204HC版權(quán)所有 © 2002-2007 ARM Limited。保留所有權(quán)利。iii第3章匯編程序參考3.1命令語(yǔ)法 .3-23.2源語(yǔ)句行格式 .3-173

5、.3預(yù)定義的寄存器和協(xié)處理器名稱(chēng) .3-183.4內(nèi)置變量和常數(shù) .3-203.5符號(hào) .3-223.6表達(dá)式、文本和運(yùn)算符 . 3-283.7診斷消息 .3-413.8使用 C 預(yù)處理程序 . 3-43第4章ARM 和 Thumb 指令4.1指令匯總 .4-24.2Thumb 中的指令寬度選擇 . 4-94.3內(nèi)存訪問(wèn)指令 .4-114.4通用數(shù)據(jù)處理指令 . 4-404.5乘法指令 .4-724.6飽和指令 .4-934.7并行指令 .4-984.8組合和分離指令 .4-1064.9跳轉(zhuǎn)指令 .4-1144.10協(xié)處理器指令 .4-1204.11其他指令 .4-1284.12ThumbEE

6、 指令 .4-1444.13偽指令 . 4-148第5章NEON 和 VFP 編程5.1擴(kuò)展寄存器組 .5-75.2條件代碼 .5-95.3一般信息 .5-115.4NEON 和 VFP 共享的指令 . 5-185.5NEON 邏輯運(yùn)算和比較運(yùn)算 . 5-255.6NEON 通用數(shù)據(jù)處理指令 .5-335.7NEON 移位指令 . 5-445.8NEON 通用算術(shù)指令 . 5-505.9NEON 乘法指令 . 5-635.10NEON 加載/存儲(chǔ)元素和結(jié)構(gòu)指令 . 5-685.11NEON 和 VFP 偽指令 . 5-765.12NEON 和 VFP 系統(tǒng)寄存器 . 5-825.13清零模式

7、.5-865.14VFP 指令 .5-885.15VFP 向量模式 .5-97第6章無(wú)線 MMX 技術(shù)指令6.1簡(jiǎn)介 .6-26.2ARM 對(duì)無(wú)線 MMX 技術(shù)的支持 .6-36.3無(wú)線 MMX 指令 . 6-7 iv版權(quán)所有 © 2002-2007 ARM Limited。保留所有權(quán)利。ARM DUI 00204HC第7章指令參考7.1按字母順序排列的指令表 .7-27.2符號(hào)定義指令 .7-47.3數(shù)據(jù)定義指令 .7-177.4匯編控制指令 .7-317.5Frame 指令 .7-407.6報(bào)告指令 . 7-557.7指令集和語(yǔ)法選擇指令 .7-607.8其他指令 . 7-62

8、ARM DUI 00204HC版權(quán)所有 © 2002-2007 ARM Limited。保留所有權(quán)利。v前言本前言介紹RealView 編譯工具匯編程序指南。它包含以下幾節(jié): 第viii頁(yè)的關(guān)于本手冊(cè) 第xi頁(yè)的反饋前言關(guān)于本手冊(cè)本手冊(cè)提供有關(guān)RealView®編譯工具 (RVCT 匯編程序的指導(dǎo)和參考信息。這包括armasm、獨(dú)立的匯編程序以及 C 和 C+ 編譯器中的嵌入式匯編程序。本手冊(cè)介紹匯編程序的命令行選項(xiàng),可供匯編語(yǔ)言程序員使用的匯編語(yǔ)言助記符、偽指令、宏和指令。適用對(duì)象本手冊(cè)是為所有使用 RVCT 編寫(xiě)應(yīng)用程序的開(kāi)發(fā)者編寫(xiě)的。本手冊(cè)假定您是一位有經(jīng)驗(yàn)的軟件開(kāi)發(fā)

9、人員,并且熟悉 RealView 編譯工具要點(diǎn)指南中所述的 ARM開(kāi)發(fā)工具。使用本手冊(cè)本手冊(cè)由以下章節(jié)組成:第 1 章簡(jiǎn)介本章簡(jiǎn)要介紹了 RVCT 匯編程序和匯編語(yǔ)言。第 2 章編寫(xiě) ARM 匯編語(yǔ)言本章提供了可幫助您使用 ARM 匯編程序和匯編語(yǔ)言的指導(dǎo)信息。第 3 章匯編程序參考本章介紹了有關(guān) ARM 匯編程序提供的語(yǔ)法和結(jié)構(gòu)的參考材料。第 4 章ARM 和 Thumb 指令本章介紹了有關(guān) ARM 和 Thumb 指令集的參考材料,涵蓋了Thumb-2 和以前版本的 Thumb 以及 Thumb-2EE。第 5 章NEON 和 VFP 編程本章介紹了有關(guān) ARM NEON技術(shù)和 VFP 指

10、令集的參考材料。本章還介紹了其他 VFP 特定的匯編語(yǔ)言信息。第 6 章無(wú)線 MMX 技術(shù)指令本章介紹了有關(guān) ARM 對(duì)無(wú)線 MMX技術(shù)的支持的參考材料。第 7 章指令參考本章介紹了有關(guān)可在 ARM 匯編程序armasm中使用的匯編程序指令的參考材料。前言本手冊(cè)假定 ARM 軟件安裝在缺省位置,例如,在 Windows 中的路徑為volume:Program FilesARM。引用路徑名時(shí),假定安裝位置為install_directory,例如install_directoryDocumentation.。如果將 ARM 軟件安裝在其他位置,則可能需要更改此位置。印刷約定本手冊(cè)使用了以下印刷約

11、定:monospace表示可以從鍵盤(pán)輸入的文本,如命令、文件和程序名以及源代碼。monospace表示允許的命令或選項(xiàng)縮寫(xiě)??芍惠斎胂聞澗€標(biāo)記的文本,無(wú)需輸入命令或選項(xiàng)的全名。monospace italic表示此處的命令和函數(shù)的自變量可用特定值代替。等寬粗體表示在示例代碼以外使用的語(yǔ)言關(guān)鍵字。斜體突出顯示重要注釋、介紹特殊術(shù)語(yǔ)以及表示內(nèi)部交叉引用和引文。粗體突出顯示界面元素,如菜單名稱(chēng)。有時(shí)候也用在描述性列表中以示強(qiáng)調(diào),以及表示 ARM 處理器信號(hào)名稱(chēng)。更多參考出版物本部分列出了 ARM 公司和第三方發(fā)布的、可提供有關(guān) ARM 系列處理器開(kāi)發(fā)代碼的附加信息的出版物。ARM 將定期對(duì)其文檔進(jìn)行

12、更新和更正。有關(guān)最新勘誤表、附錄和 ARM 常見(jiàn)問(wèn)ARM 公司出版物本手冊(cè)包含的參考信息專(zhuān)用于隨 RVCT 提供的開(kāi)發(fā)工具。該套件中包含的其他出版物有: RVCT 要點(diǎn)指南 (ARM DUI 0202 RVCT 編譯器用戶指南 (ARM DUI 0205 RVCT 編譯器參考指南 (ARM DUI 0348 RVCT 庫(kù)和浮點(diǎn)支持指南 (ARM DUI 0349 RVCT 鏈接器和實(shí)用程序指南 (ARM DUI 0206前言 RVCT 開(kāi)發(fā)指南 (ARM DUI 0203 NEON 向量化編譯器指南 (ARMDUI 0350 RealView Development Suite 詞匯表 (AR

13、M DUI 0324。有關(guān)基本標(biāo)準(zhǔn)、軟件接口以及 ARM 支持的標(biāo)準(zhǔn)的完整信息,請(qǐng)參閱install_directoryDocumentationSpecifications.。此外,有關(guān)與 ARM 產(chǎn)品相關(guān)的特定信息,請(qǐng)參閱下列文檔: ARM6-M 體系結(jié)構(gòu)參考手冊(cè) (ARM DDI 0419 ARM7-M 體系結(jié)構(gòu)參考手冊(cè) (ARM DDI 0403 ARM 體系結(jié)構(gòu)參考手冊(cè),ARMv7-A 和 ARMv7-R 版 (ARM DDI 0406 ARM 體系結(jié)構(gòu)參考手冊(cè) Thumb®-2 補(bǔ)充 (ARM DDI 0308 ARM 體系結(jié)構(gòu)參考手冊(cè)安全擴(kuò)展補(bǔ)充 (ARM DDI 03

14、09 ARM 體系結(jié)構(gòu)參考手冊(cè) Thumb-2 執(zhí)行環(huán)境補(bǔ)充 (ARM DDI 0397 ARM 體系結(jié)構(gòu)參考手冊(cè)高級(jí) SIMD 擴(kuò)展和 VFPv3 補(bǔ)充 (ARM DDI 0268 ARM 參考外圍設(shè)備規(guī)范 (ARM DDI 0062 您的硬件設(shè)備的 ARM 數(shù)據(jù)表或技術(shù)參考手冊(cè)。其他出版物有關(guān) ARM 體系結(jié)構(gòu)的介紹,請(qǐng)參閱 Steve Furber 編著的ARM 片上系統(tǒng)體系結(jié)構(gòu)(第 2 版,2000。Addison Wesley,ISBN 0-201-67519-6。有關(guān) Intel®無(wú)線 MMX技術(shù)的完整信息,請(qǐng)參閱無(wú)線 MMX 技術(shù)開(kāi)發(fā)指南前言反饋ARM 公司歡迎用戶就

15、RealView 編譯工具及其文檔提供反饋意見(jiàn)。RealView 編譯工具的反饋信息如果您有關(guān)于 RVCT 的任何問(wèn)題,請(qǐng)與您的供應(yīng)商聯(lián)系。為便于他們快速提供有用的答復(fù),請(qǐng)?zhí)峁? 您的姓名和公司 產(chǎn)品序列號(hào) 您所用版本的詳細(xì)信息 您運(yùn)行的平臺(tái)的詳細(xì)信息,如硬件平臺(tái)、操作系統(tǒng)類(lèi)型和版本 能重現(xiàn)問(wèn)題的一小段獨(dú)立代碼示例 您預(yù)期發(fā)生和實(shí)際發(fā)生的情況的詳細(xì)說(shuō)明 您使用的命令,包括所有命令行選項(xiàng) 能說(shuō)明問(wèn)題的示例輸出 工具的版本字符串,包括版本號(hào)和內(nèi)部版本號(hào)關(guān)于本手冊(cè)的反饋如果您發(fā)現(xiàn)本手冊(cè)有任何錯(cuò)誤或遺漏之處,請(qǐng)發(fā)送電子郵件到errata,并提供: 文檔標(biāo)題 文檔編號(hào) 您有疑問(wèn)的頁(yè)碼 問(wèn)題的簡(jiǎn)要說(shuō)明我們

16、還歡迎您對(duì)需要增加和改進(jìn)之處提出建議。前言第 1 章簡(jiǎn)介本章介紹隨RealView®編譯工具 (RVCT 提供的匯編程序。它包含以下一節(jié): 第1-2頁(yè)的關(guān)于 RealView 編譯工具匯編程序簡(jiǎn)介1.1關(guān)于 RealView 編譯工具匯編程序RVCT 具有: 獨(dú)立的匯編程序armasm,本指南將予以介紹。 內(nèi)置到 C 和 C+ 編譯器中的優(yōu)化內(nèi)聯(lián)匯編程序和非優(yōu)化嵌入式匯編程序。這些匯編程序使用相同的匯編指令語(yǔ)法,但是不在本指南中進(jìn)行介紹。有關(guān)內(nèi)聯(lián)和嵌入式匯編程序的詳細(xì)信息,請(qǐng)參閱RealView 編譯工具開(kāi)發(fā)指南中的混合使用 C、C+ 和匯編語(yǔ)言一章。如果要將 RVCT 的舊版本升級(jí)

17、,請(qǐng)閱讀 RealView 編譯工具要點(diǎn)指南,以獲得此版本的新功能以及改進(jìn)提高的相關(guān)信息。當(dāng)前的 ARM/Thumb 匯編語(yǔ)言已經(jīng)取代了較早版本的 ARM 和 Thumb 匯編語(yǔ)言。使用當(dāng)前語(yǔ)言編寫(xiě)的代碼可針對(duì) ARM、Thumb 或 Thumb-2 進(jìn)行匯編。如果使用了不可用的指令,匯編程序會(huì)報(bào)錯(cuò)。匯編程序支持 Intel®無(wú)線 MMX技術(shù)指令,可匯編代碼以運(yùn)行于 PXA270 處理器上。此處理器實(shí)現(xiàn)具有 MMX 擴(kuò)展的 ARMv5TE 體系結(jié)構(gòu)。 RVCT 支持無(wú)線MMX 技術(shù)控制和單指令多數(shù)據(jù) (SIMD 數(shù)據(jù)寄存器,并且包含了用于無(wú)線MMX 技術(shù)開(kāi)發(fā)的新指令。此外,它還改善了

18、對(duì)加載和存儲(chǔ)指令的支持。有關(guān)RVCT 中無(wú)線 MMX 技術(shù)支持的信息,請(qǐng)參閱第 6 章無(wú)線 MMX 技術(shù)指令。ARM NEON技術(shù)是 ARMv7 體系結(jié)構(gòu)的可選組件。 NEON 是針對(duì)高級(jí)媒體和信號(hào)處理應(yīng)用程序以及嵌入式處理器的 64/128 位混合 SIMD 技術(shù)。它是作為 ARM內(nèi)核的一部分實(shí)現(xiàn)的,但有自己的執(zhí)行管道和寄存器組,該寄存器組不同于ARM 核心寄存器組。NEON 支持整數(shù)、定點(diǎn)和單精度浮點(diǎn) SIMD 運(yùn)算。這些指令在 ARM 和 Thumb-2中都可用。有關(guān) NEON 的詳細(xì)信息,請(qǐng)參閱第 5 章NEON 和 VFP 編程。簡(jiǎn)介本手冊(cè)引用了 RealView Developme

19、nt Suite 隨附的示例,這些示例位于主示例目錄install_directoryRVDSExamples中。有關(guān)所提供示例的匯總,請(qǐng)參閱RealView Development Suite 入門(mén)指南。簡(jiǎn)介第 2 章編寫(xiě) ARM 匯編語(yǔ)言本章介紹了編寫(xiě) ARM®匯編語(yǔ)言的一般原則,其中包含以下幾節(jié): 第2-2頁(yè)的簡(jiǎn)介 第2-3頁(yè)的ARM 體系結(jié)構(gòu)概述 第2-11頁(yè)的匯編語(yǔ)言模塊的結(jié)構(gòu) 第2-17頁(yè)的條件執(zhí)行 第2-25頁(yè)的將常數(shù)加載到寄存器 第2-33頁(yè)的將地址加載到寄存器中 第2-39頁(yè)的加載和存儲(chǔ)多個(gè)寄存器指令 第2-45頁(yè)的使用宏 第2-49頁(yè)的添加符號(hào)版本 第2-50頁(yè)的

20、使用框架指令 第2-51頁(yè)的匯編語(yǔ)言變更編寫(xiě) ARM 匯編語(yǔ)言2.1簡(jiǎn)介本章提供了如何編寫(xiě) ARM 匯編語(yǔ)言模塊的實(shí)用基礎(chǔ)知識(shí)。同時(shí)還提供了與ARM 匯編程序 (armasm 所提供的工具有關(guān)的信息。本章未提供 ARM、Thumb®-2、Thumb、NEON、VFP 或 MMX 指令集的詳細(xì)描述。有關(guān)這些信息,請(qǐng)參閱: 第 4 章ARM 和 Thumb 指令 第 5 章NEON 和 VFP 編程 第 6 章無(wú)線 MMX 技術(shù)指令。有關(guān)詳細(xì)信息,請(qǐng)參閱ARM 體系結(jié)構(gòu)參考手冊(cè)。為了給熟悉 RVCT2.1 及更早版本中支持的 ARM 和 Thumb 匯編語(yǔ)言的編程人員提供方便,本章專(zhuān)門(mén)在

21、一節(jié)中概括了這些版本與 ARM 匯編語(yǔ)言的最新版本之間的區(qū)別。請(qǐng)參閱第2-51頁(yè)的匯編語(yǔ)言變更。本章包含許多代碼示例,其中許多示例位于install_directoryRVDSExamples.asm目錄中。若要生成并鏈接匯編語(yǔ)言文件,請(qǐng)按照下列步驟操作:1. 在指令提示符處鍵入armasm -debug filename.s,以匯編該文件并生成調(diào)試表。2. 鍵入armlink filename.o -o filename以鏈接該目標(biāo)文件并生成一個(gè) ELF 可執(zhí)行映像。若要執(zhí)行和調(diào)試該映像,請(qǐng)使用適當(dāng)?shù)恼{(diào)試目標(biāo)(如RealView 指令集模擬器(RVISS,將該映像加載到兼容的調(diào)試器(如 Re

22、alView Debugger中。若要查看匯編程序如何轉(zhuǎn)換源代碼,請(qǐng)輸入:fromelf -c filename.o有關(guān)armlink和fromelf的詳細(xì)信息,請(qǐng)參閱RealView 編譯工具鏈接器和實(shí)用程序指南。編寫(xiě) ARM 匯編語(yǔ)言2.2ARM 體系結(jié)構(gòu)概述本節(jié)簡(jiǎn)要概述了 ARM 體系結(jié)構(gòu)。ARM 處理器是典型的 RISC 處理器,因?yàn)樗鼈儓?zhí)行的是加載/存儲(chǔ)體系結(jié)構(gòu)。只有加載和存儲(chǔ)指令才能訪問(wèn)內(nèi)存。數(shù)據(jù)處理指令只操作寄存器的內(nèi)容。本節(jié)介紹了以下內(nèi)容: 體系機(jī)構(gòu)的版本 ARM、Thumb、Thumb-2 和 Thumb-2EE 指令集 第2-4頁(yè)的ARM、Thumb 和 ThumbEE 狀

23、態(tài) 第2-5頁(yè)的處理器模式 第2-6頁(yè)的寄存器 第2-8頁(yè)的指令集概述 第2-9頁(yè)的指令功能。本手冊(cè)中的信息和示例假定您使用的是執(zhí)行 ARMv4 或更高版本體系結(jié)構(gòu)的處理器。所有這些處理器都具有 32 位尋址范圍。有關(guān)各種體系結(jié)構(gòu)版本的詳細(xì)信息,請(qǐng)參閱ARM 體系結(jié)構(gòu)參考手冊(cè)。ARM 指令集是一組提供一整套運(yùn)算的 32 位指令。ARMv4T 及更高版本定義了一個(gè)名為 Thumb 指令集的 16 位指令集。 32 位 ARM指令的多數(shù)功能都可用,但有些運(yùn)算需要與其他指令結(jié)合使用。 Thumb 指令集提供了更好的代碼密度,但會(huì)損害性能。ARMv6T2 定義了 Thumb-2,它與 Thumb 指令

24、集相比有了重大改進(jìn)。 Thumb-2 提供了幾乎與 ARM 指令集完全相同的功能。它同時(shí)具有 16 位和 32 位指令,并可同時(shí)實(shí)現(xiàn)類(lèi)似于 ARM 的性能以及類(lèi)似于 Thumb 的代碼密度。在 ARMv6 及更高版本中,所有 ARM 和 Thumb 指令都是小端的。在 ARMv6T2及更高版本中,所有 Thumb-2 指令獲取也都是小端的。ARMv7 定義了 Thumb-2 執(zhí)行環(huán)境 (Thumb-2EE。 Thumb-2EE 指令集基于的是Thumb-2,但與后者相比有一些變更和補(bǔ)充,從而可以更好地適用于動(dòng)態(tài)生成的代碼,即就在執(zhí)行前或執(zhí)行期間在設(shè)備上編譯的代碼。編寫(xiě) ARM 匯編語(yǔ)言有關(guān)詳細(xì)

25、信息,請(qǐng)參閱第2-8頁(yè)的指令集概述。正執(zhí)行 ARM 指令的處理器在ARM 狀態(tài)下工作。正執(zhí)行 Thumb 指令的處理器在Thumb 狀態(tài)下工作。在其中一種狀態(tài)下工作的處理器不能執(zhí)行不同指令集內(nèi)的指令。例如,處于ARM 狀態(tài)下的處理器不能執(zhí)行 Thumb 指令,而處于 Thumb 狀態(tài)下的處理器不能執(zhí)行 ARM 指令。您必須確保處理器始終不會(huì)收到與當(dāng)前狀態(tài)不相符的指令集的指令。大多數(shù) ARM 處理器始終在 ARM 狀態(tài)下開(kāi)始執(zhí)行代碼。但也有些處理器只能執(zhí)行 Thumb 代碼,或者可以配置為在 Thumb 狀態(tài)下開(kāi)始執(zhí)行代碼。ThumbEE 引入了一種新的指令集狀態(tài):ThumbEE 狀態(tài)。在這種狀

26、態(tài)下,根據(jù)ThumbEE 指令集內(nèi)的定義執(zhí)行指令。更改狀態(tài)每種指令集都包含用于更改處理器狀態(tài)的指令。若要在 ARM 和 Thumb 狀態(tài)之間進(jìn)行轉(zhuǎn)換,必須切換匯編程序模式,以便使用ARM或THUMB指令生成正確的操作代碼。若要生成 Thumb-2EE 代碼,請(qǐng)使用THUMBX。(使用CODE32和CODE16的匯編程序代碼仍可由匯編程序進(jìn)行匯編,但建議您對(duì)新代碼使用ARM和THUMB。有關(guān)詳細(xì)信息,請(qǐng)參閱第7-60頁(yè)的指令集和語(yǔ)法選擇指令。ARM 處理器支持不同的處理器模式,具體取決于體系結(jié)構(gòu)的版本(請(qǐng)參閱表2-1。注意ARMv7-M不支持其他 ARM 處理器所采用的模式。本節(jié)不適用于 ARM

27、v7-M。表2-1 ARM 處理器模式處理器模式體系結(jié)構(gòu)模式編號(hào)用戶全部0b10000FIQ - 快速中斷請(qǐng)求全部0b10001IRQ - 中斷請(qǐng)求全部0b10010超級(jí)用戶全部0b10011中止全部0b10111未定義全部0b11011系統(tǒng)ARMv4 及更高版本0b11111監(jiān)控僅限安全擴(kuò)展0b10110除用戶模式之外,其他所有模式統(tǒng)稱(chēng)為特權(quán)模式。它們具有對(duì)系統(tǒng)資源的完全訪問(wèn)權(quán)限,并可隨意更改模式。需要任務(wù)保護(hù)的應(yīng)用程序通常在用戶模式下執(zhí)行。有些嵌入式應(yīng)用程序可能完全運(yùn)行在超級(jí)用戶模式或系統(tǒng)模式下。進(jìn)入除用戶模式之外的模式是為了處理異?;蛟L問(wèn)特許資源(請(qǐng)參閱RealView編譯工具開(kāi)發(fā)指南中

28、的第 6 章處理處理器異常。ARM 處理器擁有 37 個(gè)寄存器。這些寄存器按部分重疊組方式加以排列。每個(gè)處理器模式都有一個(gè)不同的寄存器組。編組的寄存器為處理處理器異常和特權(quán)操作提供了快速的上下文切換。有關(guān)如何對(duì)寄存器進(jìn)行編組的詳細(xì)描述,請(qǐng)參閱ARM 體系結(jié)構(gòu)參考手冊(cè)。提供了下列寄存器: 三十個(gè) 32 位通用寄存器 程序計(jì)數(shù)器 (pc 第2-7頁(yè)的應(yīng)用程序狀態(tài)寄存器 (APSR 第2-7頁(yè)的保存的程序狀態(tài)寄存器 (SPSR。三十個(gè) 32 位通用寄存器在任一時(shí)刻都存在十五個(gè)通用寄存器,即 r0、r1. r13、r14,具體取決于當(dāng)前的處理器模式。r13 是堆棧指針 (sp。 C 和 C+ 編譯器始

29、終將 r13 用作堆棧指針。在 Thumb-2中,sp 被嚴(yán)格定義為堆棧指針,因此如果使用 r13,則在堆棧操作中用處不大的許多指令會(huì)產(chǎn)生不可預(yù)測(cè)的結(jié)果。建議您不要將 sp 用作通用寄存器。在用戶模式下,r14 被用作鏈接寄存器 (lr,用于存儲(chǔ)調(diào)用子例程時(shí)的返回地址。如果返回地址存儲(chǔ)在堆棧上,則也可將 r14 用作通用寄存器。在異常處理模式下,r14 存放異常的返回地址;如果在一個(gè)異常內(nèi)執(zhí)行子例程調(diào)用,則 r14 存放子例程的返回地址。如果返回地址存儲(chǔ)在堆棧上,則可將 r14 用作通用寄存器。程序計(jì)數(shù)器 (pc程序計(jì)數(shù)器被當(dāng)作 r15(或 pc來(lái)加以訪問(wèn)。它在 ARM 狀態(tài)下以一個(gè)字(四字節(jié)

30、為增量,在 Thumb 狀態(tài)下則按指令的大小執(zhí)行。跳轉(zhuǎn)指令將目標(biāo)地址加載到 pc 中。您也可以使用數(shù)據(jù)操作指令來(lái)直接加載 PC。例如,若要從子例程返回,可以使用以下指令將鏈接寄存器復(fù)制到 PC 中:MOV pc,lr在執(zhí)行期間,r15 (pc 不包含當(dāng)前執(zhí)行的指令的地址。在 ARM 狀態(tài)下,當(dāng)前執(zhí)行的指令的地址通常是 pc-8,而在 Thumb 狀態(tài)下通常是 pc-4。應(yīng)用程序狀態(tài)寄存器 (APSRAPSR 存放算術(shù)邏輯單元 (ALU 狀態(tài)標(biāo)記的副本。這些標(biāo)記用于確定是否執(zhí)行條件指令。有關(guān)詳細(xì)信息,請(qǐng)參閱第2-17頁(yè)的條件執(zhí)行。在 ARMv5TE 和 ARMv6 及更高版本中,APSR 還存放

31、 Q 標(biāo)記(請(qǐng)參閱第2-18頁(yè)的ALU 狀態(tài)標(biāo)記。在 ARMv6 及更高版本中,APSR 還存放 GE 標(biāo)記(請(qǐng)參閱第4-99頁(yè)的并行加法和減法??稍谒心J较率褂肕SR和MRS指令訪問(wèn)這些標(biāo)記。有關(guān)詳細(xì)信息,請(qǐng)參閱第4-131頁(yè)的MRS和第4-133頁(yè)的MSR。當(dāng)前程序狀態(tài)寄存器 (CPSRCPSR 存放下列內(nèi)容:標(biāo)記 APSR 當(dāng)前處理器模式 中斷禁用標(biāo)記。在支持 Thumb 或 Jazelle®的處理器上,CPSR 還存放當(dāng)前處理器狀態(tài)(ARM、Thumb、ThumbEE 或 Jazelle。在 ARMv6T2 及更高版本中,Thumb-2 為 CPSR 引入了新的狀態(tài)位。IT

32、指令使用這些位來(lái)控制 IT 塊的條件執(zhí)行(請(qǐng)參閱第4-68頁(yè)的IT。在所有模式下均可訪問(wèn)的標(biāo)記只有 APSR 標(biāo)記。對(duì)于 CPSR 的其余位,只能在特權(quán)模式下使用MSR和MRS指令訪問(wèn)它們。有關(guān)詳細(xì)信息,請(qǐng)參閱第4-131頁(yè)的MRS和第4-133頁(yè)的MSR。保存的程序狀態(tài)寄存器 (SPSR當(dāng)發(fā)生異常時(shí),使用 SPSR 來(lái)存儲(chǔ) CPSR。在每種異常處理模式下,可訪問(wèn)一個(gè)SPSR。用戶模式和系統(tǒng)模式?jīng)]有 SPSR,因?yàn)槎卟皇钱惓L幚砟J?。有關(guān)詳細(xì)信息,請(qǐng)參閱RealView 編譯工具開(kāi)發(fā)指南中的第 6 章處理處理器異常。所有 ARM 指令的長(zhǎng)度都是 32 位。這些指令是按字對(duì)齊方式存儲(chǔ)的,因此在

33、ARM 狀態(tài)下,指令地址的兩個(gè)最低有效位始終為零。Thumb、Thumb-2 和 Thumb-2EE 指令的長(zhǎng)度是 16 位或 32 位。這些指令按半字對(duì)齊方式存儲(chǔ)。其中有些指令使用最低有效位來(lái)確定跳轉(zhuǎn)到的目標(biāo)代碼是 Thumb代碼還是 ARM 代碼。在引入 Thumb-2 之前,Thumb 指令集只是 ARM 指令集功能的一個(gè)限定的子集。幾乎所有 Thumb 指令都是 16 位。 Thumb-2 指令集的功能與 ARM 指令集的功能幾乎相同。有關(guān) ARM 和 Thumb 指令語(yǔ)法的詳細(xì)信息,請(qǐng)參閱第 4 章ARM 和 Thumb 指令。ARM 和 Thumb 指令可劃分為多個(gè)功能組: 跳轉(zhuǎn)指

34、令 數(shù)據(jù)處理指令 第2-9頁(yè)的寄存器加載和存儲(chǔ)指令 第2-9頁(yè)的多個(gè)寄存器加載和存儲(chǔ)指令 第2-9頁(yè)的狀態(tài)寄存器訪問(wèn)指令 第2-9頁(yè)的協(xié)處理器指令。跳轉(zhuǎn)指令此類(lèi)指令用于: 向后跳轉(zhuǎn)以構(gòu)成循環(huán) 在條件結(jié)構(gòu)中向前跳轉(zhuǎn) 跳轉(zhuǎn)到子例程 在 ARM 狀態(tài)和 Thumb 狀態(tài)之間轉(zhuǎn)換處理器狀態(tài)。數(shù)據(jù)處理指令此類(lèi)指令用于對(duì)通用寄存器執(zhí)行運(yùn)算。它們可對(duì)兩個(gè)寄存器的內(nèi)容執(zhí)行加法、減法或按位邏輯等運(yùn)算,并將結(jié)果存放到第三個(gè)寄存器中。此外,它們還可以對(duì)單個(gè)寄存器中的值執(zhí)行運(yùn)算,或者對(duì)寄存器中的值與指令中提供的常數(shù)(立即值執(zhí)行運(yùn)算。長(zhǎng)乘指令用兩個(gè)寄存器提供 64 位的結(jié)果。寄存器加載和存儲(chǔ)指令此類(lèi)指令用于從內(nèi)存加載單

35、個(gè)寄存器的值,或者在內(nèi)存中存儲(chǔ)單個(gè)寄存器的值。它們可加載或存儲(chǔ) 32 位字、16 位半字或 8 位無(wú)符號(hào)字節(jié)。可以用符號(hào)或零擴(kuò)展字節(jié)和半字加載以填充 32 位寄存器。此外,還定義了幾個(gè)可將 64 位雙字值加載或存儲(chǔ)到兩個(gè) 32 位寄存器的指令。多個(gè)寄存器加載和存儲(chǔ)指令此類(lèi)指令可從內(nèi)存加載通用寄存器的任何子集,或者在內(nèi)存中存儲(chǔ)這樣的子集。有關(guān)此類(lèi)指令的詳細(xì)描述,請(qǐng)參閱第2-39頁(yè)的加載和存儲(chǔ)多個(gè)寄存器指令。狀態(tài)寄存器訪問(wèn)指令此類(lèi)指令向通用寄存器或者從通用寄存器往外移動(dòng)狀態(tài)寄存器的內(nèi)容。協(xié)處理器指令此類(lèi)指令支持一種用于擴(kuò)展 ARM 體系結(jié)構(gòu)的通用方式。本節(jié)包括以下小節(jié): 條件執(zhí)行 第2-10頁(yè)的寄

36、存器訪問(wèn) 第2-10頁(yè)的訪問(wèn)內(nèi)聯(lián)的滾筒式移位器。條件執(zhí)行可以根據(jù) APSR 中 ALU 狀態(tài)標(biāo)記的值,有條件地執(zhí)行幾乎所有 ARM 指令。雖然不需要使用跳轉(zhuǎn)來(lái)跳過(guò)條件指令,但當(dāng)一系列指令依賴(lài)于相同的條件時(shí),這樣做的效果會(huì)更好。在沒(méi)有 Thumb-2 的處理器上的 Thumb 狀態(tài)下,條件跳轉(zhuǎn)是提供條件執(zhí)行的唯一機(jī)制。大多數(shù)數(shù)據(jù)處理指令會(huì)更新 ALU 標(biāo)記。通常不能指定指令是否更新 ALU標(biāo)記的狀態(tài)。Thumb-2 通過(guò)使用IT (If-Then 指令和同樣的 ALU 標(biāo)記為條件執(zhí)行提供了另一種機(jī)制。IT是一個(gè) 16 位指令,最多可為后面的四個(gè)指令提供條件執(zhí)行。此外,還有其他幾個(gè)指令為條件執(zhí)行提

37、供了其他機(jī)制。在 ARM 和 Thumb-2 代碼中,可以指定數(shù)據(jù)處理指令是否更新 ALU 標(biāo)記??梢允褂靡粋€(gè)指令所設(shè)置的標(biāo)記來(lái)控制其他指令的執(zhí)行,即使在它們之間有很多非標(biāo)記設(shè)置指令也是如此。有關(guān)詳細(xì)描述,請(qǐng)參閱第2-17頁(yè)的條件執(zhí)行。寄存器訪問(wèn)在 ARM 狀態(tài)下,所有指令都可訪問(wèn) r0 到 r14,并且大多數(shù)指令也可訪問(wèn) r15 (pc。MRS和MSR指令可將狀態(tài)寄存器的內(nèi)容移到通用寄存器中,在通用寄存器中可以用普通的數(shù)據(jù)處理操作來(lái)處理這些內(nèi)容。有關(guān)詳細(xì)信息,請(qǐng)參閱第4-131頁(yè)的MRS和第4-133頁(yè)的MSR。Thumb-2 處理器上的 Thumb 狀態(tài)提供了同樣的功能,但會(huì)禁止一些對(duì) r

38、13 和 r15 的無(wú)用訪問(wèn)。在沒(méi)有 Thumb-2 的處理器上的 Thumb 狀態(tài)下,大多數(shù)指令只能訪問(wèn) r0 到 r7。只有少數(shù)指令能夠訪問(wèn) r8 到 r15。寄存器 r0 到 r7 稱(chēng)為低位寄存器。寄存器 r8 到r15 稱(chēng)為高位寄存器。訪問(wèn)內(nèi)聯(lián)的滾筒式移位器ARM 算術(shù)邏輯單元具有一個(gè) 32 位滾筒式移位器,可執(zhí)行移位和循環(huán)操作。對(duì)于所有 ARM 和 Thumb-2 數(shù)據(jù)處理指令和單寄存器數(shù)據(jù)傳送指令的第二個(gè)操作數(shù),可以在執(zhí)行數(shù)據(jù)處理或數(shù)據(jù)傳送之前,將其作為指令的一部分執(zhí)行移位操作。此操作支持(但不限于: 比例尋址 乘以一個(gè)常數(shù) 構(gòu)造常數(shù)。有關(guān)使用滾筒式移位器生成常數(shù)的詳細(xì)信息,請(qǐng)參閱

39、第2-25頁(yè)的將常數(shù)加載到寄存器。Thumb-2 指令與 ARM 指令對(duì)滾筒式移位器的訪問(wèn)方式幾乎相同。16 位 Thumb 指令集只允許使用單獨(dú)的指令來(lái)訪問(wèn)滾筒式移位器。2.3匯編語(yǔ)言模塊的結(jié)構(gòu)匯編語(yǔ)言是指 ARM 匯編程序 (armasm 進(jìn)行分析并匯編生成對(duì)象代碼的語(yǔ)言。缺省情況下,匯編程序應(yīng)使用 ARM 匯編語(yǔ)言編寫(xiě)源代碼。armasm支持用舊版本的 ARM 匯編語(yǔ)言編寫(xiě)的源代碼。在這種情況下,它無(wú)需獲得相應(yīng)的通知。armasm還可支持用舊版本的 Thumb 匯編語(yǔ)言編寫(xiě)的源代碼。在這種情況下,必須在源代碼中使用 -16命令行選項(xiàng)或CODE16指令通知armasm。舊版本的 Thumb

40、匯編語(yǔ)言不支持 Thumb-2 指令。本節(jié)介紹了以下內(nèi)容: 匯編語(yǔ)言源文件的編排 第2-14頁(yè)的ARM 匯編語(yǔ)言模塊的示例 第2-16頁(yè)的調(diào)用子例程。匯編語(yǔ)言的源代碼行的一般格式是:label instruction|directive|pseudo-instruction ;comment注意即使沒(méi)有標(biāo)簽,指令、偽指令和指令前面也必須使用空格或制表符等留出空白。源代碼行的所有三部分都是可選的。使用空行可使代碼更具可讀性。大小寫(xiě)規(guī)則指令助記符、指令和符號(hào)寄存器名稱(chēng)可以用大寫(xiě)或小寫(xiě)編寫(xiě),但不能混合使用大小寫(xiě)。行長(zhǎng)度為使源文件更容易閱讀,可以在行尾放置反斜杠符 (,將較長(zhǎng)的源代碼行拆分為多個(gè)行。反斜杠后面不得有任何其他字符(包括空格和制表符。匯編程序?qū)⒎葱备?行尾序列視為空白。注意不要在帶引號(hào)的字符串內(nèi)使用反斜杠/行尾序列。行長(zhǎng)度的最大值為 4095 個(gè)字符,包括使用反斜杠的任何擴(kuò)展在內(nèi)。標(biāo)簽標(biāo)簽是表示地址的符號(hào)。在匯編期間,將計(jì)算由標(biāo)簽指定的地址。匯編程序計(jì)算標(biāo)簽相對(duì)于定義標(biāo)簽的節(jié)的原點(diǎn)的地址。引用同一節(jié)內(nèi)的標(biāo)簽時(shí)可以使用 pc 加上或減去偏移量。這稱(chēng)為程序相對(duì)尋址。其他節(jié)中標(biāo)簽的地址是在鏈接時(shí)計(jì)算的,此時(shí)鏈接器已在內(nèi)存中為每一節(jié)分配了具體的位置。局

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論