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