As

Assembly

advanced

The last language between you and the hardware.

Assembly language is a thin layer above raw machine code. Every other programming language compiles down to this. Learning it means seeing exactly what the CPU does — registers, memory, jumps, the stack. It's tedious, unforgiving, and makes everything else feel like a luxury. We teach x86-64 NASM on Linux, the most common flavor for desktop/server work.

Reverse EngineeringExploit DevelopmentOS KernelsEmbedded FirmwarePerformance-Critical Code
0%
0/10 lessons

Setup

We use NASM (Netwide Assembler) with the x86-64 Linux ABI. You need a Linux environment — WSL2 works fine on Windows.

Bash
# Install WSL2 (run in PowerShell as Administrator):
wsl --install
# Restart, then in Ubuntu (WSL2):
sudo apt update && sudo apt install nasm build-essential

# Verify:
nasm --version
ld --version

Lessons

1
How CPUs Actually Work
Before writing a single line, you need a mental model of what the CPU is doing.
2
Hello, World!
In Python, `print('Hello')` is one line that hides a function call, a string obj
3
Registers & Data Movement
`mov` is the most common instruction. It moves data between registers, and betwe
4
Arithmetic & Logic
The CPU can add, subtract, multiply, divide, and do bitwise operations. Every re
5
Control Flow & Loops
Assembly has no if/else, no for loops. It has unconditional jumps (`jmp`) and co
6
The Stack & Functions
The stack is how functions store local variables and return addresses. `push` an
7
System Calls
A syscall is the gate between user space and the kernel. Reading files, writing
8
Calling C Functions from ASM
You don't have to do everything in raw assembly. Linking against libc gives you
9
Mini Project: String Operations
Let's write a small library of string utilities in pure assembly — strlen, strcp
10
x86-64 Assembly Cheatsheet
Registers, instructions, and calling convention on one page.