汇编--一组数的最大值(AT&T语法)

下面的程序出自 <<Linux C编程一站式学习>>,已打上注释

 .section .data
data_items:
 .long 3,67,34,222,45,75,54,34,44,33,22,11,66,0 #.long指示表明一组数,每个数占32位,相当于C语言的数组。这个数组开头定义了一个符号data_items,汇编器会把数组的首地址作为data_items符号所代表的地址。
#除了.long之外,常用的数据声明还有:.byte,也是声明一组数,每个数占8位
#.ascii,例如.ascii"hello world",声明11个数,取值为相应字符的ascii字符。和c语言不同,这样声明的字符串末尾是没有‘\0’字符的,如果需要以'\0'结尾可以声明为.ascii "hello world\0"

 .section .text
 .globl _start
_start:
 movl $0, %edi #初始化edi为0,edi用来记录数组的下标
 movl data_items(,%edi,4), %eax #作用:将数组的第0个元素传送到eax寄存器中。data_item是数组首地址,edi的值是数组的下标,4表示数组的每个元素占4字节
 movl %eax, %ebx


start_loop:
 cmpl $0, %eax #作用:将两个操作数相减,但是计算结果并没有保存,只是根据结果改变eflags寄存器中的标志位。如果两数相等则计算结果为0,eflags中的ZF位1。
 je loop_exit #作用:检查eflags中的ZF位,ZF位为1(cmpl的计算结果为0)则发生跳转,ZF位为0则不跳转,继续执行下一条指令。可以理解为“jump if equal”
 incl %edi #作用:将edi的值加1
 movl data_items(,%edi,4), %eax 
 cmpl %ebx, %eax
 jle start_loop #作用:表示“jump if less than or equal”
 movl %eax, %ebx
 jmp start_loop
 
loop_exit:
 movl $1, %eax
 int $0x80 #无条件跳转

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值