RISC-V指令集手册第二章-RV32I

2.2 基本指令格式

在基本ISA中,有四种核心指令格式(R/I/S/U),如下图:

在所有格式中,RISC-V ISA将源寄存器(rs1和rs2)和目标寄存器(rd)固定在同样的位置,以简化指令译码。在指令中,立即数被打包,朝着最左边可用位的方向,并且是分配好的,以减少硬件复杂度。特别地,所有立即数的符号位总是在指令的第31位,以加速符号扩展电路。

事实上,绝大多数立即数要么很小,要么需要所有的 XLEN 位。我们选择了一种非对称的立即数切分方法(在常规的指令中的低 12 位,加上一条特殊的 load 立即数指令提供高 20 位)来增加常规指令的可用操作码空间。(加载一个 32 位立即数,需要两步:load 指令提供该立即数的高 20 位[31:12],常规指令提供该立即数的低12 位[11:0],最后拼接成一个 32 位立即数)。另外,这些立即数都是符号扩展的(有符号数)。我们并没有观察到使用零扩展(无符号数)带来的好处,并且我们想把 ISA 做得尽可能简单。

2.3 立即数编码变种

基于立即数处理,还有额外两种指令格式变种(B/J),如下图所示。

每个立即数字段被所生成的立即数值中的位的位置(imm[x])标签,而不是在指令的立即数字段中的通常位的位置。上图给出了每一种基本指令格式生成的立即数,并被标签,以显示对应指令位(inst[y])生成了立即数值中的对应位。

RISC-V 指令生成的立即数。用指令的位标注了用于构成立即数的字段。符号扩展总是使用 inst[31]。 

2.4 整数计算指令

整数寄存器-立即数指令

ADDI:将符号扩展的12位立即数加到寄存器rs1上。算术溢出被忽略,将运算结果的低XLEN位写进rd中。ADDI rd,rs1,0用于实现MV rd,rs1汇编语言伪指令。

SLTI(set less than immediate)将数值1放到寄存器rd中,如果寄存器rs1小于符号扩展的立即数(比较时,两者都作为有符号数),否则将0写入rd。

SLTIU与之相似,但是将两者作为无符号数进行比较(也就是说,立即数被首先符号扩展为XLEN位,然后被作为一个无符号数)。注意,SLTIU rd,rs1,1将设置rd为1,如果rs1等于0,否则将rd设置为0(汇编语言伪指令SEQZ rd,rs)。 

ANDI、ORI、XORI是逻辑操作,在寄存器rs1和符号扩展的12位立即数上执行按位与;或;异或操作,并把结果写入rd。注意,XORI rd,rs1,-1在rs1上执行一个按位取反操作(汇编语言伪指令NOT rd,rs)。

被移位常数次,被编码为I类格式的特例。被移位的操作数放在rs1中,移位的次数被编码到I立即数字段的低5位。右移类型被编码到I立即数的一位高位。SLLI是逻辑左移(0被移入低位);SRLI是逻辑右移(0被移入高位);SRAI是算术右移(原来的符号位被复制到空出的 高位中)。 

逻辑右移与算术右移的区别:逻辑右移高位补0,算术右移高位补符号位(正数补0;负数补1)

LUI(load upper immediate)用于构建32位常数,并使用U类格式。LUI将U立即数放到目标寄存器rd的高20位,将rd的低12位填0。

AUIPC(add upper immediate to pc)用于构建pc相对地址,并使用U类格式。AUIPC从20位U立即数构建一个32位偏移量,将其低12位填0,然后将这个偏移量加到pc上,最后将结果写入寄存器rd。

整数寄存器-寄存器操作 

RV32I定义了几种算术R类操作。所有操作都是读取rs1和rs2寄存器作为源操作数,并把结果写入到寄存器rd中。funct7和funct3字段选择了操作的类型。

ADDSUB分别执行加法和减法。溢出被忽略,并且结果的低XLEN位被写入目标寄存器 rd。SLTSLTU分别执行符号数和无符号数的比较,如果rs1<rs2,则将1写入rd,否则将0写入rd。(汇编伪指令:SNEZ rd,rs,被译成SLTU rd,x0,rs,如果rs不为0,则把1写入rd,否则把0写入rd)。

ANDORXOR执行按位逻辑操作,类似于ANDIORIXORI,对应源操作数换成rs1和rs2。

SLLSRLSRA分别执行逻辑左移,逻辑右移,算术右移操作,类似于SLLISRLISRAI,对应源操作数换成rs1和rs2。

NOP 指令 

NOP指令并不改变任何用户可见的状态,除了使得pc向前推进。NOP被编码为ADDI x0,x0,0。 

2.5 控制转移指令

无条件跳转

JAL(jump and link),指令使用了UJ类格式,此处J立即数编码了一个2的倍数的有符号偏移量。这个偏移量被符号扩展,加到pc上,形成跳转目标地址,跳转范围因此达到±1MB。 JAL将跳转指令后面指令的地址(pc+4)保存到寄存器rd中。标准软件调用约定使用寄存器x1来作为返回地址寄存器。 

注:由上图可知,立即数没有[0]位,即2的倍数;至于跳转范围,由于偏移量offset为21位,除去最高位符号位,剩下20位,即2^20=1M,故跳转范围为±1MB。

普通的无条件跳转指令(汇编语言伪指令J)被编码为rd=x0的JAL指令。(注:x0是只读寄存器,无法写入,因此只跳转,不保存pc+4到rd中)。

JALR(jump and link register)使用I类编码。通过将12位有符号I类立即数加上rs1,然后将结果的最低位设置为0,作为目标地址。跳转指令后面指令的地址(pc+4) 保存到寄存器rd中。如果不需要结果,则可以把x0作为目标寄存器。 

JAL指令和JALR指令会产生一个非对齐指令取指异常(address_misaligned),如果目标地址没有对齐到4字节边界。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: RISC-V架构手册是一本介绍RISC-V指令集体系结构的重要参考资料。RISC-V是一种开放的指令集架构,具有可扩展性、灵活性和高效性的特点。 首先,RISC-V架构手册详细介绍了RISC-V指令集中的所有指令,包括常用的算术指令、逻辑指令、存取指令、分支指令等。它不仅列出了每个指令的编码格式和操作码,还详细说明了每个指令的功能和使用方法。这样的信息对于开发RISC-V处理器的工程师来说至关重要。 其次,RISC-V架构手册还介绍了RISC-V处理器的基本结构和中断处理机制。它详细解释了数据通路、控制单元和存储器等组件的连接方式和工作原理。同时,手册还讨论了RISC-V处理器的中断处理流程,包括中断的触发条件、中断处理程序的执行和中断返回等。这对于编写操作系统或者驱动程序的开发者来说非常有帮助。 此外,RISC-V架构手册还包含了关于扩展特性和可选模块的说明。它介绍了如何在RISC-V架构上扩展自定义指令或者功能,以及如何添加可选的模块,如浮点单元、虚拟内存管理等。这样的灵活性使得RISC-V架构非常适合于各种应用领域,从嵌入式系统到超级计算机。 总的来说,RISC-V架构手册是开发人员和研究人员掌握RISC-V指令集和架构设计的重要参考资料。它全面介绍了RISC-V指令集的各个方面,并提供了实现RISC-V处理器的指导。通过学习和理解这本手册,人们可以更好地应用和推广RISC-V架构,推动开源指令集的发展。 ### 回答2: RISC-V(精简指令集计算机-五)架构手册是一份完整的指南,用于描述和解释RISC-V计算机架构的细节和规范。这个手册为开发者和研究人员提供了一个详细的参考,以了解和标准化他们在RISC-V处理器设计和实现方面的工作。 RISC-V架构手册包含多个章节和附录,涵盖了RISC-V指令集的不同方面。它首先介绍了RISC-V的设计原理和目标,比如简洁性、可扩展性和定制化能力。然后,手册详细说明了RISC-V指令集的不同指令格式和编码规则,包括指令解码过程和操作码的定义。 这个手册还涵盖了RISC-V的寄存器和寄存器文件,描述了它们的使用方法和特殊规则。此外,手册还提供了关于异常处理机制和中断处理机制的解释,以及RISC-V中的特权级别和特权模式的详细信息。 RISC-V架构手册还包含了有关内存管理单元(MMU)和虚拟内存系统的信息,说明了RISC-V支持的不同内存访问方式和存储体系结构的细节。此外,手册还提供了有关浮点运算和向量指令集的详细说明以及其使用方法。 除了这些主要内容外,RISC-V架构手册还提供了一些附录,包括指令集的变种和扩展,以及示例代码和编程实例。这些附录为开发者提供了实际应用和开发RISC-V处理器的指导支持。 总之,RISC-V架构手册是一个重要的参考资料,用于理解和使用RISC-V计算机架构。它的详细说明和规范为开发者提供了标准化和统一化的参考,以便设计、实现和优化RISC-V处理器。 ### 回答3: RISC-V架构手册是一本详细介绍RISC-V指令集架构的重要参考资料。RISC-V是一种新兴的开源指令集架构,其优势在于简洁、可扩展和高度灵活。RISC-V架构手册系统地介绍了RISC-V指令集的各种特性和用法。 首先,RISC-V架构手册提供了RISC-V指令集的全面介绍。它详细解释了RISC-V的指令编码方式、寄存器组织、内存管理机制等基本概念。通过学习手册,人们可以了解到RISC-V指令的格式和操作方式,从而能够编写符合RISC-V架构的程序。 其次,RISC-V架构手册系统介绍了RISC-V的扩展指令集RISC-V提供了一种模块化的设计理念,允许用户根据不同的应用需求选择使用不同的指令集扩展。手册详细介绍了RISC-V的各种扩展,如乘法/除法扩展、向量扩展等,并提供了使用这些扩展的示例和指导。 另外,RISC-V架构手册还介绍了RISC-V的异常处理和中断机制。这些机制对于系统安全和稳定运行非常重要。手册详细解释了异常和中断的分类、处理流程以及相关的指令和寄存器。通过学习手册,人们可以了解到如何在RISC-V架构中设计有效的异常处理和中断控制机制。 最后,RISC-V架构手册还介绍了RISC-V的特殊指令和特殊寄存器。这些特殊指令和寄存器常用于系统级编程和性能优化。手册提供了这些指令和寄存器的详细说明和使用方法,帮助人们充分发挥RISC-V架构的优势。 综上所述,RISC-V架构手册是学习和理解RISC-V指令集架构的重要工具。通过研读手册,人们可以掌握RISC-V的基本概念、指令格式和操作方式,进而能够灵活应用RISC-V的各种扩展和特殊功能,为不同的应用场景设计高效的RISC-V架构系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值