StoneHaos

mysist7

May 11th, 2021 (edited)
974
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. include io.asm
  2.  
  3. sstack segment stack
  4.     db 128 dup(?)
  5. sstack ends
  6.  
  7. sdata segment
  8.     n db 0
  9.     m db 0
  10.     max dw 0
  11.     matrix dw 100 dup(?)
  12.  
  13.     inputn db "Input n>", "$"
  14.     inputm db "Input m>", "$"
  15.     inpute db "Input matrix:", 0ah, "$"
  16.     maxout db "Max Sum>", "$"
  17.     errormsg db "Error", "$"
  18. sdata ends
  19.  
  20. scode segment
  21. .386
  22.     assume cs:scode, ds:sdata, ss:sstack
  23. jmp start
  24.  
  25. ; Максимальный элемент
  26. ; Функция возвращает максимальный элемент из 2, аргументы передаются через стек
  27. max_element:
  28.     push bp
  29.     push bx
  30.     mov bp,sp
  31.     ; Первый аргумент по смещению 6 (по смещению 0: bx, 2: bp, 4: ip), второй по смещению 8
  32.     mov ax,[bp+6]
  33.     mov bx,[bp+8]
  34.     cmp ax,bx
  35.     ja __end_max_element
  36.     mov ax,bx
  37.     __end_max_element:
  38.     pop bx
  39.     pop bp
  40.     ret 4
  41.  
  42. ; Сумма элементов
  43. ; Сумма двухбайтовых значений от адреса начала до адреса конца
  44. sum_elements:
  45.     push bp
  46.     push bx
  47.     push cx
  48.     mov bp,sp
  49.     mov ax,[bp+8]
  50.     mov bx,[bp+10]
  51.     sub bx,ax
  52.     shr bx,1
  53.     mov cx,bx
  54.     xchg ax,bx
  55.     mov ax,0
  56.     cycle_sum_elements:
  57.         add ax,[bx]
  58.         inc bx
  59.         inc bx
  60.         loop cycle_sum_elements
  61.     pop cx
  62.     pop bx
  63.     pop bp
  64.     ret 4
  65.  
  66. start:
  67.     ; Установка сегмента данных
  68.     push sdata
  69.     pop ds
  70.  
  71.     ; Ввод n
  72.     mov dx,offset inputn
  73.     outstr
  74.     inint ax
  75.     cmp ax,10
  76.     ja error
  77.     mov [n],al
  78.  
  79.     ; Ввод m
  80.     mov dx,offset inputm
  81.     outstr
  82.     inint ax
  83.     cmp ax,10
  84.     ja error
  85.     mov [m],al
  86.  
  87.     ; Ввод матрицы
  88.     mov dx,offset inpute
  89.     outstr
  90.     xor ax,ax
  91.     mov al,[n]
  92.     xor bx,bx
  93.     mov bl,[m]
  94.     mul bl
  95.     mov cx,ax
  96.     mov bx,offset matrix
  97.     cycle1:
  98.         inint ax
  99.         mov [bx],ax
  100.         inc bx
  101.         inc bx
  102.         loop cycle1
  103.  
  104.     ; Вывод матрицы
  105.     newline
  106.     mov bx,offset matrix
  107.     xor cx,cx
  108.     mov cl,[n]
  109.     cycle2:
  110.         push cx
  111.         xor cx,cx
  112.         mov cl,[m]
  113.         cycle2_1:
  114.             outword [bx]
  115.             outch " "
  116.             inc bx
  117.             inc bx
  118.             loop cycle2_1
  119.         newline
  120.         pop cx
  121.         loop cycle2
  122.  
  123.  
  124.     ; Подсчёт максимальной суммы по строке
  125.     newline
  126.     mov bx,offset matrix
  127.     xor cx,cx
  128.     mov cl,[n]
  129.     cycle3:
  130.         xor ax,ax
  131.         mov al,[m]
  132.         shl ax,1
  133.         mov di,ax
  134.         mov dx,bx
  135.         add dx,di
  136.         push dx
  137.         push bx
  138.         call sum_elements
  139.         outword ax
  140.         newline
  141.         push [max]
  142.         push ax
  143.         call max_element
  144.         mov [max],ax
  145.         add bx,di
  146.         loop cycle3
  147.  
  148.  
  149.     ; Вывод результата
  150.     newline
  151.     mov dx,offset maxout
  152.     outstr
  153.     outword [max]
  154.     jmp finishprog
  155.  
  156. error:
  157.     mov dx,offset errormsg
  158.     outstr
  159.  
  160. finishprog:
  161.     finish
  162.  
  163. scode ends
  164. end start
RAW Paste Data Copied