Assembly Tutorial
Introduction to Assembly
Assembly language is a low-level programming language that is specific to a computer architecture. It provides a way to write instructions that the computer's processor can execute directly. Assembly language is often used for performance-critical applications and for interacting with hardware directly.
Basic Structure of an Assembly Program
An assembly program typically consists of three main sections: data, bss, and text.
- Data section: This section is used for declaring initialized data or constants.
- BSS section: This section is used for declaring variables.
- Text section: This section contains the actual code that will be executed.
section .data
msg db 'Hello, World!',0
section .bss
res resb 1
section .text
global _start
_start:
; Code goes here
Registers
Registers are small storage locations within the CPU that are used to perform operations and store intermediate results. Commonly used registers in x86 assembly include:
- EAX: Accumulator register
- EBX: Base register
- ECX: Counter register
- EDX: Data register
- ESI: Source index for string operations
- EDI: Destination index for string operations
- EBP: Base pointer for stack frames
- ESP: Stack pointer
Basic Instructions
Assembly language instructions are used to perform operations on data and control the flow of the program. Here are some basic instructions:
- MOV: Move data from one location to another
- ADD: Add two values
- SUB: Subtract one value from another
- MUL: Multiply two values
- DIV: Divide one value by another
- PUSH: Push a value onto the stack
- POP: Pop a value off the stack
section .data
num1 dd 10
num2 dd 20
result dd 0
section .text
global _start
_start:
mov eax, [num1]
add eax, [num2]
mov [result], eax
; Exit the program
mov eax, 1
int 0x80
Compilation and Execution
To compile and execute an assembly program, you need an assembler and a linker. Here is an example using NASM (Netwide Assembler) and GCC (GNU Compiler Collection) on a Unix-based system:
# Assemble the program
nasm -f elf64 program.asm
# Link the object file to create an executable
gcc -o program program.o
# Run the executable
./program
Example Program: Hello World
Here is a complete example of a "Hello, World!" program in assembly language:
section .data
msg db 'Hello, World!',0
section .text
global _start
_start:
; Write the message to the screen
mov eax, 4
mov ebx, 1
mov ecx, msg
mov edx, 13
int 0x80
; Exit the program
mov eax, 1
xor ebx, ebx
int 0x80
To compile and run this program, use the following commands:
# Assemble the program
nasm -f elf32 hello.asm
# Link the object file to create an executable
ld -m elf_i386 -s -o hello hello.o
# Run the executable
./hello
