下列是Intel汇编语法实现的 Hello, world!
程序。
;; hello.asm
;; nasm -f elf hello.asm; will output hello.o
;; ld -s -o hello hello.o
;; section, same to segment
segment .data ; 数据段声明, 下列代码将放在数据段中
msg db "Hello, world!", 0xA ; 要输出的字符串
len equ $ - msg ; 字串长度
section .text ; 代码段声明,下列代码将放入代码段中
global _start ; 指定入口函数,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 ; 调用内核功能
在Linux下可以用nasm
编译成ELF格式的目标文件,然后链接成可执行文件。
nasm -f elf hello.asm #将生成hello.o
ld -s -o hello hello.o #链接生成可执行文件hello.
执行./hello
就能看到”Hello, world!”的输出了。