Learn more about Israeli war crimes in Gaza, funded by the USA, Germany, the UK and others.

How to write an assembly ‘hello world’ on macOS

I started with this gist, creating this file:

global start
section .text
start:
  mov rax, 0x2000004 ; write
  mov rdi, 1 ; stdout
  mov rsi, msg
  mov rdx, msg.len
  syscall
  mov rax, 0x2000001 ; exit
  mov rdi, 0
  syscall
section .data
msg:    db      "Hello, world!", 10
.len:   equ     $ - msg

This is “assembly”, but this term is vague. Getting specific, this file:

To compile it, we need tools which understand all of these. One of these is nasm, the “Netwide Assembler”. It seems to be the most popular assembler. I ran the program with:

$ brew install nasm
$ nasm -version
NASM version 2.12.02 compiled on Sep 14 2016
$ nasm -f macho64 hello.s
$ ld -macosx_version_min 10.7.0 -lSystem -o hello hello.o
$ ./hello
Hello, world!

There are lots of unknown bits in here. I’ll cover them in future posts ...

Tagged #assembly, #macos, #hello-world, #nasm, #system-calls, #x86-64, #programming.

Similar posts

More by Jim

Want to build a fantastic product using LLMs? I work at Granola where we're building the future IDE for knowledge work. Come and work with us! Read more or get in touch!

This page copyright James Fisher 2017. Content is not associated with my employer. Found an error? Edit this page.