1. 环境
WSL子系统:Ubuntu
2. 工具
所需工具包列表:
程序名称 | 检查命令 | 所需的包 |
GUN Assembler | as –version | binutils |
GUN Linker | ld –version | binutils |
GUN Debugger | gdb –version | gdb |
Make | make –version | make |
3. 代码
代码使用语法风格是:AT&T。
.global _start
.section .data
mystr:
.string "Hello, world!\n"
mystrend:
.section .text
_start:
# 设置系统调用号,1 表示write
movq $1, %rax
# 标准输出stdout
movq $1, %rdi
# 字符串指针
leaq mystr(%rip), %rsi
# 字符串长度
movq $(mystrend-mystr), %rdx
# 执行系统调用
syscall
# 设置系统调用号,60 表示exit
movq $60, %rax
syscall
4.编译链接并执行
# 编译
as helloworld.s -o helloworld.o
# 链接
ld helloworld.o -o helloworld
# 执行,控制台会输出 :Hello, world!
./helloworld
参考资料:
- x64架构体系的系统调用列表:https://x64.syscall.sh/