Skip to content

LA32R汇编编程简介

常用汇编器指示(Assembler Directives)

符号(Symbol)定义相关的汇编器指示

有两个概念间的关系先提示一下:标号(Label)是一种符号(Symbol)。

设置符号类型

.type SSS, @function 表示符号SSS的类型为函数。

.type SSS, @object 表示符号SSS的类型为变量。

设置符号大小

.size VVV, 4 表示变量VVV的大小为4字节。

.size FFF, .-FFF 表示函数FFF的大小为当前位置减去FFF起始位置(即标号FFF所在位置)。

指定符号的地址对齐方式

.align N来指示接下来的数据在目标文件中的地址对齐到2的N次方。例如,

    .align 4
main:

指示将main函数的入口地址对齐到2的4次方即16字节。

指定符号的作用域

当不加任何指定符号作用域的编译提示时,符号的作用域仅限当前汇编文件内。.globl SSS 用于指定符号SSS为全局可见。

指定数据类型

写法 类型
.byte <value>, <value>, ... 字节整数,可定义多个一个字节的数据
.word <value>, <value>, ... 字整数,可定义多个两个字节的数据
.int <value>, <value>, ... 整数,可定义多个四个字节的数据
.rept <repeat time>
<repeat content>
.endr
定义重复的内容,地址连续
.ascii "<string value>" 字符串,定义以非'\0'结尾的字符串
.asciz "<string value>"
.string "<string value>"
字符串,定义以'\0'结尾的字符串

以下3种方式都能定义"Hello World!"字符串,它们是等价的。

.ascii  "Hello World!\0"
.asciz  "Hello World!"
.string "Hello World!"

指定符号数据存放段

.text 指定接下来的内容要放在目标文件的代码段。.data 指定接下来的内容要放在目标文件的数据段。.bss 指定接下来的符号要放在目标文件的BSS段。.rodata 指定接下来的内容要放在目标文件的只读数据段。

以上只是一些常用的汇编器提示,如果想了解更多,可以查阅汇编器手册的第7章。