Skip to content

Instantly share code, notes, and snippets.

@ericandrewlewis
Forked from FiloSottile/32.asm
Last active November 24, 2020 08:54
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ericandrewlewis/8bb8d29ebf65c325ed76 to your computer and use it in GitHub Desktop.
Save ericandrewlewis/8bb8d29ebf65c325ed76 to your computer and use it in GitHub Desktop.
NASM Hello World for x86 and x86_64 Intel Mac OS X(get yourself an updated nasm with brew)
; /usr/local/bin/nasm -f macho 32.asm && ld -macosx_version_min 10.7.0 -o 32 32.o && ./32
global start
section .text
start:
push dword msg.len
push dword msg
push dword 1
mov eax, 4
sub esp, 4
int 0x80
add esp, 16
push dword 0
mov eax, 1
sub esp, 12
int 0x80
section .data
msg: db "Hello, world!", 10
.len: equ $ - msg
; To convert this assembly code to an executable file (machine language) and execute it, run:
; /usr/local/bin/nasm -f macho64 64.asm && ld -macosx_version_min 10.7.0 -lSystem -o 64 64.o && ./64
global start
section .text
start:
mov rax, 0x2000004 ; write
mov rdi, 1 ; stdout
lea rsi, [rel msg]
mov rdx, msg.len
syscall
mov rax, 0x2000001 ; exit
mov rdi, 0
syscall
; The .data section is for storing and naming constants.
section .data
msg: db "Hello, world!", 10
; Length of `msg`. `$` refers to the address of this constant, so `$ - msg` is the length of message
.len: equ $ - msg
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment