Assembly Language Tutorial Series
A structured, progressive guide to x86-64 Assembly using NASM syntax on Linux.
Each module builds on the previous. Beginners should start at 01 and work forward.
Curriculum Roadmap
Beginner — Foundations
| # |
Topic |
Key Concepts |
| 01 |
Introduction |
What is assembly, why learn it, history |
| 02 |
Computer Architecture |
CPU, memory, buses, fetch-decode-execute |
| 03 |
Number Systems |
Binary, hex, two's complement, endianness |
| 04 |
Environment Setup |
NASM, ld, GDB, project structure |
| 05 |
Registers |
General-purpose, flags, segment registers |
| 06 |
Memory & Addressing |
Sections, addressing modes, LEA vs MOV |
| 07 |
Basic Instructions |
MOV, arithmetic, first programs |
| # |
Topic |
Key Concepts |
| 08 |
Control Flow |
CMP, JMP family, loops, conditions |
| 09 |
Stack & Procedures |
PUSH/POP, CALL/RET, stack frames |
| 10 |
System Calls |
Linux syscall ABI, read/write/exit |
| 11 |
Bitwise Operations |
AND, OR, XOR, shifts, rotates |
| 12 |
Arrays & Strings |
String instructions, REP prefix, buffers |
Advanced — Low-Level Mastery
| # |
Topic |
Key Concepts |
| 13 |
Calling Conventions |
System V AMD64 ABI, cdecl, interop with C |
| 14 |
Floating Point & SIMD |
x87 FPU, SSE, AVX, packed operations |
| 15 |
Inline Assembly |
GCC asm, constraints, mixing C and asm |
| 16 |
Optimization |
Instruction latency, throughput, branch prediction |
Prerequisites
- Basic understanding of any programming language (C is ideal)
- A Linux environment (native, WSL2, or VM)
- Curiosity about how computers actually work
nasm — assembler (converts .asm → .o)
ld — GNU linker (converts .o → ELF binary)
gdb — debugger
objdump — disassembler / inspection tool
strace — trace system calls
Quick Start
# Install tools (Ubuntu/Debian)
sudo apt install nasm binutils gdb
# Assemble and link
nasm -f elf64 hello.asm -o hello.o
ld hello.o -o hello
./hello
Architecture: x86-64 (64-bit)
Syntax: Intel / NASM
OS: Linux (syscall numbers differ on Windows/macOS)