Small bubble sort | Assembler/80386 |
Small bubble sort
Andrew Howe, from Core Designs (makers of Tomb Raider), sent me (Paul Hsieh) an extremely short sort loop. Originally written for WATCOM C/C++, I have stripped off the cruft so that you can see it here in its most optimal form.;
; bubble sort
;
; input:
; edi = pointer to array
; ecx = number of indexes
;
; output:
; edi = pointer to sorted array
;
; destroys:
; eax, edx
; eflags
;
outerloop:
lea ebx,[edi+ecx*4]
mov eax,[edi]
cmploop:
sub ebx,4
cmp eax,[ebx]
jle notyet
xchg eax,[ebx]
notyet:
cmp ebx,edi
jnz cmploop
stods
loop outerloop
Notice the use of xchg, stosd, and loop, something you just wont see from C compilers. I did not bother working out the timings of this routine, simply because its a bubble sort. If you are concerned about asymptotic performance, you should be using another algorithm such as mergesort or radix sort.