§ Код

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

1        org     100h
2        mov     ax, 0013h
3        int     10h
4        mov     ax, $A000
5        mov     es, ax
6        call    random
7        push    word $0000
8        push    word $ffff
9        call    qsort
10        xor     ax, ax
11        int     16h
12        ret
13
14; Заполнить экран мусором
15random: xor     di, di
16        mov     cx, 32000
17@@:     mul     bx
18        add     ax, cx
19        add     bx, ax
20        add     ax, dx
21        stosw
22        loop    @b
23        ret
24
25; ------------------------------------------------------------------------------
26; Аргументы +6=L, +4=R
27; ------------------------------------------------------------------------------
28
29qsort:  push    bp
30        mov     bp, sp
31        mov     si, [bp+6]      ; a=L
32        mov     di, [bp+4]      ; b=R
33        mov     bx, si
34        add     bx, di
35        rcr     bx, 1           ; bx = (L + R)/2
36        ; ----------------------
37        mov     al, [es:bx]     ; pivot = arr[bx]
38.K1:    inc     si
39        cmp     [es:si-1], al   ; while (arr[a] < pivot) a++
40        jb      .K1
41.K2:    dec     di
42        cmp     [es:di+1], al   ; while (arr[b] > pivot) b--
43        ja      .K2
44        dec     si
45        inc     di
46        cmp     si, di          ; if a <= b: swap arr[a++], arr[b--]
47        ja      .K3
48        mov     ah, [es:si]
49        xchg    ah, [es:di]
50        xchg    ah, [es:si]
51        inc     si
52        dec     di
53        cmp     si, di          ; while a <= b
54        jbe     .K1
55        ; ----------------------
56.K3:    cmp     [bp+6], di      ; if l < b: qsort(l, b)
57        jnb     @f
58        push    word [bp+6]
59        push    di
60        call    qsort
61@@:     cmp     si, [bp+4]      ; if a < r: qsort(a, r)
62        jnb     @f
63        push    si
64        push    word [bp+4]
65        call    qsort
66@@:     pop     bp
67        ret     4