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:
- 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.