Skip to content

Instantly share code, notes, and snippets.

@danielsource
Created April 22, 2025 18:05
Show Gist options
  • Save danielsource/1f204c5e338be404425cf02c30ec0071 to your computer and use it in GitHub Desktop.
Save danielsource/1f204c5e338be404425cf02c30ec0071 to your computer and use it in GitHub Desktop.
; How to compile this file:
; $ nasm -felf64 -o hello.o hello-linux64.asm
; $ ld -o hello.out hello.o
; $ ./hello.out
;
; Elements of a NASM program:
; * labels
; * instructions
; * operands
; * directives
; * sections
;
; Some instructions:
; mov x,y (x <- y)
; and x,y (x <- x & y)
; or x,y (x <- x | y)
; xor x,y (x <- x ^ y)
; add x,y (x <- x + y)
; sub x,y (x <- x - y)
; inc x (x <- x + 1)
; dec x (x <- x - 1)
; syscall (trigger OS call: rax = syscall number, rdi/rsi/rdx/... = args)
; db (define bytes)
; equ (similar to a C '#define')
;
; Kinds of operands:
; * register (rdx, r2d, r2b, dh, ...)
; * memory ([750], [rcx + rsi*4], [rbx - 8], ...)
; * immediate (200, 0xc8, 0b1100_1000, ...)
;
; 64-bit reg | low 32-bits | low 16-bits | low 8-bits | 16-bit high half
; -----------|-------------|-------------|-------------|-----------------
; r0 aka rax | r0d aka eax | r0w aka ax | r0b aka al | ah
; r1 aka rcx | r1d aka ecx | ... | r1b aka cl | ch
; r2 aka rdx | ... | | r2b aka dl | dh
; r3 aka rbx | | | r3b aka bl | bh
; r4 aka rsp | | | r4b aka spl |
; r5 aka rbp | | | r5b aka bpl |
; r6 aka rsi | | | r6b aka sil |
; r7 aka rdi | r7d aka edi | r7w aka di | r7b aka dil |
; ... | ... | ... | ... |
; r15 | r15d | r15w | r15b |
;
; other regs
; -------------
; rflags/eflags
; xmm{0-15}
; mmx...
; ymm...
; zmm...
; ...
global _start
STDIN equ 0
STDOUT equ 1
STDERR equ 2
SYS_WRITE equ 1
SYS_EXIT equ 60
section .data
message db 'hello, world!',10
message_len equ $-message
section .text
_start:
mov rax, SYS_WRITE
mov rdi, STDOUT
mov rsi, message
mov rdx, message_len
syscall
mov rdi, rax
mov rax, SYS_EXIT
syscall
; vi:ft=nasm:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment