ravelll の日記

よしなに

アセンブリで Hello, World を書く

今日は普段より遅めに起きて出社したにも関わらず睡眠障害の一連の症状によって体調があまり芳しくなく早く機械の体になりたいという気持ちがあったため昼休みにアセンブリ言語を書いていた。

コードを書く

hello.asm として以下のコードを記述する。

section .text

global main

main:
  push dword len
  push dword msg
  push dword 1

  mov eax, 0x4
  sub esp, 4
  int 0x80

  add esp, 16

  push dword 0

  mov eax, 0x1
  sub esp, 4
  int 0x80

section .data
  msg db "Hello, World", 0xa
  len equ $-msg

アセンブルする

nasm アセンブラでコードをコンパイルアセンブル)する。
-fオプションでアウトプットするファイルのフォーマットを指定する。
指定可能なフォーマットの一覧はnasm -hfで見ることができる。

$ nasm -f macho hello.asm

リンクする

コンパイルしてできたオブジェクトファイルを実行可能ファイルにリンクする。
-eオプションでコードのエントリポイントを指定する。

$ ld -o hello -e main hello.o

実行する

実行する。

$ ./hello
Hello, World

所感

機械の体にはなれなかったけど楽しかった。

--

reference