×

Search anything:

# Matrix Multiplication in Assembly

#### instruction set

Get this book -> Problems on Array: For Interviews and Competitive Programming

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:

1. Explanation: Matrix Multiplication in Assembly
2. 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.

#### Devansh Biswal

Writer at OG, 3rd year B. Tech student at Veer Surendra Sai University of Technology, Burla. Working hard day and night to get placed at Google.

Improved & Reviewed by:

Matrix Multiplication in Assembly
Share this