Master the fundamental concepts of x86 assembly (intel syntax) through this focused micro-challenge.
A hello world without libc is just two syscalls on x86-64 Linux: write to stdout, then exit. Static Go binaries and scratch Docker images bottom out in the same syscall instruction you write here. NASM gives you human-readable mnemonics; the CPU sees the machine encoding.
nasmLoading…
Syscall 1 is write, syscall 60 is exit. No C runtime sets up main; your entry label is _start.
For this exercise, you will assemble with NASM, link with ld, and print Hello, World!\n via raw syscalls. This task asks you to see userspace as thin wrappers over kernel entry, because every strace line and seccomp rule is filtering these same numbers.
Keep the relevant man page, ABI doc, or Rust reference chapter open while you work. When your output disagrees with the reference implementation on the same machine, the mismatch is usually an alignment rule, an off-by-one terminator, or a register slot you misread in GDB. Skim the official documentation for the tool or ABI named in the exercise; the prose changes, but register roles, syscall numbers, and ownership rules stay stable across releases.
Write your first x86-64 assembly program to print Hello World.
Requirements:
Three hints are available for this task, revealed one at a time inside the code workspace so you can struggle productively before seeing them.
All starter code and reference implementations are available for your local setup.
View on Github