Advertisement
Guest User

Untitled

a guest
Feb 18th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .model small  
  2. .stack 100h    
  3. .data          
  4. array dw 57, 54, 12
  5.       dw 13, 51, 25
  6.       dw 16, 52, 53
  7. cols equ 3
  8. rows equ 3
  9. MAX dw ?
  10. IndexMaxCol dw ?
  11. IndexMaxRow dw ?
  12. strMax      DB 13,10,"Max value: ","$"
  13. strIndexMaxRow DB 13,10,"Index of Row Max value: ","$"
  14. strIndexMaxCol DB 13,10,"Index of Col Max value: ","$"
  15. .code
  16. org 100h
  17. Start:          
  18.    
  19.     mov ax,@data
  20.     mov ds,ax ; настройка DS на начало сегмента данных    
  21.     xor ax,ax ; обнуление ax
  22.    
  23.     lea si,array ; si указывает на первый элемент матрицы
  24.     mov cx,rows ; в cx количество строк
  25.  
  26.     xor bx,bx ; обнуление bx
  27.     mov ax,array[bx][si] ; в ax первое значение матрицы
  28.     mov MAX,ax ; за максимум принимаем первый элемент
  29.  
  30. ;цикл по строкам    
  31. RowLoop:
  32.     xor si,si ; обнуление si
  33.     push cx ; сохраняем счетчик по строкам в стеке
  34.     mov cx,cols ; cx = количество столбцов
  35.  
  36. ;цикл по столбцам    
  37. ColLoop:
  38.     mov ax,array[bx][si] ; ax = элементу матрицы
  39.     cmp MAX,ax ; сравниваем MAX с элементов матрицы
  40.    
  41.     ;если MAX больше ax, то увеличиваем si на 2 и идем дальше
  42.     JG NOCHANGE
  43.    
  44.     ;иначе заменяем MAX на ax, запоминаем индексы строки и столбца
  45.     ;увеличиваем si и идем дальше по всем столбцам
  46.     mov MAX,ax ; MAX = элементу матрицы
  47.     mov IndexMaxRow,bx ; IndexMaxRow = индексу строки
  48.     mov IndexMaxCol,si ; IndexMaxCol = индексу столбца
  49.     add si,2 ; si + 2 -> переход на следующий столбец
  50.     loop ColLoop ; пока cx не нуль -> зацикливание ColLoop
  51.    
  52.     xor ax,ax
  53.     mov ax,cols*2 ; ax = количество столбцов * 2
  54.     add bx,ax ; bx указывает на следующую строку
  55.     pop cx ; извлекаем из стека счетчик по строкам
  56.     loop RowLoop ; пока cx не нуль -> зацикливание RowLoop
  57.     jmp OutputExit ; переходим на метку OutputExit, если прошли все строки
  58. NOCHANGE:
  59.     add si,2 ; si + 2 -> переход на следующий столбец
  60.     loop ColLoop ; пока cx не нуль -> зацикливание ColLoop
  61.     mov ax,cols*2 ; ax = количество столбцов * 2
  62.     add bx,ax ; bx указывает на следующую строку
  63.     pop cx ; извлекаем из стека счетчик по строкам
  64.     loop RowLoop ; пока cx не нуль -> зацикливание RowLoop
  65.    
  66. OutputExit:    
  67.     ;вывод строки strIndexMaxRow
  68.     xor ax,ax ; обнуление ax  
  69.     mov ah,09h
  70.     lea dx,strIndexMaxRow
  71.     int 21h
  72.    
  73.     ;вывод IndexMaxRow
  74.     xor ax,ax ; обнуление ax
  75.     mov ah,02h ; DOS функция вывода строки на экран
  76.     mov dx,IndexMaxRow
  77.     int 21h
  78.    
  79.     ;вывод строки strIndexMaxCol
  80.     xor ax,ax  ; обнуление ax
  81.     mov ah,09h ; DOS функция вывода строки на экран
  82.     lea dx,strIndexMaxCol
  83.     int 21h
  84.    
  85.     ;вывод IndexMaxRow
  86.     xor ax,ax  ; обнуление ax
  87.     mov ah,02h
  88.     mov dx,IndexMaxCol
  89.     int 21h
  90.    
  91.     ;вывод строки strMax
  92.     xor ax,ax  ; обнуление ax  
  93.     mov ah,09h ; DOS функция вывода строки на экран
  94.     lea dx,strMax
  95.     int 21h
  96.    
  97.     ;вывод MAX
  98.     xor ax,ax  ; обнуление ax
  99.     mov ah,02h
  100.     mov dx,MAX
  101.     int 21h
  102.    
  103.     ;exit
  104.     mov ax,4C00h    
  105.     int 21h    
  106.  
  107. End Start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement