x8-x9,x18-x27寄存器:别名s0-s11,其中s0可用作栈帧指针(FP) x10-x17寄存器:别名a0-a7,在函数调用中传递参数和返回值 系统寄存器 用于系统控制和状态的寄存器,对处理器进行不同的功能配置。其指令编码的Bit[31:20]为csr字段,其中,[11:10]表示读写属性,[9:8]表示允许访问该系统寄存器的处理器模式,[7:0]用...
对 3 位的寄存器寻址(图26 中深色标记部分),其仅限于部分通用寄存器(x8~x15,3'b000对应x8,3'b111 对应 x15)。由表 1 可以看到,x8 ~ x15 都是函数调用时必须用到的寄存器, 临时寄存器没有被包含其中。 (3)如果指令同时涉及源寄存器和目标寄存器,则二者必须相等(如图26 中所示的 CB 格式,尽管在图26 ...
保存寄存器:s0-s11(x8, x9, x18-x27) 参数寄存器:a0-a7(x10-x17) 返回地址寄存器:ra(x1) 注意:不是返回值,call函数的时候的下一条指令 栈指针寄存器:sp(x2) 全局指针寄存器:gp(x3) 线程指针寄存器:tp(x4) 参数传递 前8个参数:通过参数寄存器 a0-a7 传递。 超过8个参数:通过栈传递,超出的参数会依次压...
0011_0011逻辑右移三位,结果为0000_0110 2.U-Type整数寄存器-立即数指令 这里介绍的两条U-type指令中的AUIPC不再是操作通用寄存器(x0-x31),而是对程序计数器(program counter,PC)进行操作。 图5是LUI和AUIPC的机器码格式,将其与I-type的机器码进行比较,可以看到该类型没有rs1和funct3,取而代之的是一个20...
ADD x1, x4, x8 # x1 ← x4 + x8 这条指令将累加寄存器 x4 和 x8 的内容,然后将结果存储在 x1 中。我们需要多少比特来编码,这取决于我们有多少寄存器。RISC-V 和 ARM64 有 32 个寄存器。可以用 5 比特表示数字 32: 2⁵ = 32 因为我们需要指定 3 个不同的寄存器,所以我们需要总共 15 比特 (3×...
第一列中的寄存器名字并不是超级重要,它唯一重要的场景是在RISC-V的Compressed Instruction中。 基本上来说,RISC-V中通常的指令是64bit,但是在Compressed Instruction中指令是16bit。 在Compressed Instruction中我们使用更少的寄存器,也就是x8 - x15寄存器。
另外,将源寄存器 1 和源寄存器 2 对换,则可以从表3 里的最后 4 条指令产 生另外 4 条衍生指令,即 BGT(符号数比较,大于则跳转)、BGTU(无符号数比 较,大于则跳转)、BLE(符号数比较,不大于则跳转)、BLEU(无符号数比较, 不大于则跳转)。 5. 静态跳转预测 ...
title RISC-V CPU 硬件架构示例section 整数寄存器文件 x0: 0, 1 x1: 1, 1 x2: 2, 1 x3: 3, 1 x4: 4, 1 x5: 5, 1 x6: 6, 1 x7: 7, 1 x8: 8, 1 x9: 9, 1 x10: 10, 1 x11: 11, 1 x12: 12, 1 x13: 13, 1
C.ADD x4, x8 # x4 ← x4 + x8 1. RISC-V 汇编程序使用前缀 c. 来指示一条指令应该被汇编程序转换成一个压缩指令。但实际上你不需要去写它。RISC-V 汇编程序将能够在适当的时候选择是压缩指令还是非压缩指令。基本上,压缩指令减少了操作数的数量。三个寄存器操作数将消耗 15 比特,而留给我们指定操作的就...
将0xf000_0000加载进x8寄存器中 opcode为011_0111 rd为5’b01000 immediate[31:12]为1111_0000_0000_0000_0000 其对应的32位机器码为1111_0000_0000_0000_0000_01000_0110111,用16进制化简后得到32’hF000_0437 图6 LUI机器编码格式 [2] 2.2. AUIPC ...