J-format 指令
J型指令只有 jal 一条, 其含义为 Jump and link
格式为 jal rd label 即将PC + 4的值存入rd(通常为ra), 并将PC的值设为PC + label
其二进制格式为:

其立即数为20位, 因此可以跳转到 [PC - 1 MiB, PC + 1 MiB] 这个范围内的任意 2 字节对齐的地址。
U-format 指令
lui(Load Upper Immediate) - 加载高位立即数- 指令含义:
lui rd, immediate - 其完成的具体操作:
- 将
immediate放入rd的高20位 - 将
rd的低20位清零.
- 将
- 指令含义:
我们如果要完成向某寄存器加载32位立即数, 那么要完成的是:
- 用
lui设置高20位 - 用
addi设置低12位
注意, addi的12位立即数是有符号数, 因此如果要加载的32位立即数的第11位为1, 那么lui 的立即数需要加1来补偿.
auipc(Add Upper Immediate to PC)- 指令含义: 将高位立即数加到pc上
auipc rd, imm - 其完成的具体操作:
- 将立即数左移20位
- 将立即数和
PC相加 - 将结果存入
rd
- 指令含义: 将高位立即数加到pc上
同样, 如果要加载32位地址, 要把lui的立即数 +1 补偿.
原子化
有指令 lr.w, sc.w, 其用处分别为尝试读入, 尝试写入.
考虑题目: 
setmax:
loop:
lr.w x5, x10
bge x5, x11, end
sc.w x6, x11, x10
bne x6, 0, loop
end:
过程调用
过程调用应当做以下几件事:
func:
addi sp, sp, -16
sw ra, 0(sp)
sw x10, 4(sp)
jal ra, func2
lw ra, 0(sp)
lw x10, 4(sp)
addi sp, sp, 16
jalr x0, 0(ra)
在函数开头开栈帧, 保存自己应当保存的寄存器. 在函数结尾恢复栈帧.