×

Search anything:

Matrix Multiplication in Assembly

Internship at OpenGenus

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.

Matrix Multiplication in Assembly
Share this