sortloop: decq %rdx # decrement the main counter pop %rcx # pop first element movq %rdx, %r9 # prepare counter for inner loop imulq 0x8, %r9 # scale it appropriately innerloop: movq %r9 , %r8 movq %rsp , %r9 # move the pointer to the stack! addq %r8, %r9 cmpq %rcx, %r9 # is this element smaller than the current element jle swap # yes, swap doneswap: cmpq %rsp , %r9 # are we out of elements? jle innerloop # NO! DO IT AGAIN! # otherwise movq $formatp , %rdi # print the output movq %rcx , %rsi # printf("%d\n",rsi); movq $0 , %rax # call printf # cmpq $0 , %rdx # did we have any more elements? je end # no, jump to the end jmp sortloop # yep, go back to the beginning of the main loop swap: push %rcx # save the current value subq 0x8 , %r9 # move the stack pointer forward one element movq %r9 , %rcx # swap elements addq 0x8 , %r9 # move the stack pointer back jmp doneswap # go back to innerloop