at&t汇编-----数组

本文深入探讨了使用AT&T汇编语言处理数组的方法,包括数组的声明、初始化、遍历和元素访问等核心概念。通过实例代码解析,详细阐述了在低级别编程中如何有效地操作内存和理解数组的底层工作原理。
摘要由CSDN通过智能技术生成
.section .rodata
    .LC0:.string "%d "

.section .text
//int init(int *list,int len)
init:
    pushl %ebp
    movl %esp,%ebp
    pushl %ebx
    
    movl $0,%ebx
    jmp .L3
.L4:
    movl 8(%ebp),%eax
    movl $0,(%eax,%ebx,4)   
    
    addl $1,%ebx
.L3:
    cmpl 12(%ebp),%ebx
    jl .L4
    
    
    popl %ebx
    movl %ebp,%esp
    popl %ebp
    ret

//void print(int *list,int len)
print:
    pushl %ebp
    movl %esp,%ebp
    pushl %ebx
    
    movl $0,%ebx
    jmp .L5
.L6:
    movl 8(%ebp),%eax
    pushl (%eax,%ebx,4)
    pushl $.LC0
    call printf
    addl $8,%esp
    
    addl $1,%ebx
.L5:
    cmpl 12(%ebp),%ebx
    jl .L6
    
    
    popl %ebx
    movl %ebp,%esp
    popl %ebp
    ret

//int sum(int *list,int len)
sum:
    pushl %ebp
    movl %esp,%ebp
    pushl %ebx
    
    movl $0,%eax
    movl $0,%ebx
    jmp .L1
.L2:
    
    movl 8(%ebp),%edx
    addl (%edx,%ebx,4),%eax
    
    addl $1,%ebx
.L1:
    cmpl 12(%ebp),%ebx
    jl .L2
    
    popl %ebx
    movl %ebp,%esp
    popl %ebp
    ret

//int max(int *list,int len)
max:
    pushl %ebp
    movl %esp,%ebp
    pushl %ebx
    
    movl 8(%ebp),%eax
    movl (%eax),%eax
    movl $1,%ebx
    jmp .L7
.L8:
    movl 8(%ebp),%edx
    cmpl (%edx,%ebx,4),%eax
    jge .L9
    
    movl (%edx,%ebx,4),%eax
    
.L9:
    
    addl $1,%ebx
.L7:
    cmpl 12(%ebp),%ebx
    jl .L8

    popl %ebx
    movl %ebp,%esp
    popl %ebp
    ret

//int min(int *list,int len)
min:
    pushl %ebp
    movl %esp,%ebp
    pushl %ebx
    
    movl 8(%ebp),%eax
    movl (%eax),%eax
    movl $1,%ebx
    jmp .L10
.L11:
    movl 8(%ebp),%edx
    cmpl (%edx,%ebx,4),%eax
    jle .L12
    
    movl (%edx,%ebx,4),%eax
    
.L12:
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值