.text .global main one_pass: /* callee-saved registers */ pushl %ebx pushl %esi /* create stack frame */ pushl %ebp movl %esp, %ebp /* get input args */ movl 16(%ebp), %ebx /* base addr of array */ movl 20(%ebp), %edx /* size of array */ testl %edx, %edx jle .L1 movl $0, %ecx .L4: movl (%ebx,%ecx,4), %esi movl 4(%ebx,%ecx,4), %eax cmpl %eax, %esi jle .L3 /* swap elements, if needed */ movl %eax, (%ebx,%ecx,4) movl %esi, 4(%ebx,%ecx,4) .L3: addl $1, %ecx cmpl %edx, %ecx jne .L4 .L1: /* destroy stack frame and restore registers */ leave popl %esi popl %ebx ret main: /* callee-saved registers */ pushl %esi pushl %ebx /* create stack frame */ pushl %ebp movl %esp, %ebp /* main's local variables: an unsorted array */ pushl $12 /* last element in array */ pushl $63 pushl $4 pushl $18 pushl $57 pushl $-13 pushl $25 /* first element in array */ /* base address of array */ movl %esp, %esi movl $7, %edi /* size of array */ movl %edi, %ebx subl $1, %ebx /* Perform sort */ .L8: pushl %ebx pushl %esi call one_pass addl $8, %esp subl $1, %ebx jne .L8 /* Print out sorted array */ /* - first print title */ pushl %edi pushl $titleStr call printf addl $8, %esp /* - then print each individual element */ movl $0, %ebx .L10: movl (%esi,%ebx,4), %eax pushl %eax pushl $intStr call printf addl $8, %esp addl $1, %ebx cmpl %edi, %ebx jne .L10 /* - then print end-of-line character */ pushl $10 call putchar addl $4, %esp /* destroy stack frame and restore registers */ leave popl %ebx popl %esi ret .section .rodata titleStr: .string "\nDisplaying %d elements of pattern:\n " intStr: .string "%d "