.model small
include IO.ASM
.stack 100h
.data					
    
	per db 10,13,"$"
	str_M db 0B2h,0B2h,0B2h,0B2h,0B2h,0B2h,'  ',"������� 3*3",' ',1h,1h,1h,10,13,"������� ������������� ����� �� 0 �� 9...:$"
	str_M1 db 10,13,"������� ���������",' ',1h,1h,1h,10,13,"������� 'Enter' ��� �����������$"
	str_MIs db 10,13,"�������� �������$"
	str_Mpr db 10,13,"��������������� �������$"
	str_minGK db 10,13,"����������� ������� � ������� ���������, ������ 4 ",10,13,"�� ���������� ������� � ������ ��������� ������ ������$"
	str_minGnK db 10,13,"����������� ������� � ������� ���������, �� ������ 4  ",10,13,"�� ���������� ������� � ������ ��������� ��������� ������ ������$"
	str_minP db 10,13,"����������� ������� � �������� ��������� ",10,13,"�� ���������� ������� � ������ ��������� ��������� ������$"
	err_msg db 10,13,"������ �����! ������� ����� �� 0 �� 255!",10,13,"$"

	array db 3 dup (3 dup (0))
	min db 0
	array_2 db 2 dup (3 dup (6))
	;str_ db 10,13,"$"
	;str_ db 10,13,"$"
	
.code    			
;//////////////////////////////////////////������ ������/////////////////////////////////////// 
macros_vivoda macro per
	mov ah,9h
	lea dx,per 	
	int 21h
endm
;//////////////////////////////////////��������� �����/////////////////////////////////////////////////////// 
vvod proc

xor ax,ax
xor bx,bx
xor cx,cx
	mov cx, 3
	mov bx, 0
next_line1:
	mov si, 0
	push cx
	mov cx, 3
	lea dx, per		; ����� �� ��砫� ����� ��ப�
	mov ah, 9
	int 21h
stroka1:

	jmp skip_error
	error:
		
		lea dx, err_msg 		; ����� �� ��砫� ����� ��ப�
		mov ah, 9
		int 21h
		
		jmp stroka1
	skip_error:

            push si
            inint ax
	pop si	
	cmp ax,0
	jb error
	cmp ax,255
	ja error
            
	mov array[bx][si],al 
	inc si	
loop stroka1
			; �뢮� ��ப� �����襭
	pop cx
	add bx,3
loop next_line1


         
ret
vvod endp
;///////////////////////////////////////����� 2 �� 2///////////////////////////////////////////////////////////////
matr_2 proc

ret
matr_2 endp
;//////////////////////////////////////��������� ������///////////////////////////////////////////////////////

vivod proc


	mov cx, 3
	mov bx, 0
next_line2:

	
	mov si, 0
	push cx
	mov cx, 3
	lea dx, per		; ����� �� ��砫� ����� ��ப�
	mov ah, 9
	int 21h
stroka2:
             
	mov dl, array[bx][si]
        push si
	outint dx
        pop si
	;add dl, 30h
	mov ah, 2				; �뢥�� �������
	;int 21h
   	mov dl,9
	int 21h



	inc si		; ���室 �� ᫥���騩 ������� ��ப�
loop stroka2
			; �뢮� ��ப� �����襭
	pop cx
	add bx,3
loop next_line2
mov ah, 1	; ����প� ��� ����७�� १���� 
int 21h

	ret
vivod endp

;//////////////////////////////////////��������� ������2///////////////////////////////////////////////////////

vivod2 proc



	mov cx, 2
	mov bx, 0
next_line222:
	mov si, 0
	push cx
	mov cx, 3
	lea dx, per		; ����� �� ��砫� ����� ��ப�
	mov ah, 9
	int 21h
stroka222:

        mov dl,array_2[bx][si]
        push si
	outint dx
        pop si
	;mov dl, array_2[bx][si] 		; ������� <=9
	;add dl, 30h
	mov ah, 2				; �뢥�� �������
	;int 21h
   	mov dl,9
	int 21h
	inc si		; ���室 �� ᫥���騩 ������� ��ப�
loop stroka222
			; �뢮� ��ப� �����襭
	pop cx
	add bx,3
loop next_line222
mov ah, 1	; ����প� ��� ����७�� १���� 
int 21h


	ret
vivod2 endp
;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

obraborka1 proc

	mov bx, 0
	mov si, 0
	mov ax,3
	mov di,0
	
	mov dl, array[bx][si]
	mov array_2[0][0],dl 		; ������� <=9
	
	inc si
	inc di
	add bx,3
		
	mov dl, array[bx][si]
	mov array_2[0][1],dl 	

	inc si
	inc di
	add bx,3
		
	mov dl, array[bx][si]
	mov array_2[0][2],dl 


	mov bx, 0
	mov si, 2
	mov ax,0
	mov di,0

	mov dl, array[bx][si]
	mov array_2[3][2],dl 		; ������� <=9
	
	sub si,1
	inc di
	add bx,3

	mov dl, array[bx][si]
	mov array_2[3][1],dl 		; ������� <=9

	sub si,1
	inc di
	add bx,3

	mov dl, array[bx][si]
	mov array_2[3][0],dl 		; ������� <=9

			; ���室 �� ᫥���騩 ������� ��ப�
	


mov ah, 1	; ����প� ��� ����७�� १���� 
int 21h

	ret
obraborka1 endp

;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
poisk_min proc
   push dx
   xor dx,dx
	mov cx, 2
	mov bx, 0
	mov dl,array_2[bx][si]
cikl_min1:
	mov si, 0
	mov di, 0
	push cx
	mov cx, 3
cikl_min2:
        cmp dl,array_2[bx][si]
		jna n
		mov dl,array_2[bx][si]
		mov ax,bx
                        mov di,si  
        n:		
	inc si		
loop cikl_min2
    pop cx
	add bx,3
loop cikl_min1
      ; outint di
	   cmp ax,0
	   jne ne_0
	   test dl,11b
	   jnz ne_kr

    outint di
    cmp di,0
    jne s_1
    mov cl,array[0][0]
    mov array[0][0],dl
    mov array[0][0],cl
    jmp es_1
s_1:
    cmp di,1
    jne s_2
    mov cl,array[0][0]
    mov array[0][0],dl
    mov array[8][0],cl
    jmp es_1
s_2:
    cmp di,2
    jne kon
    mov cl,array[0][0]
    mov array[0][0],dl
    mov array[8][0],cl
es_1:
    lea dx,str_minGK
    mov ah,9h
    int 21h	
jmp kon	   
ne_kr:
    mov cl, array[6][0]
    mov array[6][0],dl
    mov array[bx][si],cl
	lea dx,str_minGnK
    mov ah,9h
    int 21h	
jmp kon
ne_0:

    mov cl, array[0][6]
    mov array[0][6],dl
    mov array[bx][si],cl

	lea dx,str_minP
    mov ah,9h
    int 21h	
kon:	
    pop dx	
ret
poisk_min endp
;////////////////////////////////////////////////////////////////////////////////////////////////
start:				
	mov ax,@data
	mov ds,ax
	
      macros_vivoda str_M

	call vvod
	
	  macros_vivoda str_M1
	call obraborka1

    	call vivod
	newline

call vivod2
    newline
	newline
call poisk_min
call vivod
	xor ax, ax	
	int 16h			  
	
mov ax,4C00h	 	 
	int 21h
end start