Skip to content

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

Intermediate — Control & I/O

# 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

Tools Used

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)