GNU ARM汇编伪操作(Directives) 命令集
本文是原創,轉載請注明出處?
本文鏈接:http://blog.sina.com.cn/s/blog_574d08530100hzie.html
1.符號定義偽操作
操作符????? 語法格式??????????? 說明
.equ?????? .equ?symbol,expr??? 將symbol定義為expr
.set?????? .set?symbol,expr??? 和equ相同(.set=.equ)
.equiv??? ?.equiv symbol????????將symbol定義為expr,若symbol已定義則出錯
.global??? .global symbol?????? 將symbol定義為全局標號
.globl???? .globl symbol??????? 和.global相同(.globl=.global)
.extern??? .extern symbol?????? 聲明symbol為一個外部變量
2.數據定義偽操作
.byte????? .byte expr {,expr}…? 分配一段字節內存單元,并用expr初始化字節內存單元(8bit)
.hword?????.bword expr {,expr}…?分配一段半字內存單元,并用expr初始化半字內存單元 (16bit)
.short???? .short expr {,expr}…?同.hword(16bit)
.word????? .word expr {,expr}…? 分配一段字內存單元,并用expr初始化字內存單元(32bit)
.int?????? .int expr {,expr}…?? 同.word(32bit)
.long????? .long expr {,expr}…? 同.word(32bit)
.ascii? .ascii expr{,expr}…分配一段字符串內存單元,并用expr初始化字符串內存單元(非零結束符)
.asciz??.asciz expr{,expr}…分配一段字符串內存單元,并用expr初始化字符串內存單元(零結束符)
.string??? .string expr {,expr}…? 同.asciz(零結束符)
.quad????? .qua expr {,expr}…?? 分配一段雙字內存單元,并用expr初始化雙字內存單元
.octa????? .octa expr{,expr}…? ?分配一段四字內存單元,并用expr初始化四字內存單元
.float??.float expr{,expr}…? 分配一段字內存單元,并用32位IEEE單精度浮點數expr初始化內存單元
.single?.single expr{,expr}…?同.float?
.double?.double expr{,expr}…?分配一段雙字內存單元,并用64位IEEE雙精度浮點數expr初始化內存單元
.fill?? .fill repeat{,size}{,value} 用size個字節value填充repeat次(size默認為1,value默認為0)
.zero?? .zreo size????????????????? 用0填充size個字節的內存單元
.space? .space size{,value}???????? 用value填充size個字節的內存單元(value默認為0)
.skip?? .space size{,value}???????? 同.space
.ltorg? .ltorg????????????????????? 聲明一個數據緩沖池(literal pool)
3.匯編與反匯編代碼控制偽操作
.arm??????? .arm?????????????????? 定義一下代碼使用ARM指令集編譯
.code 32??? .code 32?????????????? 作用同.arm
.thumb????? .thumb???????????????? 定義一下代碼使用Thumb指令集編譯
.code 16??? .code 16?????????????? 作用同.thumb
.section??? .section expr????????? 定義域中包含的段。expr可以使.text,.data.,.bss
.text???????.text?{subsection}???? 將定義符開始的代碼編譯到代碼段或代碼子段(subsection)
.data?????? .data?{subsection}???? 將定義符開始的代碼編譯到數據段或數據子段(subsection)
.bss??????? .bss?{subsection}????? 將變量存放到.bss段或.bss的子段(subsection)
.align???.align{alignment}{,fill}{,max} 通過用零或指定的數據進行填充來使當前位置與指定邊界對齊
.balign??.balign{alignment}{,fill}{,max}作用同.align
.org??????? .org offset{,expr}?????指定從當前地址加上offset開始存放代碼,并且從當前地址到當前
?????????????????????????????????? 地址加上offset之間的內存單元,用零或指定的數據進行填充
org=origin
其他匯編與反匯編
.end?????? .end?????? 標記匯編文件的結束行,即標記后的代碼不做處理
.err?????? .err?????? 使編譯結果產生錯誤報告
.eject???? .eject???? 在匯編符號列表文件中插入一分頁符
.list????? .list??????.產生匯編列表(從.list到.nolist)
.nolist??? .nolist??? 匯編列表結束處。再次使用.list產生匯編列表
.title???? .title "title_name"? 使用heading作為標題(位于匯編列表文件中文件名下一行)
.sbttl???? .sbttl "title_name"? 使用heading作為子標題(位于.title標題下一行)
.print???? .print string??????? 打印輸出信息到標準輸出
4.預定義控制操作
.if????????????????????????????? 條件判斷語句
.else??????????????????????????? 條件判斷語句
.endif?????????????????????????? 條件結束語句
.macro?????????????????????????? 標識宏定義的開始
.endm??????????????????????????? 標識宏定義的結束
.exitm?????.exitm????????????????中途跳轉出宏
.include???.include "file_name"? 包含文件標識???????????????????
?
參考文章
1.參看更多更詳細的GNU ARM 匯編 偽操作()的方法
? 第一步:打開網頁: http://sourceware.org/binutils/
? 第二步:找到Documentation 這里,如下圖:
?
看到是2.20
?第三步:打開網頁http://sourceware.org/binutils/docs-2.20/as/? (如果你看到的是2.23或者別的什么,說明文檔更新了,把2.20換成更新的版本序號)
?第四步:找到Directives這里,這里就是你要找的偽操作,這里面全是介紹,如下圖
總結
以上是生活随笔為你收集整理的GNU ARM汇编伪操作(Directives) 命令集的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: (原創) 如何讀取/寫入文字檔? (IC
 - 下一篇: Delphi开发环境中应用层网络协议的实