Created
April 16, 2011 20:31
-
-
Save dector/923469 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; Denys Mosiuk, IO-92 | |
; KPI 2011 | |
assume cs:code, ds:data, ss:stck | |
.386 | |
dtable struc | |
key db 0 | |
field db 0 | |
dtable ends | |
stck segment stack use16 | |
db 12 dup(?) | |
stck ends | |
data segment use16 | |
var_msg db "Denys Mosiuk, IO-92, 16", '$' | |
table_space dw 7 dup(?) | |
tbl dtable <4,'R'> | |
dtable <6,'E'> | |
dtable <3,'K'> | |
dtable <7,'D'> | |
dtable <5,'T'> | |
dtable <2,'O'> | |
dtable <1,'S'> | |
etbl db '$' | |
tels equ type dtable | |
tbl_size equ (etbl - tbl) / tels | |
data ends | |
code segment use16 | |
beg: | |
mov ax, data ; Init data segment | |
mov ds, ax | |
mov ah, 2 ; === Print variant message | |
lea dx, var_msg | |
int 21h | |
; === Shaker's sort | |
lea si, tbl | |
mov bh, 0 | |
mov bl, tbl_size+1 | |
xor dx, dx | |
l_step: | |
xor ch, ch | |
mov cl, bl | |
sub cl, bh | |
sub cl, 1 | |
cmp cx, 1 | |
jl l_end | |
bt dx, 1 | |
jnc l_right | |
jc l_left | |
l_right: | |
mov dl, 2 | |
l_r_step: | |
mov ah, [si].key | |
cmp ah, [si+tels].key | |
jng l_r_cont | |
xchg ah, [si+tels].key | |
mov [si].key, ah | |
mov ah, [si].field | |
xchg ah, [si+tels].field | |
mov [si].field, ah | |
or dx, 1 | |
l_r_cont: | |
add si, tels | |
loop l_r_step | |
bt dx, 1 | |
jz l_end | |
dec bl | |
sub si, tels | |
jmp l_step | |
l_left: | |
xor dl, dl | |
l_l_step: | |
mov ah, [si].key | |
cmp [si-tels].key, ah | |
jng l_l_cont | |
xchg ah, [si-tels].key | |
mov [si].key, ah | |
mov ah, [si].field | |
xchg ah, [si-tels].field | |
mov [si].field, ah | |
or dx, 1 | |
l_l_cont: | |
sub si, tels | |
loop l_l_step | |
bt dx, 1 | |
jz l_end | |
inc bh | |
add si, tels | |
jmp l_step | |
l_end: | |
int 3 | |
del_pos equ 3 ; === Delete element | |
mov cx, tbl_size | |
sub cx, del_pos | |
inc cx | |
lea si, tbl+del_pos*tels | |
del_loop: | |
mov ah, [si].key | |
mov al, [si].field | |
mov [si-tels].key, ah | |
mov [si-tels].field, al | |
add si, tels | |
loop del_loop | |
ins_pos equ 7 ; === Insert element | |
lea si, tbl+(ins_pos-1)*tels | |
mov [si].key, 8 | |
mov [si].field, '!' | |
mov ax, 4c00h ; === Exit to DOS | |
int 21h | |
code ends | |
end beg |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment