x64平台AT&T汇编实现快速排序函数

来源:互联网 发布:程序员第一天上班想哭 编辑:程序博客网 时间:2024/05/16 12:40

代码如下,思路和c实现大同小异,主要是寄存器的使用以及地址的使用,具体参见注释。

#void qsort(int* start, int* end)                        #start = &a[0], end = &a[n]qsort:lea 4(%rdi), %rax        #tmp = &a[1]cmp %rsi, %rax        #if tmp >= endjge .L4#then returnpushq %rsi#save rsipushq %rdi#save rdimovl (%rdi), %eax        #save first ele.L1:cmp %rsi, %rdi        #if start >= endjge .L2#end loopsubq $4, %rsi        #--endmovl (%rsi), %ecx        #tmp1 = *endcmp %eax, %ecx        #if tmp1 >= a[0]jge .L1#loopmovl %ecx, (%rdi)        #*start = tmp1.L2:cmp %rsi, %rdi        #if start >= endjge .L3#end loopaddq $4, %rdi        #++startmovl (%rdi), %ebx        #tmp2 = *startcmp %eax, %ebx        #if tmp2 <= startjle .L2#loopmovl %ebx, (%rsi)        #*start = *endjmp .L1#loop.L3:#if able to jump out of loop, then start = end = then location they meeted movl %eax, (%rdi)        #*start = tmppopq %rdi#return startpushq %rsi#save end(the meeting place)call qsort#qsort(start, the meeting place)popq %rdi#set start to the meeting placeaddq $4, %rdi        #++startpopq %rsi#recover endcall qsort#qsort(the meeting place, end).L4:ret


0 0
原创粉丝点击