Open2
アセンブリコツコツ(aarch64)

標準出力にHello World
.data
msg:
.ascii "Hello, World!\n"
.align 3
.text
.global _start
_start:
mov x0, 1 // file descriptor 1 is stdout
ldr x1, =msg // address of string to output
ldr x2, =14 // number of bytes
mov x8, 64 // syscall: write
svc 0 // make syscall
mov x0, 0 // exit code 0
mov x8, 93 // syscall: exit
svc 0 // make syscall
コメント
x86_64よりシンプルに感じた
x8にシステムコールセットのため、引数は最大8つっぽい

arg[0]をエコーする
.text
.global _start
_start:
mov x29, sp // フレームポインタ
ldr x0, [x29]
add x1, x29, 8
ldr x1, [x1]
mov x2, 0
len_loop: // strlenの実装
ldrb w3, [x1, x2] //x1をベースアドレスにしてx2分先のアドレスを読み取る
cbz w3, len_done //w3が0ならlen_doneに分岐
add x2, x2, 1
b len_loop
len_done:
mov x0, 1
mov x8, 64 //wite()
svc 0
mov x0, 0
mov x8, 93 // exit()
svc 0
コメント
[]はアドレスの中身を指す
C言語は高級アセンブリと聞くけどそんな気がしてきた