title: How do I implement multiplication and division in MIPS assembly without using the built in instructions?
body: <p>Ok, here is the problem. I had to write a MIPS program that got 2 input numbers from the user. Then, I had to write a code that would output the product, quotient and remainder for the 2 numbers entered by the user. </p>
  
  <p>Now, that was pretty straight forward. However, I didnt realize that we could NOT use the multiply and divide operands in the program. Now I dont know what to do because I am confused on how to do it without the multiply and division operands. I only used it twice in the whole program, it works fine but my professor wont accept it and now im getting sad. Any help would be appreciated. Thank you</p>
  
  <p>Here is my code</p>
  
  <pre><code># Given positive integers a and b, output a/b and a%b.
    .data
  str1: .asciiz "Enter a: "
  str2: .asciiz "Enter b: "
  str3: .asciiz "a/b = "
  str4: .asciiz "a%b = "
  str5: .asciiz "a*b = "
  newline: .asciiz "\n"
    .text
  
  main: li   $v0, 4            # system call code for print_string
    la   $a0, str1         # address of str1
    syscall                # print str1
  
  #get the first number from user, put it into $s0
  
  li   $v0, 5            # system call code for read_int
    syscall                # read an integer into $v0 from console
    add  $s0, $v0, $zero   # copy $v0 into $s0 (a)
  
  
  #read print_string for str2
  li   $v0, 4            # system call code for print_string
    la   $a0, str2         # address of str1
    syscall                # print str1
  
  # get second number from user, put it into $t1  
  li  $v0, 5      #load syscall for read_int
  syscall         #make the syscall
  move $s1, $v0       #move the number read into $s1(b)
  
  #DO THE CALCULATIONS................................................
  div $s0, $s1        #diving $s0 by $s1
  mflo    $t0         #storing value of lo(quotient) in
                  #register $t0
  mfhi    $t1         #storing value of hi(remainder) in
                  #register $t1
  
  mult $s0, $s1
  mflo $t2
  
  
  li $v0,1
  move $a0, $t2
  syscall
  
  li $v0,4
  la $a0, str5
  syscall
  
  #read print_string for str3
  li   $v0, 4            # system call code for print_string
    la   $a0, str3         # address of str1
    syscall                # print str1   
  
  #print a/b
  li  $v0, 1      #load syscall print_int into $v0
  move $a0, $t0      #move the number to print into $t2
  syscall
  # read print string for str4
  li $v0, 4
      la $a0, str4
      syscall
  # print remainder
  li $v0, 1
  move $a0, $t1
  syscall
  
  #end of program
  li  $v0, 10     #system call code for exit
  syscall
  </code></pre>