On the topic of sorting, I came across something cool the other day in Michael Abrash's Graphics Programming Black Book that I thought I'd share: a 25-byte long integer sort routine (that is to say, the routine itself is only 25 bytes long).
Here it is, your Moment of Zen:
;---------------------------------------------------------------
; Sorts an array of ints. C-callable (small model). 25 bytes.
; void sort (int n, int a[]);
;
; Courtesy of David Stafford.
;---------------------------------------------------------------
.model small
.code
public _sort
top: mov dx,[bx] ; swap two adjacent ints
xchg dx,[bx+2]
xchg dx,[bx]
cmp dx,[bx] ; did we put them in the right order?
jl top ; no, swap them back
inc bx ; go to the next integer
inc bx
loop top
_sort: pop dx ; get return address (entry point)
pop cx ; get count
pop bx ; get pointer
push bx ; restore pointer
dec cx ; decrement count
push cx ; save count
push dx ; save return address
jg top ; if cx > 0
ret
end
No comments:
Post a Comment