§ Код

Этот код создан на основе алгоритма быстрой сортировки и он сортирует рандомные пиксели на экране.

        org     100h
        mov     ax, 0013h
        int     10h
        mov     ax, $A000
        mov     es, ax
        call    random
        push    word $0000
        push    word $ffff
        call    qsort
        xor     ax, ax
        int     16h
        ret

; Заполнить экран мусором
random: xor     di, di
        mov     cx, 32000
@@:     mul     bx
        add     ax, cx
        add     bx, ax
        add     ax, dx
        stosw
        loop    @b
        ret

; ------------------------------------------------------------------------------
; Аргументы +6=L, +4=R
; ------------------------------------------------------------------------------

qsort:  push    bp
        mov     bp, sp
        mov     si, [bp+6]      ; a=L
        mov     di, [bp+4]      ; b=R
        mov     bx, si
        add     bx, di
        rcr     bx, 1           ; bx = (L + R)/2
        ; ----------------------
        mov     al, [es:bx]     ; pivot = arr[bx]
.K1:    inc     si
        cmp     [es:si-1], al   ; while (arr[a] < pivot) a++
        jb      .K1
.K2:    dec     di
        cmp     [es:di+1], al   ; while (arr[b] > pivot) b--
        ja      .K2
        dec     si
        inc     di
        cmp     si, di          ; if a <= b: swap arr[a++], arr[b--]
        ja      .K3
        mov     ah, [es:si]
        xchg    ah, [es:di]
        xchg    ah, [es:si]
        inc     si
        dec     di
        cmp     si, di          ; while a <= b
        jbe     .K1
        ; ----------------------
.K3:    cmp     [bp+6], di      ; if l < b: qsort(l, b)
        jnb     @f
        push    word [bp+6]
        push    di
        call    qsort
@@:     cmp     si, [bp+4]      ; if a < r: qsort(a, r)
        jnb     @f
        push    si
        push    word [bp+4]
        call    qsort
@@:     pop     bp
        ret     4