Array in x86 Assembly

Binary Tree book by OpenGenus

In this article at OpenGenus, we have explained how to implement an Array in x86 Assembly Programming Language. This gives a strong insight on how array function behind the high level programming languages.

Table of contents:

  1. How to implement Array in Assembly?
  2. Array in x86 Assembly Language
  3. Compile and run the code

How to implement Array in Assembly?

We define an array of 5 bytes using DB directive in .data section and initialized the first 5 elements as 10, 20, 30, 40 and 50.

myArray db 10, 20, 30, 40, 50 ; 

We can access an element by loading it to a register. For example, in this assembly code snippet, we loaded the second element into a register using MOV:

mov bl, [myArray + 1] ; 

We can also, modify an array element using MOV by moving the value of a register to a specific array element.

mov [myArray + 3], dl ; 

We used a loop to iteration over the element of the array, loaded each element to a register by incrementing the loop counter. ECX is used as the loop counter which is initialized to 0 and the base address of the array is EBX.

mov ebx, 0 

At the end, exit the program using (understand this part using this article):

; Exit the program mov eax, 1 ; Set EAX to 1 (system call for exit) xor ebx, ebx ; Set EBX to 0 (exit code) int 0x80 ; Invoke the system call 

Array in x86 Assembly Language

Following is the complete assembly code for implementing an array of 5 elements:

section .data myArray db 10, 20, 30, 40, 50 ; Define an array of bytes with 5 elements section .text global _start _start: ; Accessing array elements mov al, [myArray] ; Load the first element of the array into the AL register mov bl, [myArray + 1] ; Load the second element of the array into the BL register mov cl, [myArray + 2] ; Load the third element of the array into the CL register ; Modifying array elements mov [myArray + 3], dl ; Store the contents of DL into the fourth element of the array ; Accessing array elements using a loop mov ecx, 0 ; Set ECX to 0 mov ebx, 0 ; Set EBX to the starting address of the array loop_start: cmp ecx, 5 ; Compare ECX with the length of the array je loop_end ; If ECX equals 5, jump to loop_end mov al, [ebx + ecx] ; Load the current element of the array into AL inc ecx ; Increment ECX jmp loop_start ; Jump to loop_start loop_end: ; Rest of the program ; . ; Exit the program mov eax, 1 ; Set EAX to 1 (system call for exit) xor ebx, ebx ; Set EBX to 0 (exit code) int 0x80 ; Invoke the system call 

Compile and run the code

Save the above code in a file named as array.asm.

To compile the above code in NASM, use the following command:

nasm -f elf64 -o array.o array.asm ld -o array array.o 

The executable is named as array. To run the executable, use the following command:

./array 

With this article at OpenGenus, you must have the complete idea of how to implement an array in x86 Assembly language.

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:

OpenGenus Tech Review Team

— OpenGenus IQ: Learn Algorithms, DL, System Design —

instruction set

Matrix Multiplication in Assembly

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.

Rock Paper Scissors game in Python

In this article at OpenGenus, We will we looking to create a Rock Paper Scissors game in Python.