# 编译原理 05 - 目标代码生成

# RISC-V 指令集

image-20230602144012905

精简指令集,精简的含义就是一条指令要么做运算,要么存,取内存。

# 寄存器

RISC-V 有 32 个寄存器,名称分别为 X0,X1...X31

但实际上不会按这些名称来使用,而是按照约定来使用,一些寄存器有专门的用途

image-20230602150421869

X0: zero 寄存器,专门存放数字 0

ra: 存放 return address

pc(X31): program counter

# 指令

li : 加载立即数 li t0,0

add: 加法,有三个操作数: add t5,t3,t4 , t5 = t3+t4

addi: 加法,但有一个操作数是立即数

risc-v 里没有 mov 指令,或者说 mov 指令是一个伪指令,实际上是用 add, target, source, zero 来实现的

在.data 段声明全局变量:

.data:

g: .word 0 想.word 这样的是给汇编器看的,表示占用 4B

数组:

g: .word 0,1,2

字符串:

msg: .string "The result is :" #后面会自动加上 '\0' 不想加就用.ascii

使用全局变量:

la t0, g #la; load address

lw t0, 0 (t0) #lw: load word 这里 0 表示偏移量 并且以字节为单位