Assembly
Prerequisity
sudo apt install nasm
x86
-
编写代码:
main.asm:section .data msg db 'Hello, World!', 0xA ; 定义字符串,0xA 是换行符 section .text global _start _start: ; 系统调用:write(1, msg, 13) mov eax, 4 ; 系统调用号 (sys_write) mov ebx, 1 ; 文件描述符 1 (stdout) mov ecx, msg ; 指向要写的字符串 mov edx, 13 ; 字符串长度 int 0x80 ; 调用内核 ; 系统调用:exit(0) mov eax, 1 ; 系统调用号 (sys_exit) xor ebx, ebx ; 返回码 0 int 0x80 ; 调用内核 -
编译:
nasm -o main.o -f elf32 main.asm -
链接:
ld -o main -m elf_i386 main.o -
运行:
./main
x86-64
-
编写代码:
main.asm:section .data msg db 'Hello, World!', 0xA ; 定义字符串,0xA 是换行符 msg_len equ $ - msg ; 计算字符串长度 section .text global _start _start: ; 系统调用:write(1, msg, msg_len) mov rax, 1 ; 系统调用号 (sys_write) mov rdi, 1 ; 文件描述符 1 (stdout) mov rsi, msg ; 指向要写的字符串 mov rdx, msg_len ; 字符串长度 syscall ; 调用内核 ; 系统调用:exit(0) mov rax, 60 ; 系统调用号 (sys_exit) xor rdi, rdi ; 返回码 0 syscall ; 调用内核这里使用的是 64 位 Linux 系统调用约定,注意与 32 位版本的区别(如寄存器的使用和系统调用的指令)。在 x86-64 架构中,
syscall指令用于发起系统调用,而不同于 32 位架构中的int 0x80。 -
编译:
nasm -o main.o -f elf64 main.asm -
链接:
ld -o main main.o -
运行:
./main

浙公网安备 33010602011771号