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 汇编 伪操作()的方法
第一步:打开网页:
第二步:找到Documentation 这里,如下图:
看到是2.20
第三步:打开网页
(如果你看到的是2.23或者别的什么,说明文档更新了,把2.20换成更新的版本序号)
第四步:找到Directives这里,这里就是你要找的伪操作,这里面全是介绍,如下图