# MIPS Multiplication: Using MUL, MULT and SLL

* MIPS multiplication* is a little bit tricky as compared to addition and subtraction, but here we will simplify it for you. To learn MIPS multiplication, you must go through the following topics:

*MIPS multiplication uses arithmetic and logical format*, and it can be performed using two **opcode MUL and MULT. **Both opcodes have a little bit difference in operation and syntax. We will discuss in detail below:

Contents

## MIPS Multiplication Using MUL

The following example program describing the functionality of “mul” opcode. *The mul instruction needed three operands registers.*

MUL can be used in three possible ways:

**MULTIPLY REGISTERS(mul $t1,$t2,$t3)**

The above statement is also known as **multiplications with overflow.** Note the **Hi register will be used to store high-order 32 bits, Lo and $t1 to low order 32 bits** of the product of $t2 and $t3*(we can use mfhi to access HI, mflo to access Lo)*

**MULTIPLY 16-bit SIGNED IMMEDIATE(mul $t1,$t2,-200)**

Note** Hi** **register to store high-order 32 bits**, **Lo and $t1 to low order 32 bits** of the product of $t2 and any 16 bit signed immediate*(we can use mfhi to access HI, mflo to access Lo)*

**MULTIPLY 32-bit SIGNED IMMEDIATE(mul $t1,$t2,100021)**

Note** Hi register to store high-order 32 bits, Lo and $t1 to low order 32 bits** of the product of $t2 and any 32 bit signed immediate*(we can use mfhi to access HI, mflo to access Lo)*

### Example Multiplication Program Using MUL

**PROGRAM**

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | .data m: .asciiz "The result of multiplication is: " .text addi $s0, $zero,10 addi $s1, $zero,4 mul $t0, $s0,$s1 li $v0,4 la, $a0,m syscall li $v0,1 add $a0, $zero,$t0 syscall li $v0,10 syscall |

**OUTPUT**

1 | The result of multiplication is: 40 |

**EXPLANATION:**

In the above program, we initialized registers $s0 and $s1 with values 10 and 4. Then we performed multiplication using mul opcode. And at last, we printed the result of the multiplication.

## MIPS Multiplication Using MULT

The following example program describing the functionality of **“mult” opcode.** The *mult instruction needed two operands registers.*

### Example Multiplication Program Using MULT

**PROGRAM**

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | .data n1: .asciiz "Enter the first value: " n2: .asciiz "Enter the second value: " m: .asciiz "The result of multiplication is: " .text li $v0,4 la $a0,n1 syscall li $v0,5 syscall move $t0,$v0 li $v0,4 la $a0,n2 syscall li $v0,5 syscall move $t1,$v0 mult $t0,$t1 mflo $s0 li $v0,1 add $a0, $zero,$s0 syscall li $v0,10 syscall |

**OUTPUT**

1 2 3 | Enter the first number: 4 Enter the second number: 7 THe result of multiplication is: 28 |

**EXPLANATION:**

In the above program, we take two values from the user and then we performed multiplication using** mult instruction**. If we are multiplying two 32-bit number then the result become 64-bit so we need the first 32-bit result that is in lo(first 32 bit). In order to move the result to a register, we used **instruction mflo**.

## MIPS Multiplication Using SLL

**Sll also called shift left logical**. It is the most efficient way to multiply the number in** power of 2.**

### Example Multiplication Program Using SLL

**PROGRAM**

1 2 3 4 5 6 7 8 9 10 11 12 13 | .data .text addi $s0,$zero,2 sll $t0,$s0,1 li $v0,1 move $a0,$t0 syscall li $v0,10 syscall |

**OUTPUT**

1 | 4 |

**EXPLANATION:**

We use shift logical left instruction for multiplication. we have stored the value 2 in the register $t0. In line#6 we performed the logical operation. we have given the value 1, so it will be shifted one time.

State your Queries in the comment box!