嵌入式系统(五):RISC-V4

RV32M是RISC-V的一个扩展,添加了整数乘法和除法指令。乘法指令如mul、mulh等处理32位乘积,除法指令div、divu等执行有符号和无符号除法。浮点扩展32F和32D包含单精度和双精度浮点运算,提供加载、存储、算术及比较指令,增强了处理器性能。这些扩展使得RISC-V处理器能更好地支持嵌入式应用和数学计算。
摘要由CSDN通过智能技术生成

RV32M添加了整数乘法和除法指令

除法指令

  • div、divu: 有符号和无符号整数的除法指令,它们将商放入目标寄存器
  • rem、remu: 将余数写入目标寄存器
  • beqz: 测试除数是否为零

乘法指令

积=被乘数×乘数
积的长度是乘数和被乘数长度的和,将两个32位数相乘得到的是64位乘积

  • mul:要得到整数32位成绩(64位中的低32位)
  • mulh:得到高32位,有符号
  • mulhu:操作数都是无符号数
  • mulhus:一个有符号,一个无符号

mulh和mulhu可以检查乘法的溢出

在一条指令中完成把64位积写入两个32位寄存器的操作会使硬件设计变得复杂,所以RV32M需要两条乘法指令才能都得到一个完整的64位积。

结束语

为了为嵌入式提供最小的RISC-V处理器,乘法和除法被归入RISC-V的第一个可选标志扩展的一部分RV32M。许多RISC-V处理器将包括RV32M。

RV32F和RV32D:单精度和双精度浮点数

浮点寄存器
  • 32F和32D使用32个独立的f寄存器而不是x寄存器

  • 主要原因:处理器在不增加RISC-V之林那个格式中寄存器描述符所占空间的情况下使用两组寄存器来将寄存器容量和带宽是乘2,着可以提高处理器性能

  • 主要影响:必须添加新的指令来加载和存储数据f寄存器,还需要添加新指令用于在x和f寄存器之间传递数据

  • 如果同时支持扩展,则单精度数据仅仅使用f寄存器的低32位,寄存器f0不是硬连线到常量0,而是和所有其他31个f寄存器一样是可变寄存器

在这里插入图片描述

浮点加载,存储和算术指令

  • flw,fld:加载指令
  • fsw fsd:存储指令

他们和lw和sw拥有相同的寻址模式和指令格式

  • 标准运算指令:fadd.s,fadd.s,fsub.s,fsub.d,fmul.s,fmul.d,fdiv.s,fdiv.d
  • 平方根指令:fsqrt.s fsqrt,d
  • 最大值和最小值:fmin.s fmin.d fmax.s fmax.d

这些指令在不适用分支指令进行比较的情况下,将一对源操作数中的较小值或较大值写入目的寄存器

32F和32D没有提供浮点分支指令,而提供了浮点比较指令,这些指令根据两个浮点的比较结果将一个整数寄存器设置为1或0

feq.s ffeq.d flt.s flt.d fle.s fle.d

在这里插入图片描述

浮点转换和搬运

  • 32F和32D支持在32位有符号整数,32位无符号整数,32位浮点和64位浮点之间进行所有组合的转换
  • 32F还提供了将数据从f寄存器(fmv.x.w)移动到x寄存器的指令,以及反方向移动数据的指令(fmv.w.x)

其他浮点指令

在这里插入图片描述

除了有助于数学库中的符号操作,还提供了三种流行的浮点伪指令:
在这里插入图片描述

结束语

IEEE754-2008浮点标准定义了浮点数据类型,计算精度和所需操作。它的广泛流行大大降低了移植浮点数程序的难度。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值