<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM常用匯編指令學(xué)習

ARM常用匯編指令學(xué)習

作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò ) 收藏
以前用ARM的IDE工具,使用的是ARM標準的匯編語(yǔ)言?,F在要使用GNU的工具,當然要了解一點(diǎn)GNU ARM匯編的不同之處。其實(shí)非常的簡(jiǎn)單,瀏覽一下文檔然后再看看程序就完全可以搞定了,或者你硬著(zhù)頭皮看GNU ARM的匯編程序,用不了多少時(shí)間你就就可以無(wú)師自通了。個(gè)人比較健忘,還是把文檔翻譯了一下,算是給自己一個(gè)避免遺忘的理由吧。

ARM匯編語(yǔ)言源程序語(yǔ)句,一般由指令,偽操作,宏指令和偽指令作成.ARM匯編語(yǔ)言的設計基礎是匯編偽指令,匯編偽操作和宏指令.
目前常用的ARM編譯環(huán)境有2種:
ARMASM: ARM公司的IDE中使用了CodeWarrior的編譯器,絕大多數windows下的開(kāi)發(fā)者都在使用這一環(huán)境,完全按照ARM的規定;
GNU ARM ASM: GNU工具的ARM版本,與ARMASM略有不同;
關(guān)于CodeWarriror ARM匯編的書(shū)和文章很多,本文假定你已經(jīng)完全了解ARMASM,這里只說(shuō)明GNU ARM匯編,并針對ARMASM給出說(shuō)明。本文翻譯自:GNU ARM Assembler Quick Reference, 本人水平有限,錯誤難免,轉載隨意,請注明出處。英文原文地址不詳。
GNU ARM 匯編快速入門(mén)

本文引用地址:http://dyxdggzs.com/article/201611/317561.htm

任何匯編行都是如下結構:
[
GNU ARM 匯編中,任何以冒號結尾的都被認為是一個(gè)標簽,而不一定非要在一行的開(kāi)始。下面是一個(gè)簡(jiǎn)單的例子,這段匯編程序定義了一個(gè)"add"的函數,該函數返回兩個(gè)參數的和:
.section .text, “x”
.global add @ give the symbol add external linkage
add:
ADD r0, r0, r1 @ add input arguments
MOV pc, lr @ return from subroutine
@ end of program
GNU ARM匯編偽指令

下面列出了一些GNU ARM匯編偽指令,并給出了相應說(shuō)明。

.ascii “” 在匯編中定義字符串并為之分配存儲空間(與armasm中的DCB功能類(lèi)似)。
.asciz “” 和.ascii類(lèi)似, 但不分配存儲空間。
.balign {, {,} }
以某種排列方式在內存中填充數值。 (該指令與armasm中的ALIGN類(lèi)似)。
power_of_2表示排列方式,其值可為4,8,16或32,單位是byte;
fill_value是要填充的值;
max_padding最大的填充界限,請求填充的bytes數超過(guò)該值,將被忽略。
.byte {,} … 定義一個(gè)或多個(gè)Byte,并為之分配空間(與armasm的DCB類(lèi)似)。
.code 設定指令寬度,16表示Thumb,32表示ARM assembly
(和armasm中的CODE16,CODE32相同)。
.if
.else
.endif
預編譯宏(與armasm中的IF ELSE ENDIF相同)。
.end 匯編文件結束標志,常常省略不用。

.endm 宏結束標志。
.exitm 宏跳出。
.macro {} … {,}
定義一段名為name的宏,arg_xxx為參數。
必須有對應的.endm結尾。
可以使用.exitm從中間跳出宏。(與armasm中的MACRO, MEND, MEXIT相同)。
在使用宏參數時(shí)必須這樣使用:“/”。
例如:
[CODE].macro SHIFTLEFT a, b
.if /b < 0
MOV /a, /a, ASR #-/b
.exitm
.endif
MOV /a, /a, LSL #/b
.endm

.rept 循環(huán)執行.endr前的代碼段number_of_times次。
(與armasm中的WEN相似)

.irp {,} {,} …
循環(huán)執行.endr前的代碼段,param依次取后面給出的值。
在循環(huán)執行的代碼段中必須以“/ ”表示參數。

.endr 結束循環(huán)(與armasm中的WEND相似).
.equ , 為一個(gè)標號賦值,類(lèi)似C中的#define。(與armasm中的EQU相同)
.err 編譯錯誤報告,將引起編譯的終止。
.global 全局聲明標志,這樣聲明的標號將可以被外部使用。(與armasm中的EXPORT相同)。
.hword {,} …
插入一個(gè)16-bit的數據隊列。(與armasm中的DCW相同)
.ifdef 如果 被定義,該快代碼將被編譯。以 .endif結束。
.ifndef 如果 未被定義,該快代碼將被編譯。以 .endif結束。
.include “” 包含文件。(與armasm中的INCLUDE 或者C中的#i nclude一樣)
.req
定義一個(gè)寄存器,.req的左邊是定義的寄存器名,右邊是使用的真正使用的寄存器。
(與armasm中的RN類(lèi)似)
例如:acc .req r0
[CODE].section {,””}
開(kāi)始一個(gè)新的代碼或數據段。.text, 代碼段;.data, 初始化數據段;.bss, 未初始化數據段。
這些段都有缺省的標志(flags),聯(lián)接器可以識別這些標志。(與armasm中的AREA相同)。
下面是ELF格式允許的段標志
<標志> 含義
a 允許段
w 可寫(xiě)段
x 執行段
.set , 變量賦值。(與armasm中的SETA相同)
.space {,}
分配number_of_bytes字節的數據空間,并填充其值為fill_byte,若未指定該值,缺省填充0。
(與armasm中的SPACE功能相同)
.word {,} …
插入一個(gè)32-bit的數據隊列。(與armasm中的DCD功能相同)
幾個(gè)常用的段代號,基本上與編譯器/處理器都沒(méi)有無(wú)關(guān)系(FLAT模式):
.text - 代碼段
.const - 只讀數據段(有些編譯器不使用此段,將只讀數據并入.data段)
.data - 讀寫(xiě)數據段
.bss - 堆
GNU ARM匯編特殊字符和語(yǔ)法
代碼行中的注釋符號: ‘@’
整行注釋符號: ‘#’
語(yǔ)句分離符號: ‘;’
直接操作數前綴: ‘#’ 或 ‘$’
.arm 以arm格式編譯,同code32
.thumb 以thumb格式編譯,同code16
.code16 以thumb格式編譯
.code32 以arm格式編譯
篇后語(yǔ):

更詳細的使用說(shuō)明請參照:ARM Architecture Reference Manual, Addison-Wesley ISBN 0-201-73719-1
譯者:

重要的部分翻譯完成了,本人認為不重要的沒(méi)有翻譯,如force_thumb,寄存器命名等等。


關(guān)鍵詞: ARM匯編指

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>