汇编语言
汇编语言(Assembly Language)是一门“低级”语言。
汇编语言的缺点:
- 难写
- 难读
- 难移植
汇编语言的优点:
- 灵活
- 强大
汇编语言的应用场景:
- 需要直接访问底层硬件的地方
- 需要对性能执行极致优化的地方
汇编语言语法介绍(GNU 版本)
一条完整的 RISC-V 汇编程序由多条语句(statement)组成
一条典型的 RISC-V 汇编语句由 3 部分组成:
1 | [label:] [operation] [comment] |
- label(标号):GNU 汇编中,任何以冒号结尾的标识符都被认为是一个标号。
- operation 可以有以下多种类型:
- instruction(指令):直接对应二进制机器指令的字符串
- pseudo-instruction(伪指令):为了提高编写代码的效率,可以用一条指令指示汇编器产生多条实际的指令(instructions)
- directive(指示/伪操作):通过类似指令的方式(以“.”开头),通知汇编器如何控制代码的产生等,不生成具体的指令
- macro:采用
.macro/.endm
自定义的宏
- comment(注释):常用方式,“#” 从开始到当前行结束
可以这么理解:指令是由机器实现的,伪指令是由汇编器实现的。
一般情况下,一个汇编文件名以 .S
结尾表示需要宏预处理。例如 include 和 define。而以 .s
结尾表示这个文件里是纯粹的汇编语句。
.global
有点类似于 C 中的 extern
,它会把后面指定的东西暴露在外部;.macro/.endm
则有点类似于 C 中的 inline
;
伪指令 nop
的本质是 addi
。