电子烂人 发表于 2024-11-13 10:09

【读书】《RISC-V开放架构设计之道》3.乘法和除法指令集RV32M

<div class='showpostmsg'><p><span style="font-size:16px;">这一篇帖子简单说下RV中的乘除法,RV32M是RISC-V架构中的一个标准扩展指令集,它为RV32I基础整数指令集添加了乘法和除法操作。RV32M扩展包含了一系列用于执行乘法、除法和相关运算的指令,这些指令对于执行算术密集型任务非常有用。乘法和除法指令集(RV32M)作为RV32I的扩展指令集,指令相对较少,如图:</span></p>

<p><span style="font-size:18px;"> &nbsp;</span></p>

<h3>指令格式</h3>

<p>RV32M指令通常使用R型(Register)格式,该格式包含三个寄存器操作数(rs1、rs2和rd),以及一个操作码,用于指示要执行的具体乘法或除法操作。</p>

<p>这个用法我推荐看老狼的帖子:<a href="https://www.cnblogs.com/mikewolf2002/p/9872287.html" target="_blank">https://www.cnblogs.com/mikewolf2002/p/9872287.html</a>写的更详细,我这里不再赘述</p>

<h3>指令列表</h3>

<p><strong>乘法指令</strong></p>

<p>mul rd, rs1, rs2&nbsp; ,用法是寄存器 乘以寄存器 ,乘积写入寄存器x中。</p>

<p>乘法指令有:</p>

<p><code class="hljs">mul</code></p>

<p>:无符号乘法,结果为32位。</p>

<p><code class="hljs">mulh</code></p>

<p>:无符号乘法,结果的高32位。</p>

<p><code class="hljs">mulhsu</code></p>

<p>:一个操作数为无符号,另一个为有符号的乘法,结果的高32位。</p>

<p><code class="hljs">mulhu</code></p>

<p>:两个操作数均为无符号的乘法,结果的高32位。</p>

<p><code class="hljs">mulhusu</code></p>

<p>:32位有符号-无符号乘法,结果为32位。这个比较特殊:<strong>&nbsp;x为无符号数,其他和mulhu相同</strong></p>

<p>&nbsp;</p>

<p><strong>除法指令</strong></p>

<p>div rd, rs1, rs2 ,用法是寄存器 x除以寄存器 x,向零舍入,将这些数视为二进制补码,把商写入 x。</p>

<p>除法指令有:</p>

<p><code class="hljs">div</code></p>

<p>:无符号除法,结果为32位。</p>

<p><code class="hljs">divu</code></p>

<p>:有符号除法,结果为32位。</p>

<p><code class="hljs">rem</code></p>

<p>:无符号除法的余数,结果为32位。</p>

<p><code class="hljs">remu</code></p>

<p>:有符号除法的余数,结果为32位。</p>

<h3>&nbsp;</h3>

<p><span style="font-size:18px;"><strong>结语</strong></span></p>

<p>和ARM不同的是,ARM长久以来只有乘法指令,除法指令到2005年才被添加。乘法指令用于执行快速的硬件乘法操作,这对于数字信号处理、图形处理和其他需要大量乘法的应用至关重要。况且RV32M作为一个扩展指令,可以选择性的添加到RV32I中,这意味着它可以在不需要乘除法操作的场景中省略,以节省硬件资源。</p>

<p>&nbsp;</p>

<p>&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

Jacktang 发表于 2024-11-15 07:44

<p>《RISC-V开放架构设计之道》是本好书</p>
页: [1]
查看完整版本: 【读书】《RISC-V开放架构设计之道》3.乘法和除法指令集RV32M