Hero roadmap: the whole course on one page

Contents
All 50 lessons
Check yourself: first steps
Check yourself: core machine
Check yourself: memory and syscalls
Check yourself: programmer's toolkit
Check yourself: OS and network
Check yourself: finish
Where to go next

All 50 lessons

All 50 lessons live on the course index as a chapter tree. Each chapter below starts at its first lesson - open it and follow the chain to the end of the chapter:

Check yourself: first steps

Which two registers hold the syscall number and the first argument? (lesson 4, anatomy)

What does global _start do, and what does the linker do without it? (lesson 4, anatomy)

Write the shortest program that exits with status 0. (lesson 4, run)

Check yourself: core machine

Which register views exist for RAX, and what does MOV EAX do to the upper half? (lesson 5, widths)

Why is MOV [mem], [mem] illegal, and how do you work around it? (lesson 6, traps)

Which flags do CMP and TEST set, and why does MOV set none? (lesson 9, setters)

How does LEA rax, [rax+rax*2] multiply by 3 without touching memory? (lesson 14, trick)

Check yourself: memory and syscalls

Why does a .bss buffer cost nothing in the file? (lesson 15, bss)

How do you detect a failed syscall, and what range do error codes live in? (lesson 16, errors)

What is in RDX:RAX after a one-operand MUL? (lesson 17, muldiv)

What is the red zone, and why does Windows not have it? (lesson 38, redzone)

Check yourself: programmer's toolkit

How does a macro parameter reach the template, and what does ..@ fix? (lesson 21, local)

Which registers must a callee save, and which may it clobber freely? (lesson 38, saved)

How do you print a double from assembly? (lesson 29, print)

Check yourself: OS and network

What does the kernel push on the stack before _start runs? (lesson 27, stack)

Which syscalls make a listening TCP server, in order? (lesson 32, bind)

Why must a boot sector end in 0xAA55, and what sets the origin? (lesson 45, signature)

Check yourself: finish

Which capstone converted argv to numbers, and which read a file in chunks? (lessons 46 and 47)

Name one layout change that turns a memory-bound loop into a cache-friendly one. (lesson 48, cache)

Where to go next

Practice: rewrite each lesson's program from memory, then change one thing and predict the output before running it. The COBOL course on this site shows the other end of the spectrum - a language that maximizes explicitness - and the Ruby course shows how far a runtime can hide the machine.

Next steps for serious work: read the System V ABI document cover to cover, disassemble a small C program with objdump, and write a boot sector that boots in QEMU. After that, the art of assembly language (no Strock) and the Intel manuals are the deep references.

Next: Install NASM on Windows 11

Article author: Arthur Isaev

Related articles
Assembler
Assembler course: zero to hero in 50 lessons
What is assembly language
Install NASM and check the version
NASM syntax basics
Your first program
Registers
MOV and data transfer
Number bases and operands
Defining strings and data
Flags and the status register
Conditional jumps
Loops
The stack
Procedures
LEA and addressing modes
Memory layout: sections
Linux syscalls
Arithmetic
Bitwise operations
Arrays
Structures
Macros
Calling C functions
Debugging with GDB
The ELF format
Time and date syscalls
File I/O
Command-line arguments
Environment variables
Floating point (SSE)
SIMD basics
Interrupts
Sockets
A tiny HTTP client
Output formats: bin, elf, elf64
Advanced macros and %include
Linking object files
32-bit vs 64-bit
The System V ABI
Makefiles for assembly
Optimization basics
Error codes and logging
Parsing CSV
Data structures: linked list
A tiny HTTP server
Boot sector: hello in 512 bytes
Capstone: command-line calculator
Capstone: hex editor
Performance: cycles and cache
Modern x86: AVX tour
Hero roadmap: the whole course on one page
Install NASM on Windows 11
Install NASM on Ubuntu
Install NASM on Rocky Linux
Install NASM on macOS
Install NASM on FreeBSD
Assembly in Docker
ARM assembly

Search this site

Channel @aofeed Chat @aofeedchat

Contacts and cooperation:
I recommend our hosting beget.ru
Write to info@urn.su, info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: