2020-12-04-Linux汇编语言(一)

本文介绍了一个简单的Linux汇编语言程序,该程序通过系统调用退出并返回一个状态码。文章详细解释了汇编语言的基本框架,包括数据段、文本段、全局开始指令以及如何使用寄存器进行系统调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一个汇编语言程序

一、汇编并链接程序的命令

# 根据源代码命令修改
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

三、汇编语言程序概要

  1. 汇编语言的注释使用 #
  2. 任何以小数点 (.) 开始的指令都不会被直接翻译成机器指令, 是针对汇编程序本身的指令
  3. (.section)指令将程序分成几个部分
    a. (.section .data)数据段的开始, 列出程序数据所需的所有内存存储空间
    b. (.section .text)文本段的开始, 存放程序指令的部分
  4. (.global _start)指明程序的开始位置
  5. (_start)是一个符号, 在汇编或链接程序中被其他内容替换, 用于标记程序或数据的位置; 定义(_start)标签的值, 其后跟着一个冒号
  6. (%eax) 一个通用寄存器
  7. (movl $1, %eax) 将源操作数复制到目的操作数, ($1) 前面的 ($) 代表立即寻址方式
  8. (movl $1, %eax
    int $0x80) 视作组合指令, 实现退出程序的功能(如同 C 语言中的 (return 0;))

参考文章

  1. 深入理解程序设计 使用Linux汇编语言
  2. 通用寄存器组GPRs(待完成)
  3. 专用寄存器(待完成)
  4. 寻址方式(待完成)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值