Pseudo Instruction for Division in MIPS

assembly, division, mips

Solution

To perform integer division you can use `div $t1, $t2, $t3` which will set `$t1` to the integer division of `$t2/$t3`, or `div $t1, $t2, imm` where imm is an immediate.

Likewise, to compute the remainder of integer division, you can use `rem $t1, $t2, $t3` or `rem $t1, $t2, imm`

These pseudoinstructions will basically do a `div $t1, $t2` which stores the results in `LO` and `HI` special registers (for quotient and remainder) and then move those values to the target register by means of `mfhi` and `mflo`.

To perform floating point division you need to use floating point registers $f0 to $f31. Once you have your floating point numbers stored in some of these registers (properly encoded as floating point numbers, e.g. in `$f1` and `$f2`) you issue a `div.s $f0, $f1, $f2` instruction to get into `$f0` the result of `$f1/$f2`. Now, to get the remainder you can subtract the result of the division with the truncation of the result. For example:

     li $a1, 20
     mtc1  $a1, $f1      
     cvt.s.w $f1, $f1    # $f1 = 20
     li $a1, 7
     mtc1  $a1, $f2     
     cvt.s.w $f2, $f2    # $f2 = 7

     div.s $f0, $f1, $f2 # $f0 = 20/7
     trunc.w.s $f3, $f0  
     cvt.s.w $f3, $f3    # $f3 = trunc(20/7)
     sub.s $f4, $f0, $f3 # $f4 = remainder of 20/7

Problem

What is the pseudo instruction for division in MIPS? Like there is a pseudo instruction of multiplication is MIPS "mul" which makes the life a little bit easier. I am using QT Spim. Regards

Original source