0Pricing
Assembly Language & x86 Low-Level Systems Programming · Lesson

Your First Assembly Program

Set up your development environment and write, assemble, link, and execute a simple 'Hello, World!' program in x86 Assembly.

Your First Assembly Program is a free Assembly Language & x86 Low-Level Systems Programming lesson on CoddyKit — lesson 3 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Assembly Language & x86 Low-Level Systems Programming learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.

Your First Assembly Program

Time to go hands-on: you will set up the tools, write a "Hello, World!" in assembly, and turn it into a runnable executable. This is the fun part.

Get Ready: Assembler & Linker

You need two tools: an assembler (we use NASM) to make an object file, and a linker (LD) to turn that into a runnable program.

Anatomy of an Assembly Program

An assembly program splits into sections. .data holds initialized data like strings; .text holds your instructions, starting at _start.

Storing "Hello, World!"

Store the message in .data. The db directive defines bytes; we add a newline (0xA) and compute the length right after.

section .data
    msg db 'Hello, World!', 0xA
    len equ $ - msg

System Calls: Printing Text

To print, ask the OS via a system call. On Linux that is sys_write (number 1): you pass the output, the address, and the byte count.

section .text
    global _start

_start:
    ; sys_write (syscall number 1)
    mov rax, 1         ; syscall number for sys_write
    mov rdi, 1         ; file descriptor 1 (stdout)
    mov rsi, msg       ; address of the string to write
    mov rdx, len       ; number of bytes to write
    syscall            ; execute the system call

Ending Our Program (Syscall)

When done, the program must tell the OS to stop with a second syscall: sys_exit (number 60), passing an exit status — 0 means success.

    ; sys_exit (syscall number 60)
    mov rax, 60        ; syscall number for sys_exit
    mov rdi, 0         ; exit status 0 (success)
    syscall            ; execute the system call

Your First Full Program!

Here is the full "Hello, World!" — save it as hello.asm. The .data section holds the message, .text prints it and exits.

section .data
    msg db 'Hello, World!', 0xA
    len equ $ - msg

section .text
    global _start

_start:
    ; sys_write (syscall number 1)
    mov rax, 1         ; syscall number for sys_write
    mov rdi, 1         ; file descriptor 1 (stdout)
    mov rsi, msg       ; address of the string to write
    mov rdx, len       ; number of bytes to write
    syscall            ; execute the system call

    ; sys_exit (syscall number 60)
    mov rax, 60        ; syscall number for sys_exit
    mov rdi, 0         ; exit status 0 (success)
    syscall            ; execute the system call

From Assembly to Object File

First, assemble: nasm -f elf64 turns hello.asm into the object file hello.o — machine code, but not yet an executable.

nasm -f elf64 hello.asm -o hello.o

Creating the Executable

The object file isn't runnable yet. The linker (ld) wires up the _start entry point and produces the final executable.

ld hello.o -o hello

Execute and See the Output!

Now run it with ./hello. "Hello, World!" prints to your console — congratulations, you just ran your first x86 assembly program!

./hello

Quick Check: Process Steps

You've seen the full process to create an executable from assembly code. What is the correct order of steps?

Recap: Your First Assembly Program

You ran the full workflow: define data, call sys_write and sys_exit, then assemble, link, and execute. Next: registers and data types.

Frequently asked questions

Is the “Your First Assembly Program” lesson free?

Yes — the full text of “Your First Assembly Program” is free to read here on the web, and the Assembly Language & x86 Low-Level Systems Programming course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Assembly Language & x86 Low-Level Systems Programming course, upgrade to CoddyKit PRO.

What will I learn in “Your First Assembly Program”?

Set up your development environment and write, assemble, link, and execute a simple 'Hello, World!' program in x86 Assembly. You practise Assembly Language & x86 Low-Level Systems Programming with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.

Do I need any experience to start Assembly Language & x86 Low-Level Systems Programming?

No prior experience is required. Assembly Language & x86 Low-Level Systems Programming on CoddyKit is structured for beginners through advanced learners; this is — lesson 3 of 4, so you can start here or from the beginning and move at your own pace.

How long does the “Your First Assembly Program” lesson take?

Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.

Can I write and run code in this Assembly Language & x86 Low-Level Systems Programming lesson?

Yes. Every Assembly Language & x86 Low-Level Systems Programming lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.

All lessons in this course

  1. What is Assembly Language?
  2. x86 Architecture Fundamentals
  3. Your First Assembly Program
  4. The Assemble, Link, and Run Toolchain
← Back to Assembly Language & x86 Low-Level Systems Programming