第7部分-Linux x86 64位汇编 AT&T汇编示例二
示例——找出最大值
代码max.s如下:
# %edi - 被检查数据条目的索引
# %ebx – 最大数据条目
# %eax – 当前数据条目
# # The following memory locations are used:
# # data_items – 保持数据条目. 0用于接收数据条目
.section .data
data_items: #数据
.long 3,67,34,222,45,75,54,34,44,33,22,11,66,0
.section .text
.globl _start
_start:
movl $0, %edi #移动0到索引寄存器
movl data_items(,%edi,4), %eax #加载第一个数据
movl %eax, %ebx # 第一个数据为最大
start_loop: # 启动循环
cmpl $0, %eax # 确认是否到最后一个数据
je loop_exit
incl %edi # 加载到下一个值
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
编译:as max.s -o max.o
链接:ld -o max max.o
执行./max, 然后通过#echo $? 进行输出结果。