汇编语言

汇编语言(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