Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .model small
- .stack 100h
- .data
- table_1 db '0123456789ABCDEF'
- string_1 db 'h $'; строка-разделитель чисел при выводе на экран
- array dw 10 dup (200 dup (1234))
- dw 20 dup (200 dup (5678))
- dw 80 dup (200 dup (8901))
- cols equ 200
- rows equ 110
- MAX dw ?
- IndexMaxCol dw ?
- IndexMaxRow dw ?
- strMax DB 13,10,"Max value: ","$"
- strIndexMaxRow DB 13,10,"Index of Row Max value: ","$"
- strIndexMaxCol DB 13,10,"Index of Col Max value: ","$"
- .code
- org 100h
- Start:
- mov ax,@data
- mov ds,ax ; настройка DS на начало сегмента данных
- xor ax,ax ; обнуление ax
- lea si,array ; si указывает на первый элемент матрицы
- mov cx,rows ; в cx количество строк
- xor bx,bx ; обнуление bx
- mov ax,array[bx][si] ; в ax первое значение матрицы
- mov MAX,ax ; за максимум принимаем первый элемент
- ;цикл по строкам
- RowLoop:
- xor si,si ; обнуление si
- push cx ; сохраняем счетчик по строкам в стеке
- mov cx,cols ; cx = количество столбцов
- ;цикл по столбцам
- ColLoop:
- mov ax,array[bx][si] ; ax = элементу матрицы
- cmp MAX,ax ; сравниваем MAX с элементов матрицы
- ;если MAX больше ax, то увеличиваем si на 2 и идем дальше
- JG NOCHANGE
- ;иначе заменяем MAX на ax, запоминаем индексы строки и столбца
- ;увеличиваем si и идем дальше по всем столбцам
- mov MAX,ax ; MAX = элементу матрицы
- mov IndexMaxRow,bx ; IndexMaxRow = индексу строки
- mov IndexMaxCol,si ; IndexMaxCol = индексу столбца
- add si,2 ; si + 2 -> переход на следующий столбец
- loop ColLoop ; пока cx не нуль -> зацикливание ColLoop
- xor ax,ax
- mov ax,cols*2 ; ax = количество столбцов * 2
- add bx,ax ; bx указывает на следующую строку
- pop cx ; извлекаем из стека счетчик по строкам
- loop RowLoop ; пока cx не нуль -> зацикливание RowLoop
- jmp OutputExit ; переходим на метку OutputExit, если прошли все строки
- NOCHANGE:
- add si,2 ; si + 2 -> переход на следующий столбец
- loop ColLoop ; пока cx не нуль -> зацикливание ColLoop
- mov ax,cols*2 ; ax = количество столбцов * 2
- add bx,ax ; bx указывает на следующую строку
- pop cx ; извлекаем из стека счетчик по строкам
- loop RowLoop ; пока cx не нуль -> зацикливание RowLoop
- OutputExit:
- ;вывод строки strIndexMaxRow
- xor ax,ax ; обнуление ax
- mov ah,09h
- lea dx,strIndexMaxRow
- int 21h
- ;вывод IndexMaxRow
- ;xor ax,ax ; обнуление ax
- ;mov ah,02h ; DOS функция вывода строки на экран
- ; mov dx,IndexMaxRow
- ; int 21h
- mov ax,IndexMaxRow
- call vivod
- ;вывод строки strIndexMaxCol
- xor ax,ax ; обнуление ax
- mov ah,09h ; DOS функция вывода строки на экран
- lea dx,strIndexMaxCol
- int 21h
- ;вывод IndexMaxRow
- ;xor ax,ax ; обнуление ax
- ;mov ah,02h
- ;mov dx,IndexMaxCol
- ;int 21h
- mov ax,IndexMaxCol
- call vivod
- ;вывод строки strMax
- xor ax,ax ; обнуление ax
- mov ah,09h ; DOS функция вывода строки на экран
- lea dx,strMax
- int 21h
- ;вывод MAX
- ;xor ax,ax ; обнуление ax
- ;mov ah,02h
- ; mov dx,MAX
- ;int 21h
- mov ax,MAX
- call vivod
- ;exit
- mov ax,4C00h
- int 21h
- vivod proc
- push cx
- push bx
- mov bx,offset table_1 ;загрузка в bx адреса таблицы перекодировки
- mov cl,12
- vivod_1r:
- push ax
- shr ax,cl
- and al,00001111b
- xlat;переводим al согласно таблице преобразований в bx
- mov ah,02h ;вывод символа на экран
- mov dl,al ;
- int 21h ;
- pop ax
- sub cl,4
- jns vivod_1r
- pop bx
- pop cx
- ret
- vivod ENDP
- End Start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement