MUL 指令执行一个 XLEN 位×XLEN 位乘法,并将结果的低 XLEN 位放置
到目标寄存器中。MULH、MULHU、MULHSU 执行相同的乘法,分别针对有符
号
×
有符号、无符号
×
无符号、有符号
×
无符号乘法,只是将运算结果
2×XLEN
位
的高 XLEN 位返回。如果同时需要乘法结果的高位和低位,那么建议的代码顺
序为:MULH[[S]U] rdh,rs1,rs2; MUL rdl,rs1,rs2(源寄存器区分符必须按照同样的
顺序,并且
rdh
不能是
rs1
或者
rs2
)。因此微体系结构可以将这些融合为一个单
DIV 和 DIVU 指令分别执行有符号、无符号的 XLEN 位整数除以 XLEN 位整数除法操
作。REM、REMU 给出了相应除法的余数。如果同时需要商和余数,那么建议的
代码顺序为:DIV[U] rdq,rs1,rs2; REM[U] rdr,rs1,rs2(rdq 不能是 rs1 或者 rs2)。
因此微体系结构可以将这些融合为一个单一的除法操作,而不是执行两次分开的
除以零和除法溢出的语义如下图所示。除以零,结果商的所有位被置为 1,
也即是说,对于无符号除法来说,商是
2XLEN-1
,对于有符号除法来说,商是
-1
。
除以零,结果的余数等于被除数。有符号除法溢出仅当用最小的负整数,
-2XLEN-1,除以-1 时,才会出现。有符号除法溢出的商等于被除数,余数等于
评论0
最新资源