Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- include io.asm
- sstack segment stack
- db 128 dup(?)
- sstack ends
- sdata segment
- n db 0
- m db 0
- max dw 0
- matrix dw 100 dup(?)
- inputn db "Input n>", "$"
- inputm db "Input m>", "$"
- inpute db "Input matrix:", 0ah, "$"
- maxout db "Max Sum>", "$"
- errormsg db "Error", "$"
- sdata ends
- scode segment
- .386
- assume cs:scode, ds:sdata, ss:sstack
- jmp start
- ; Максимальный элемент
- ; Функция возвращает максимальный элемент из 2, аргументы передаются через стек
- max_element:
- push bp
- push bx
- mov bp,sp
- ; Первый аргумент по смещению 6 (по смещению 0: bx, 2: bp, 4: ip), второй по смещению 8
- mov ax,[bp+6]
- mov bx,[bp+8]
- cmp ax,bx
- ja __end_max_element
- mov ax,bx
- __end_max_element:
- pop bx
- pop bp
- ret 4
- ; Сумма элементов
- ; Сумма двухбайтовых значений от адреса начала до адреса конца
- sum_elements:
- push bp
- push bx
- push cx
- mov bp,sp
- mov ax,[bp+8]
- mov bx,[bp+10]
- sub bx,ax
- shr bx,1
- mov cx,bx
- xchg ax,bx
- mov ax,0
- cycle_sum_elements:
- add ax,[bx]
- inc bx
- inc bx
- loop cycle_sum_elements
- pop cx
- pop bx
- pop bp
- ret 4
- start:
- ; Установка сегмента данных
- push sdata
- pop ds
- ; Ввод n
- mov dx,offset inputn
- outstr
- inint ax
- cmp ax,10
- ja error
- mov [n],al
- ; Ввод m
- mov dx,offset inputm
- outstr
- inint ax
- cmp ax,10
- ja error
- mov [m],al
- ; Ввод матрицы
- mov dx,offset inpute
- outstr
- xor ax,ax
- mov al,[n]
- xor bx,bx
- mov bl,[m]
- mul bl
- mov cx,ax
- mov bx,offset matrix
- cycle1:
- inint ax
- mov [bx],ax
- inc bx
- inc bx
- loop cycle1
- ; Вывод матрицы
- newline
- mov bx,offset matrix
- xor cx,cx
- mov cl,[n]
- cycle2:
- push cx
- xor cx,cx
- mov cl,[m]
- cycle2_1:
- outword [bx]
- outch " "
- inc bx
- inc bx
- loop cycle2_1
- newline
- pop cx
- loop cycle2
- ; Подсчёт максимальной суммы по строке
- newline
- mov bx,offset matrix
- xor cx,cx
- mov cl,[n]
- cycle3:
- xor ax,ax
- mov al,[m]
- shl ax,1
- mov di,ax
- mov dx,bx
- add dx,di
- push dx
- push bx
- call sum_elements
- outword ax
- newline
- push [max]
- push ax
- call max_element
- mov [max],ax
- add bx,di
- loop cycle3
- ; Вывод результата
- newline
- mov dx,offset maxout
- outstr
- outword [max]
- jmp finishprog
- error:
- mov dx,offset errormsg
- outstr
- finishprog:
- finish
- scode ends
- end start
Add Comment
Please, Sign In to add comment