.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