Advertisement
Guest User

Untitled

a guest
Feb 19th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .model small  
  2. .stack 100h    
  3. .data          
  4. table_1 db  '0123456789ABCDEF'
  5. string_1 db 'h  $'; строка-разделитель чисел при выводе на экран
  6. array dw 10 dup (200 dup (1234))
  7.       dw 20 dup (200 dup (5678))
  8.       dw 80 dup (200 dup (8901))
  9.  
  10.        cols equ 200
  11.        rows equ 110
  12. MAX dw ?
  13. IndexMaxCol dw ?
  14. IndexMaxRow dw ?
  15. strMax      DB 13,10,"Max value: ","$"
  16. strIndexMaxRow DB 13,10,"Index of Row Max value: ","$"
  17. strIndexMaxCol DB 13,10,"Index of Col Max value: ","$"
  18. .code
  19. org 100h
  20. Start:          
  21.    
  22.     mov ax,@data
  23.     mov ds,ax ; настройка DS на начало сегмента данных    
  24.     xor ax,ax ; обнуление ax
  25.    
  26.     lea si,array ; si указывает на первый элемент матрицы
  27.     mov cx,rows ; в cx количество строк
  28.  
  29.     xor bx,bx ; обнуление bx
  30.     mov ax,array[bx][si] ; в ax первое значение матрицы
  31.     mov MAX,ax ; за максимум принимаем первый элемент
  32.  
  33. ;цикл по строкам    
  34. RowLoop:
  35.     xor si,si ; обнуление si
  36.     push cx ; сохраняем счетчик по строкам в стеке
  37.     mov cx,cols ; cx = количество столбцов
  38.  
  39. ;цикл по столбцам    
  40. ColLoop:
  41.     mov ax,array[bx][si] ; ax = элементу матрицы
  42.     cmp MAX,ax ; сравниваем MAX с элементов матрицы
  43.    
  44.     ;если MAX больше ax, то увеличиваем si на 2 и идем дальше
  45.     JG NOCHANGE
  46.    
  47.     ;иначе заменяем MAX на ax, запоминаем индексы строки и столбца
  48.     ;увеличиваем si и идем дальше по всем столбцам
  49.     mov MAX,ax ; MAX = элементу матрицы
  50.     mov IndexMaxRow,bx ; IndexMaxRow = индексу строки
  51.     mov IndexMaxCol,si ; IndexMaxCol = индексу столбца
  52.     add si,2 ; si + 2 -> переход на следующий столбец
  53.     loop ColLoop ; пока cx не нуль -> зацикливание ColLoop
  54.    
  55.     xor ax,ax
  56.     mov ax,cols*2 ; ax = количество столбцов * 2
  57.     add bx,ax ; bx указывает на следующую строку
  58.     pop cx ; извлекаем из стека счетчик по строкам
  59.     loop RowLoop ; пока cx не нуль -> зацикливание RowLoop
  60.     jmp OutputExit ; переходим на метку OutputExit, если прошли все строки
  61. NOCHANGE:
  62.     add si,2 ; si + 2 -> переход на следующий столбец
  63.     loop ColLoop ; пока cx не нуль -> зацикливание ColLoop
  64.     mov ax,cols*2 ; ax = количество столбцов * 2
  65.     add bx,ax ; bx указывает на следующую строку
  66.     pop cx ; извлекаем из стека счетчик по строкам
  67.     loop RowLoop ; пока cx не нуль -> зацикливание RowLoop
  68.    
  69. OutputExit:    
  70.     ;вывод строки strIndexMaxRow
  71.     xor ax,ax ; обнуление ax  
  72.     mov ah,09h
  73.     lea dx,strIndexMaxRow
  74.     int 21h
  75.    
  76.     ;вывод IndexMaxRow
  77.     ;xor ax,ax ; обнуление ax
  78.     ;mov ah,02h ; DOS функция вывода строки на экран
  79.     ; mov dx,IndexMaxRow
  80.     ;  int 21h
  81.    
  82.     mov ax,IndexMaxRow
  83.     call vivod    
  84.  
  85.     ;вывод строки strIndexMaxCol
  86.     xor ax,ax  ; обнуление ax
  87.     mov ah,09h ; DOS функция вывода строки на экран
  88.     lea dx,strIndexMaxCol
  89.     int 21h
  90.    
  91.     ;вывод IndexMaxRow
  92.     ;xor ax,ax  ; обнуление ax
  93.     ;mov ah,02h
  94.     ;mov dx,IndexMaxCol
  95.     ;int 21h
  96.    
  97.     mov ax,IndexMaxCol
  98.     call vivod
  99.    
  100.     ;вывод строки strMax
  101.     xor ax,ax  ; обнуление ax  
  102.     mov ah,09h ; DOS функция вывода строки на экран
  103.     lea dx,strMax
  104.     int 21h
  105.    
  106.     ;вывод MAX
  107.     ;xor ax,ax  ; обнуление ax
  108.     ;mov ah,02h
  109.     ; mov dx,MAX
  110.     ;int 21h
  111.     mov ax,MAX
  112.     call vivod
  113.    
  114.     ;exit
  115.     mov ax,4C00h    
  116.     int 21h
  117.  
  118.  
  119.     vivod proc
  120.         push cx
  121.         push bx
  122.         mov bx,offset table_1 ;загрузка в bx адреса таблицы перекодировки
  123.         mov cl,12
  124. vivod_1r:    
  125.         push ax
  126.         shr ax,cl
  127.         and al,00001111b
  128.         xlat;переводим al согласно таблице преобразований в bx
  129.         mov ah,02h    ;вывод символа на экран
  130.         mov dl,al     ;
  131.         int 21h       ;
  132.         pop ax
  133.         sub cl,4
  134.         jns vivod_1r
  135.     pop bx
  136.     pop cx  
  137.  ret
  138. vivod  ENDP
  139. End Start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement