Linux下用汇编输出Hello, world

1044 查看

下列是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!"的输出了。