参考书目:深入理解程序设计,使用linux汇编语言,本系列博客为其学习笔记
测试代码一
这里要注意的是,寄存器前面有%符号,立即数前面有$符号
#目的:退出并向linux内核返回一个状态码
#输入: none
#输出: 使用echo $?来读取状态码
.section .data #数据段,‘.’开头的指令仅由汇编器处理
.section .text #文本段
.globl _start #程序入口位置
_start:
movl $1, %eax #退出程序的系统调用
movl $0, %ebx #返回给操作系统的状态码
int $0x80 #system call
运行结果:
测试代码二:
#目的: 查找最大值
#
# %edi -- index
# %ebx -- current Max (作为退出状态码,不能大于255)
# %eax -- data_items[index]
#
.section .data
data_items: #数据项,long,int,ascii,byte
.long 3,67,222,45,75,54,34,44,33,22,11,66,0
.section .text
.globl _start
_start:
movl $0,%edi
#eax = data_items[index], 4表示long
movl data_items(,%edi,4),%eax
movl %eax,%ebx #第一个数据就默认最大值
start_loop:
cmpl $0,%eax #是否到数据末尾
je loop_exit
incl %edi #index++
movl data_items(,%edi,4),%eax
cmpl %ebx, %eax #是用第二个寄存器比较第一个
jle start_loop
movl %eax, %ebx
jmp start_loop
loop_exit:
movl $1,%eax #exit()
int $0x80
运行结果