100day’s blog

思いついた事や、プログラミングの毎日の作業工程を短めにまとめてます。

MacでNasm+gccでアセンブラ(アセンブリを書いてみる)

はじめに

現在OSは下記のバージョンを利用中です。

f:id:gpstandard:20181002091834p:plain

この記事はMacアセンブラを少し走らせてみたいなという人を対象にしています。

 

nasmインストール

brew install nasm

今回このnasm+ldでうまくコンパイルできなかったので

Macにgccをインストールする

gccを後半利用しています。

 

コードを書く

hello.asmで保存します。

; hello.asm

 

GLOBAL _main

 

SECTION .data

str_hello   db  "Hello World", 0x0a ; Output string and \n

 

 

SECTION .text

_main:

    mov rax, 0x2000004      ; Set system call to write=4.

    mov rdi, 1              ; Set output to stdout.

    mov rsi, str_hello      ; Set output data.

    mov rdx, 13             ; Set output data size.

    syscall                 ; Call system call.

    mov rax, 0x2000001      ; Set system call to exit=1.

    mov rdi, 0              ; Set success value of exit.

    syscall                 ; Call system call.

 

中間ファイル .oファイル作成

 nasm -f macho64 hello.asm

これで hello.o が完成

 

コンパイル

本来

ld -o hello hello.o

これでいけるはずなのですが、エラー。

 

(追記)下記でいけました。

ld -macosx_version_min 10.11 -lSystem -o hello hello.o

 

 

 gccを利用する場合は

 

gcc -o hello hello.o

 

これでhelloが作成されるので

 

./hello 

で実行無事 hello would