x86-64汇编之Hello world

1. 环境

WSL子系统:Ubuntu

2. 工具

所需工具包列表:

程序名称检查命令所需的包
GUN Assembleras –versionbinutils
GUN Linkerld –versionbinutils
GUN Debuggergdb –versiongdb
Makemake –versionmake

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

参考资料:

  1. x64架构体系的系统调用列表:https://x64.syscall.sh/