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

👋 I'm Jim, a full-stack product engineer. Want to build an amazing product and a profitable business? Read more about me or Get in touch!

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