第7部分-Linux x86 64位汇编 AT&T汇编示例二

第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 $? 进行输出结果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章