Ubuntu(arm64)でassemblerの実行

NASMをインストールする
$ sudo apt install nasm

$ uname -sr
Linux 5.15.0-76-generic

$ nasm -v
NASM version 2.15.05

$ as -v
GNU assembler version 2.38 (aarch64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38

$ ld -v
GNU ld (GNU Binutils for Ubuntu) 2.38

$ gcc –version
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0

hello.s

.text
        .global _start
_start:
        mov     x2,  #13    // x2  length
        adr     x1,  msg    // x1  string address
        mov     x0,  #1     // x0  stdout
        mov     x8,  #64
        svc     #0          // sys_write
        mov     x0,  xzr
        mov     x8,  #93
        svc     #0          // exit
msg:
        .asciz  "hello, world\n"

$ as -o hello.o hello.s
$ ld -o hello hello.o
$ ./hello
hello, world

ちなみに、CPUアーキテクチャがx86ではないので x86-64で記述するとエラーになる。

### x86-64とarm64の違い
x86 x64 は CISC(Complex Instruction Set Computer) と呼ばれる命令セット
「複雑な処理」を「少ない命令」で実行しようとする思想です。

arm は RISC(Reduced Instruction Set Computer) と呼ばれる命令セット

x64は高速でパワフル、PCでよく使用される
ARM64は低電力でモバイルデバイスに向いている