.model small
.stack 100h
.data
str1 db 'Element $'
str2 db 'Vvedite matricu:$'
str3 db 'Ishodnaya matrica:$'
str4 db 'Resultat$'
error db 'Neverniy symvol !$'
caret db 0Ah,0Dh,'$'
mas dw 16 dup (0)
.code
; vvod matricy
Input PROC
mov ah,09h
mov dx,offset str2
int 21h
mov dx,offset caret
int 21h
int 21h
xor di,di ; obnulyaem indeks
mov cx,10h ; kol-vo elem matricy 16
mov bx,0 ; flag polozhitelnogo
in_elem:
xor dx,dx
mov ah,09h
mov dx,offset str1
int 21h
mov bx,0
l1:
mov ah,01h ; vvod simvola al=kod simvola
int 21h
cmp al,0Dh ; esli enter
je next
cmp al,30h
jb err_label ;esli < 0
cmp al,39h
ja err_label ; esli > 9
xor ah,ah
sub ax,30h ; otnyat' kod '0'
push ax
mov ax, bx
mov bx,0Ah ; umnozhit' na 10
mul bx
mov bx, ax
pop ax
add bx, ax
jmp l1
next:
mov mas[di],bx
add di,2 ; dobavit' 2 bayta (dw)
mov dx,offset caret
mov ah,09h
int 21h
loop in_elem
jmp label_1
err_label:
mov ah,09h
mov dx,offset caret
int 21h
mov dx,offset error
int 21h
mov dx,offset caret
int 21h
jmp in_elem
label_1:
ret
ENDP
; vivod matricy
Output PROC
xor si,si
mov cx,10h
mov bx,1
out_elem:
jcxz label_2 ; esli cx=0
push bx ; sohranit' nomer elementa
xor ax,ax
xor dx,dx
mov ax,offset mas[si]
m1:
xor bx,bx
mov bl,0Ah
div bl ; result v al, ostatok v ah
mov bl,ah
add bx,30h ; chislo v simvol
push bx ; simvol v stek
inc dx
xor ah,ah
cmp ax,0
je m2
jmp m1
m2:
pop ax ; simvol iz steka
xchg ax,dx ; v ax schetchik, v dx simvol
push ax
mov ah,02h
int 21h
pop dx
dec dx ;
cmp dx,0 ;
je m4
jmp m2
m4:
mov dx,20h ; probel
mov ah,02h
int 21h
pop bx
cmp bx,4 ; posle 4 elementa perevod stroki
je perevod
jmp m3
perevod:
mov dx,offset caret
mov ah,09h
int 21h
mov bx,0
m3:
inc bx
add si,2
loop out_elem
label_2:
ret
ENDP
; sortirovka
Sort PROC
xor si,si
mov di,2
loop1:
mov ax,mas[si]
mov dx,mas[di]
cmp ax,dx
ja change
cmp di,16*2 ; esli posledniy element
je loop3
loop2:
add di,2
jmp loop1
loop3:
cmp si,14*2 ; esli predposledniy element
je exit
add si,2
mov di,si
add di,2
jmp loop1
change:
xchg ax,dx
mov mas[si],ax
mov mas[di],dx
jmp loop2
exit:
ret
ENDP
; NACHALO
start :
mov ax,@data
mov ds,ax
mov es,ax
call Input
; ochistka ekrana
mov ax,0600h ; ah=06 - prokrutka,
; al=00 - ves' ekran
mov bh,07 ; normal atribut (black-white)
mov cx,0 ; verch - levo
mov dx,184Fh ; niz - pravo
int 10h ; BIOS
; ustanovka kursora
mov ah,02h ; func BIOS
mov bh,0 ; ekran 0
mov dx,0 ; dh - stroka , dl - stolbec
int 10h
mov ah,09h
mov dx,offset str3
int 21h
mov dx,offset caret
int 21h
int 21h
call Output
call Sort
mov ah,09h
mov dx,offset caret
int 21h
mov dx,offset str4
int 21h
mov dx,offset caret
int 21h
int 21h
call Output
mov ax,4C00h
int 21h
end start