汇编语言 冒泡排序

.section .data
msg:
    .string "value is %d\n"
arr:
    .int 1, 10, 5, 2, 20, 55, 7, 124, 77, 55

.section .text
.globl main
main:
    pushl %ebp
    movl %esp, %ebp
    subl $32, %esp

    movl $10, -4(%ebp)
    movl $0, -8(%ebp) 
    movl $0, -12(%ebp)  
    movl $0, -16(%ebp)  
    movl $0, -20(%ebp)  

for_i:
    movl -8(%ebp), %edi
    movl arr(, %edi, 4), %edi
    movl %edi, -16(%ebp)

    for_j:
        movl -12(%ebp), %edi
        movl arr(, %edi, 4), %edi
        movl %edi, -20(%ebp)
        cmpl %edi, -16(%ebp)
        jg next
        xchg %edi, -16(%ebp)
        movl %edi, -20(%ebp)

        movl -12(%ebp), %edi
        movl -20(%ebp), %ebx
        movl %ebx, arr(, %edi, 4)

        movl -8(%ebp), %edi
        movl -16(%ebp), %ebx
        movl %ebx, arr(, %edi, 4)
    next:
        movl -12(%ebp), %edi
        inc %edi
        movl %edi, -12(%ebp)
        cmpl -4(%ebp), %edi
        jl for_j
    movl $0, -12(%ebp)

    movl -8(%ebp), %edi
    inc %edi
    movl %edi, -8(%ebp)
    cmpl -4(%ebp), %edi
    jl for_i

    movl $0, %edi
show:
    pushl arr(, %edi, 4)
    pushl $msg
    call printf
    addl $8, %esp
    inc %edi
    cmpl -4(%ebp), %edi
    jl show

    movl %ebp, %esp
    popl %ebp
    ret

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值