版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、ARM匯編語言 ARM匯編語言源程序語句,一般由指令,偽操作,宏指令和偽指令作成.ARM匯編語言的設(shè)計基礎(chǔ)是匯編偽指令,匯編偽操作和宏指令. 偽操作,是ARM匯編語言程序里的一些特殊的指令助記符,其作用主要是為完成匯編程序做各種準備工作,在源程序運行匯編程序處理,而不是在計算機運行期間有機器執(zhí)行.也就是說,這些偽操作只是匯編過程中起作用,一旦匯編結(jié)束,偽操作的使命也就隨之消失. 宏指令,是一段獨立的程序代碼,可以插在程序中,它通過偽操作來定義,宏在被使用之前必須提前定義好,宏之間可以互相調(diào)用,也可自己遞歸調(diào)用.通過直接書寫宏名來使用宏.并本具宏指令的格式輸入輸出參數(shù).宏定義本身不產(chǎn)生代碼,只是
2、在調(diào)用它時把宏體插入到原程序中.宏與C語言中的子函數(shù)形參和實參的調(diào)用相似,調(diào)用宏時通過實際的指令來 代替宏體實現(xiàn)相關(guān)的一段代碼,但宏的調(diào)用與子程序的調(diào)用有本質(zhì)的區(qū)別,既宏并不會節(jié)省程序的空間,其優(yōu)點是簡化程序代碼,提高程序的可讀性以及宏內(nèi)容可以同步修改. 偽操作,宏指令一般與編譯程序有關(guān),因此ARM匯編語言的偽操作,宏指令在不同的編譯環(huán)境下有不同的編寫形式和規(guī)則. 偽指令也是ARM匯編語言程序里的特殊助記符,也不在處理器運行期間由機器執(zhí)行,他們在匯編時將被合適的機器指令代替成ARM或Thumb指令,從而實現(xiàn)真正的指令操作. 目前常用的ARM編譯環(huán)境有2種. 1. ADS/SDT IDE:ARM
3、公司開發(fā),使用了CodeWarrior公司的編譯器. 2. 集成了GNU開發(fā)工具的IDE開發(fā)環(huán)境;它由GNU的匯編器as,交叉匯編器gcc和連接器id組成.ADS編譯環(huán)境下的ARM偽操作和宏指令,可參考北航出版社的ARM微控制器基礎(chǔ)與實踐(周立功)這里主要講述ARM GNU常用匯編語言4 ARM GNU常用匯編語言介紹4.1 ARM GNU常用匯編偽指令介紹1. abort.abort: 停止匯編.align absexpr1,absexpr2:以某種對齊方式,在未使用的存儲區(qū)域填充值. 第一個值表示對齊方式,4, 8,16或32. 第二個表達式值表示填充的值.2. if.else.endif
4、.if.else.endif: 支持條件預編譯3. include.include file: 包含指定的頭文件, 可以把一個匯編常量定義放在頭文件中.4. m symbol, length:在bss段申請一段命名空間,該段空間的名稱叫symbol, 長度為length. Ld連接器在連接會為它留出空間.5. data.data subsection: 說明接下來的定義歸屬于subsection數(shù)據(jù)段.6. equ.equ symbol, expression: 把某一個符號(symbol)定義成某一個值(expression).該指令并不分配空間.7. global.glob
5、al symbol: 定義一個全局符號, 通常是為ld使用.8. ascii.ascii string: 定義一個字符串并為之分配空間.9. byte.byte expressions: 定義一個字節(jié), 并為之分配空間.10. short.short expressions: 定義一個短整型, 并為之分配空間.11. expressions: 定義一個整型,并為之分配空間.12 long.long expressions: 定義一個長整型, 并為之分配空間.13 word.word expressions: 定義一個字,并為之分配空間, 4bytes.14. macro/end
6、m.macro: 定義一段宏代碼, .macro表示代碼的開始, .endm表示代碼的結(jié)束.15. reqname .req register name: 為寄存器定義一個別名.16. code.code 16|32: 指定指令代碼產(chǎn)生的長度, 16表示Thumb指令, 32表示ARM指令.17. ltorg.ltorg: 表示當前往下的定義在歸于當前段,并為之分配空間.4.2 ARM GNU專有符號1. 表示注釋從當前位置到行尾的字符.2. #注釋掉一整行.3. ;新行分隔符.4.3 操作碼1. NOPnop空操作, 相當于MOV r0, r02. LDRldr , = 相當于PC寄存器或其
7、它寄存器的長轉(zhuǎn)移.3.ADRadr 相于PC寄存器或其它寄存器的小范圍轉(zhuǎn)移.ADRLadrl 相于PC寄存器或其寄存器的中范圍轉(zhuǎn)移.5 可執(zhí)行生成說明5.1 lds文件說明5.1.1 主要符號說明 1. OUTPUT_FORMAT(bfdname) 指定輸出可執(zhí)行文件格式. 2. OUTPUT_ARCH(bfdname) 指定輸出可執(zhí)行文件所運行CPU平臺 3. ENTRY(symbol) 指定可執(zhí)行文件的入口段 5.1.2 段定義說明 1. 段定義格式 SECTIONS . 段名 : 內(nèi)容 . 前言: 以前用ARM的IDE工具,使用的是ARM標準的匯編語言?,F(xiàn)在要使用GNU的工具,當然要了解
8、一點GNU ARM匯編的不同之處。其實非常的簡單,瀏覽一下文檔然后再看看程序就完全可以搞定了,或者你硬著頭皮看GNU ARM的匯編程序,用不了多少時間你就就可以無師自通了。個人比較健忘,還是把文檔翻譯了一下,算是給自己一個避免遺忘的理由吧。 ARM匯編語言源程序語句,一般由指令,偽操作,宏指令和偽指令作成.ARM匯編語言的設(shè)計基礎(chǔ)是匯編偽指令,匯編偽操作和宏指令. 目前常用的ARM編譯環(huán)境有2種:ARMASM: ARM公司的IDE中使用了CodeWarrior的編譯器,絕大多數(shù)windows下的開發(fā)者都在使用這一環(huán)境,完全按照ARM的規(guī)定; GNU ARM ASM: GNU工具的ARM版本,與
9、ARMASM略有不同; 關(guān)于CodeWarriror ARM匯編的書和文章很多,本文假定你已經(jīng)完全了解ARMASM,這里只說明GNU ARM匯編,并針對ARMASM給出說明。本文翻譯自:GNU ARM Assembler Quick Reference, 本人水平有限,錯誤難免,轉(zhuǎn)載隨意,請注明出處。英文原文地址不詳。 GNU ARM 匯編快速入門任何匯編行都是如下結(jié)構(gòu):: comment: 注釋GNU ARM 匯編中,任何以冒號結(jié)尾的都被認為是一個標簽,而不一定非要在一行的開始。下面是一個簡單的例子,這段匯編程序定義了一個add的函數(shù),該函數(shù)返回兩個參數(shù)的和:.section .text,
10、“x”.global add give the symbol add external linkageadd:ADD r0, r0, r1 add input argumentsMOV pc, lr return from subroutine end of programGNU ARM匯編偽指令下面列出了一些GNU ARM匯編偽指令,并給出了相應(yīng)說明。.ascii “” 在匯編中定義字符串并為之分配存儲空間(與armasm中的DCB功能類似)。 .asciz “” 和.ascii類似, 但不分配存儲空間。.balign , , 以某種排列方式在內(nèi)存中填充數(shù)值。 (該指令與armasm中的AL
11、IGN類似)。power_of_2表示排列方式,其值可為4,8,16或32,單位是byte; fill_value是要填充的值; max_padding最大的填充界限,請求填充的bytes數(shù)超過該值,將被忽略。.byte , 定義一個或多個Byte,并為之分配空間(與armasm的DCB類似)。 .code 設(shè)定指令寬度,16表示Thumb,32表示ARM assembly (和armasm中的CODE16,CODE32相同)。.if .else .endif 預編譯宏(與armasm中的IF ELSE ENDIF相同)。 .end 匯編文件結(jié)束標志,常常省略不用。 .endm 宏結(jié)束標志。
12、.exitm 宏跳出。 .macro arg_1 , , 定義一段名為name的宏,arg_xxx為參數(shù)。必須有對應(yīng)的.endm結(jié)尾。可以使用.exitm從中間跳出宏。(與armasm中的MACRO, MEND, MEXIT相同)。 在使用宏參數(shù)時必須這樣使用:“”。例如: CODE.macro SHIFTLEFT a, b.if b 0MOV a, a, ASR #-b.exitm.endifMOV a, a, LSL #b.endm.rept 循環(huán)執(zhí)行.endr前的代碼段number_of_times次。(與armasm中的WEN相似).irp , , 循環(huán)執(zhí)行.endr前的代碼段,par
13、am依次取后面給出的值。在循環(huán)執(zhí)行的代碼段中必須以“ ”表示參數(shù)。.endr 結(jié)束循環(huán)(與armasm中的WEND相似). .equ , 為一個標號賦值,類似C中的#define。(與armasm中的EQU相同).err 編譯錯誤報告,將引起編譯的終止。.global 全局聲明標志,這樣聲明的標號將可以被外部使用。(與armasm中的EXPORT相同)。.hword , 插入一個16-bit的數(shù)據(jù)隊列。(與armasm中的DCW相同).ifdef 如果 被定義,該快代碼將被編譯。以 .endif結(jié)束。.ifndef 如果 未被定義,該快代碼將被編譯。以 .endif結(jié)束。.include “”
14、 包含文件。(與armasm中的INCLUDE 或者C中的i nclude一樣) .req 定義一個寄存器,.req的左邊是定義的寄存器名,右邊是使用的真正使用的寄存器。(與armasm中的RN類似)例如:acc .req r0CODE.section ,”開始一個新的代碼或數(shù)據(jù)段。.text, 代碼段;.data, 初始化數(shù)據(jù)段;.bss, 未初始化數(shù)據(jù)段。 這些段都有缺省的標志(flags),聯(lián)接器可以識別這些標志。(與armasm中的AREA相同)。下面是ELF格式允許的段標志 含義a 允許段w 可寫段x 執(zhí)行段.set , 變量賦值。(與armasm中的SETA相同).space ,分配number_of_bytes字節(jié)的數(shù)據(jù)空間,并填充其值為fill_byte,若未指定該值,缺省填充0。(與armasm中的SPACE功能相同).word , 插入一個32-bit的數(shù)據(jù)隊列。(與armasm中的DCD功能相
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東理工學院《中西跨文化交際》2023-2024學年第一學期期末試卷
- 廣東警官學院《材料化學實驗B》2023-2024學年第一學期期末試卷
- 廣東機電職業(yè)技術(shù)學院《中學化學教學綜合技能訓練》2023-2024學年第一學期期末試卷
- 廣東工程職業(yè)技術(shù)學院《數(shù)字化圖像處理Photoshop》2023-2024學年第一學期期末試卷
- 廣東第二師范學院《建筑施工CAD》2023-2024學年第一學期期末試卷
- 廣東財貿(mào)職業(yè)學院《建筑設(shè)計4》2023-2024學年第一學期期末試卷
- 《泌尿系統(tǒng)疾病診治》課件
- 《落落的微笑》課件
- 廣東碧桂園職業(yè)學院《電視節(jié)目播音主持》2023-2024學年第一學期期末試卷
- 廣安職業(yè)技術(shù)學院《設(shè)計基礎(chǔ)理論》2023-2024學年第一學期期末試卷
- 親子牧場可行性報告
- 人教版七年級初一生物上冊導學案(全冊)
- 奇瑞車展策劃方案
- 檔案館業(yè)務(wù)管理制度
- 春節(jié)期間健康飲食知識講座
- 新概念英語第一冊Lesson-67-68練習題
- 2024年杭州市能源集團招聘筆試參考題庫含答案解析
- 2022年10月全國自考英語(一)真題試卷含答案
- 數(shù)字孿生應(yīng)用技術(shù)基礎(chǔ)知識考試題庫(600題)
- 企業(yè)融資盡調(diào)報告
- 貴州省貴陽市花溪區(qū)2022-2023學年四年級上學期語文期末試卷
評論
0/150
提交評論