Skip to content

Instantly share code, notes, and snippets.

@dector
Created April 16, 2011 20:31
Show Gist options
  • Save dector/923469 to your computer and use it in GitHub Desktop.
Save dector/923469 to your computer and use it in GitHub Desktop.
; 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