**Indian Technical Authorship Contest**starts on 1st July 2023. Stay tuned.

In this article at OpenGenus, we have explained how to implement Matrix Multiplication in Assembly. We have provided the complete assembly code to multiply 2 3x3 matrices as well.

**Table of contents**:

- Explanation: Matrix Multiplication in Assembly
- Code for Matrix Multiplication in Assembly

## Explanation: Matrix Multiplication in Assembly

The main components of Matrix Multiplication in Assembly are:

- m, n and p are constants set to 3 representing the size of the input matrices (3x3 and 3x3)
- The multiplication is performed by MUL op which multiplies AL register with an operand and stores the result in AX register.
- The ADD op is used to add the results of the dot product of a row and column and save it in the output matrix.
- INT op is used to write the output matrix to the standard output and exit the program.

## Code: Matrix Multiplication in Assembly

Following is the complete assembly code to perform Matrix Multiplication (with descriptive comment for each line of code):

```
; Declare variables and constants
section .data
; Input matrices
matrix1: times 3 db 1, 2, 3, 4, 5, 6, 7, 8, 9
matrix2: times 3 db 1, 0, 0, 0, 1, 0, 0, 0, 1
; Output matrix
result: times 9 db 0
; Constants
m equ 3 ; Number of rows in matrices
n equ 3 ; Number of columns in matrices
p equ 3 ; Number of columns in matrix2
section .text
global _start
_start:
; Load address of matrices into registers
mov esi, matrix1 ; Load address of matrix1 into esi
mov edi, matrix2 ; Load address of matrix2 into edi
mov ebx, result ; Load address of result matrix into ebx
; Initialize loop counters
mov ecx, m ; Outer loop counter
mov edx, n ; Middle loop counter
xor ebp, ebp ; Inner loop counter
; Perform matrix multiplication
outer_loop:
; Initialize sum to zero
xor eax, eax
middle_loop:
; Load elements of matrices
mov al, [esi + ebp] ; Load element from matrix1 into al
mov dl, [edi + ebp * p] ; Load element from matrix2 into dl
; Multiply and accumulate sum
mul dl ; Multiply al and dl
add [ebx + ebp], al ; Add result to corresponding element in result matrix
; Increment inner loop counter
inc ebp
; Check if inner loop counter has reached its limit
cmp ebp, edx
jl middle_loop ; Jump to middle_loop if ebp < edx
; Increment outer loop counters
add esi, n ; Move to next row in matrix1
add ebx, p ; Move to next row in result matrix
; Check if outer loop counter has reached its limit
dec ecx
jg outer_loop ; Jump to outer_loop if ecx > 0
; Print result matrix
mov eax, 4 ; System call for write
mov ebx, 1 ; File descriptor for standard output
mov ecx, result ; Address of result matrix
mov edx, m * p ; Number of bytes to write
int 0x80 ; Call kernel to write to standard output
; Exit program
mov eax, 1 ; System call for exit
xor ebx, ebx ; Exit status
int 0x80 ; Call kernel to exit program
```

With this article at OpenGenus, you must have the complete idea of how to do Matrix Multiplication in Assembly.