第一个汇编语言程序
一、汇编并链接程序的命令
# 根据源代码命令修改
as exit.s -o exit.o
ld exit.o -o exit
# 用于查看程序返回给操作系统的状态码
# 状态码存储在 %ebx 通用寄存器中
echo $?
二、exit.s
以下展示 Linux 汇编语言的基本框架.
# 目的: 退出并向 Linux 内核返回一个状态码的简单程序
# 输入: 无
# 输出: 返回一个状态码, 运行结束后使用 echo $? 查看
# 变量:
# %eax 保存系统调用号
# %ebx 保存返回状态
.section .data
.section .text
.global _start
_start:
movl $5, %ebx
movl $1, %eax
int $0x80
三、汇编语言程序概要
- 汇编语言的注释使用 #
- 任何以小数点 (.) 开始的指令都不会被直接翻译成机器指令, 是针对汇编程序本身的指令
- (.section)指令将程序分成几个部分
a. (.section .data)数据段的开始, 列出程序数据所需的所有内存存储空间
b. (.section .text)文本段的开始, 存放程序指令的部分 - (.global _start)指明程序的开始位置
- (_start)是一个符号, 在汇编或链接程序中被其他内容替换, 用于标记程序或数据的位置; 定义(_start)标签的值, 其后跟着一个冒号
- (%eax) 一个通用寄存器
- (movl $1, %eax) 将源操作数复制到目的操作数, ($1) 前面的 ($) 代表立即寻址方式
- (movl $1, %eax
int $0x80) 视作组合指令, 实现退出程序的功能(如同 C 语言中的 (return 0;))