Linux 彙編語法格式
DOS/Windows 下的彙編語言,這些彙編代碼都是 Intel 風格的。但在 Unix 和 Linux 系統中,更多采用的還是 AT&T 格式,兩者在語法格式上有着很大的不同 針對Intel風格,我們來配置我們的環境
安裝NASM
$ sudo apt-get install nasm
新建hello.asm文件
; hello.asm
section .data ; 數據段聲明
msg db “Hello, world!”, 0xA ; 要輸出的字符串
len equ $ - msg ; 字串長度
section .text ; 代碼段聲明
global _start ; 指定入口函數
_start: ; 在屏幕上顯示一個字符串
mov edx, len ; 參數三:字符串長度
mov ecx, msg ; 參數二:要顯示的字符串
mov ebx, 1 ; 參數一:文件描述符(stdout)
mov eax, 4 ; 系統調用號(sys_write)
int 0x80 ; 調用內核功能
; 退出程序
mov ebx, 0 ; 參數一:退出代碼
mov eax, 1 ; 系統調用號(sys_exit)
int 0x80 ; 調用內核功能
編譯
NASM 採用的是人工編寫的語法分析器,因而執行速度要比 GAS 快很多,更重要的是它使用的是 Intel 彙編語法,可以用來編譯用 Intel 語法格式編寫的彙編程序
nasm -f elf64 hello.asm # 32位改成 elf32 產生hello.o
鏈接
彙編器產生的目標代碼是不能直接在計算機上運行的,它必須經過鏈接器的處理才能生成可執行代碼。
ld -s -o hello hello.o
運行
./hello #屏幕上打印出 "Hello,world"