Thought about system by Hiroyasu Ishikawa

We are uncovering better ways of developing system.

AArch64 アセンブリコードで Hello World

最近業務でAArch64なLinuxをずっと使っているけどアセンブリコードを書いたことはなかった.
なんとなく気が向いたのでいわゆるHello Worldコードをコーディングしてみた.
アセンブリを書いて,理解することはCPUアーキテクチャをソフトウェア側から意識することになる.

コード

.global _start
_start:
    // Write system call to print 'Hello World'
    mov x0, 1             // File descriptor (stdout)
    ldr x1, =msg          // Message address
    mov x2, 13            // Message length
    mov x8, 64            // Write syscall number
    svc 0                 // Make syscall

    // Exit system call
    mov x8, 93            // Exit syscall number
    svc 0                 // Make syscall

.data
msg:
    .ascii "Hello, world!\n"

少し解説

レジスタ命名でx2とかx8などの汎用レジスタが並んでいる.x86レジスタとは異なる.
命令セットSVCはSupervisor Call,つまりシステムコールである.