这一篇帖子简单说下RV中的乘除法,RV32M是RISC-V架构中的一个标准扩展指令集,它为RV32I基础整数指令集添加了乘法和除法操作。RV32M扩展包含了一系列用于执行乘法、除法和相关运算的指令,这些指令对于执行算术密集型任务非常有用。乘法和除法指令集(RV32M)作为RV32I的扩展指令集,指令相对较少,如图:
指令格式
RV32M指令通常使用R型(Register)格式,该格式包含三个寄存器操作数(rs1、rs2和rd),以及一个操作码,用于指示要执行的具体乘法或除法操作。
这个用法我推荐看老狼的帖子:https://www.cnblogs.com/mikewolf2002/p/9872287.html写的更详细,我这里不再赘述
指令列表
乘法指令
mul rd, rs1, rs2 ,用法是寄存器 [rs2]乘以寄存器 [rs1],乘积写入寄存器x[rd]中。
乘法指令有:
mul
:无符号乘法,结果为32位。
mulh
:无符号乘法,结果的高32位。
mulhsu
:一个操作数为无符号,另一个为有符号的乘法,结果的高32位。
mulhu
:两个操作数均为无符号的乘法,结果的高32位。
mulhusu
:32位有符号-无符号乘法,结果为32位。这个比较特殊: x[rs2]为无符号数,其他和mulhu相同
除法指令
div rd, rs1, rs2 ,用法是寄存器 x[rs1]除以寄存器 x[rs2],向零舍入,将这些数视为二进制补码,把商写入 x[rd]。
除法指令有:
div
:无符号除法,结果为32位。
divu
:有符号除法,结果为32位。
rem
:无符号除法的余数,结果为32位。
remu
:有符号除法的余数,结果为32位。
结语
和ARM不同的是,ARM长久以来只有乘法指令,除法指令到2005年才被添加。乘法指令用于执行快速的硬件乘法操作,这对于数字信号处理、图形处理和其他需要大量乘法的应用至关重要。况且RV32M作为一个扩展指令,可以选择性的添加到RV32I中,这意味着它可以在不需要乘除法操作的场景中省略,以节省硬件资源。