M standard extension為整數乘法與除法指令擴充,RV32IM 即為RV32I 指令集加上 M standard extension,RV64IM 即為RV64I 指令集加上 M standard extension,以下所提到的 XLEN-bit在 RV32或 RV64分別是 32-bit與 64-bit,介紹各個指令的用途與格式。
乘法運算 (Multiplication Operations)
MUL
MUL rd, rs1, rs2
將 rs1暫存器與 rs2暫存器做乘法運算,會產生 2 x XLEN-bit 的運算結果,將此結果的最低 XLEN-bit寫入 rd暫存器。MULH/MULHU/MULHSU
mulh/mulhu/mulhsu rd, rs1, rs2
將 rs1暫存器與 rs2暫存器做乘法運算,會產生 2 x XLEN-bit 的運算結果,將此結果的最高 XLEN-bit寫入 rd暫存器。MULH 為 signed x signed,MULHU 為 unsigned x unsigned,MULHSU 為 signed x unsigned。MULW
mulw rd, rs1, rs2
RV64 才會有此道指令,將 rs1暫存器的最低 32-bit與 rs2暫存器的最低 32-bit做乘法運算,並將此結果的最低 32-bit做 sign-extension成 64-bit寫入 rd暫存器。
除法運算 (Division Operations)
DIV/DIVU
div/divu rd, rs1, rs2
將 rs1暫存器與 rs2暫存器做 signed/unsigned 除法運算,結果寫入 rd暫存器。REM/REMU
rem/remu rd, rs1, rs2
將 rs1暫存器與 rs2暫存器做 signed/unsigned 餘數運算,結果寫入 rd暫存器。DIVW/DIVUW
divw/divuw rd, rs1, rs2
RV64 才會有此道指令,將 rs1暫存器的最低 32-bit與 rs2暫存器的最低 32-bit做 signed/unsigned 除法運算,並將此結果做 sign-extension成 64-bit寫入 rd暫存器。REMW/REMUW
remw/remuw rd, rs1, rs2
RV64 才會有此道指令,將 rs1暫存器的最低 32-bit與 rs2暫存器的最低 32-bit做 signed/unsigned 餘數運算,並將此結果做 sign-extension成 64-bit寫入 rd暫存器。