一个完整的RISC-V汇编程序有多条语句(statement)组成,汇编文件一般由.s结尾(不包含预处理语句,是纯粹的汇编语句)。一条典型的RISC-V汇编语句由3部分组成,分为标签、操作和注释:
[label:] [operation] [comment]
1
label(标号): GNU汇编中,任何以冒号结尾的标识符都被认为是一个标号。标号相当于给一个指令所在的地址起的一个名字。
operation 可以有以下多种类型:
instruction(指令): 直接对应二进制机器指令的字符串,例如add。
pseudo-instruction(伪指令): 一些指令的组合。它并不对应二进制机器指令,只是为了提高编写代码的效率,可以用一条伪指令指示汇编器产生多条实际的指令(instructions),方便程序的使用,例如li。在理解和做法上与自定义的函数类似。
directive(指示/伪操作): 通过类似指令的形式(以“.”开头),通知汇编器如何控制代码的产生等,不对应具体的RISC-V指令,由汇编器自身定义,例如.text、.global、.end、.macro、.endm等。在理解和应用上类似C语言中的#define语句。
macro(宏):采用指示/伪操作 .macro/.endm 自定义的宏,汇编器碰到宏时会自动将宏替换成对应定义的内容。
comment(注释): 常用方式,#开始到当前行结束,也有些汇编器定义;或//开头的注释格式。
下面是一个简单的RISC-V的汇编语言程序:
# fitst RISC-V Assemble Sample
.macro do_nothing
nop
nop
.endm
.text
.global _start
_start:
li x6, 5 # x6 = 5
li x7, 4 # x7 = 4
add x5, x6, x7 # x5 = x6 + x7
do_nothing
stop:
j stop # jump to stop
.end
|