最近作者正在看nasm,某個assembly 的實作,因為作業系統都升到64 bits了,要編譯asm code需要一些額外處理,以下記錄一下處理步驟,我是用archlinux,不過我想其他作業系統應該也差不多:

首先作者有提供asm_io.asm,這要先編譯,先安裝作者的nasm組譯器:

sudo pacman -S nasm

組譯:

nasm -f elf -d ELF_TYPE asm_io.asm
nasm -f elf first.asm

這裡的first 是我們自己寫的asm code

下一步要用gcc,原本書中是建議

gcc -o first driver.c first.o asm_io.o

不過方才都是用elf32去組譯的,所以要改成:

gcc -m32 -lc -o first driver.c first.o asm_io.o

這裡要安裝:

sudo pacman -S gcc-multilib gcc-libs-multilib

然後我還遇到找不到shared library libisl的問題,可能是gcc-multilib跟不上isl的更新,這個用symbolic link到libisl.13.0.0的方式解決

之後就可以完成編譯了,不過也許學著寫64 bits的assembly比較治本?