Лисья Нора

§ Программный код

Этот код создан на основе алгоритма быстрой сортировки и он сортирует рандомные пиксели на экране.
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