Multiplication and Division Instructions
The following table lists some multiplication and division instructions.
They are with the R-type format and include:
| Multiplication |
Division |
mul rd, rs, rt # rd: destination register
mult rs, rt # rs: 1st source register
multu rs, rt # rt: 2nd source register
|
div rd, rs, rt
divu rd, rs, rt
|
The CPU defines three 32-bit special registers:
pc (program counter),
hi and
lo.
The multiply and divide unit provides its result in
hi and
lo; e.g.,
mult $t3, $t4 # multiply 32-bit quantities in $t3 and $t4,
# and store 64-bit result in registers
# Lo and Hi: (Hi, Lo) = $t3 * $t4
div $t5, $t6 # Lo = $t5 / $t6 (integer quotient)
# Hi = $t5 mod $t6 (remainder)
To fetch the integer 32-bit product, the programmer uses
move from lo (
mflo).
Move from hi (
mfhi) is for fetching the contents of
hi register of the integer 64-bit product.
-
mul rd, rs, rt # 3-operand signed multiply
-
Computes the product of two values.
This instruction puts the 32-bit product of
rs and rt, or the 32-bit product of rs and the immediate value, in the destination register.
-
mult rs, rt # 2-operand signed multiply
multu rs, rt # 2-operand unsigned multiply
-
Computes the 64-bit product of two (un)signed 32-bit signed values.
It multiplies the contents of
rs by the contents of rt and puts the result in the hi and lo registers.
The multiply and divide pseudoinstructions, which make this unit appear to operate on the general registers, save the result in the hi and lo registers after the computation finishes.