В матрице найти сумму элементов строки, в которой расположен элемент с наименьшим значением - Assembler
Формулировка задачи:
В данной целочисленной квадратной матрице порядка n найти сумму элементов
строки, в которой расположен элемент с наименьшим значением. Предполагается, что
такой элемент единствен.
Решение задачи: «В матрице найти сумму элементов строки, в которой расположен элемент с наименьшим значением»
textual
Листинг программы
@stack segment para stack db 1024 dup(?) @stack ends @data segment N dw 4 Matrix dw 12, 88, 64, 52 dw 52, 7, 14, 98 dw 78, 16, 17, 91 dw 10, 87, 62, 63 Sum dw ? RowMin dw ? Min dw ? MsgMin db 'Min: ', '$' MsgRow db 'In Row (form 0 based): ', '$' MsgSum db 'Summa: ', '$' CrLf db 0Dh, 0Ah, '$' @data ends @code segment assume cs:@code, ds:@data, ss:@stack main proc ;инициализация сегментного регистра данных mov ax, @data mov ds, ax ;поиск строки с наименьшим элементом mov ax, [N] mov cx, 2 mul cx mov dx, ax ;dx - размер строки матрицы lea bx, [Matrix] mov ax, [bx] ;Min:=Matrix[0,0] - т.е. ax это Min mov di, 0 ;RowMin:=0 mov [RowMin], di mov cx, [N] ;for i:=0 to N-1 @@ForI: mov si, 0 ; for j:=0 to N-1 push cx mov cx, [N] @@ForJ: cmp ax, [bx+si] ; if Min>Matrix[i,j] jle @@NextJ ; then mov [RowMin], di ; RowMin:=i mov ax, [bx+si] ; Min:=Matrix[i,j] @@NextJ: add si, 2 ; j:=j+1 loop @@ForJ pop cx add bx, dx ;i:=i+1 inc di loop @@ForI ;сохранение результатов mov [Min], ax ;вычисление суммы строки с минимальным элементом lea bx, [Matrix] mov ax, [RowMin] ;адрес строки равен номеру, mul dx ;умноженному на размер строки mov si, ax mov ax, 0 ;Sum:=0 mov cx, [N] @@ForSum: add ax, [bx+si] add si, 2 loop @@ForSum mov [Sum], ax ;вывод результата mov ah, 09h lea dx, [MsgMin] int 21h mov ax, [Min] call Show_AX mov ah, 09h lea dx, [CrLf] int 21h mov ah, 09h lea dx, [MsgRow] int 21h mov ax, RowMin call Show_AX mov ah, 09h lea dx, [CrLf] int 21h mov ah, 09h lea dx, [MsgSum] int 21h mov ax, [Sum] call Show_AX mov ah, 09h lea dx, [CrLf] int 21h ;завершение программы mov ax, 4C00h int 21h main endp ; выводит знаковое 16-разрядное число из регистра AX на экран ; входные данные: ; ax - число для отображения Show_AX proc push ax push bx push cx push dx push di mov cx, 10 xor di, di ; di - кол. цифр в числе ; если число в ax отрицательное, то ;1) напечатать '-' ;2) сделать ax положительным or ax, ax jns @@Conv push ax mov dx, '-' mov ah, 2 ; ah - функция вывода символа на экран int 21h pop ax neg ax @@Conv: xor dx, dx div cx ; dl = num mod 10 add dl, '0' ; перевод в символьный формат inc di push dx ; складываем в стек or ax, ax jnz @@Conv ; выводим из стека на экран @@Show: pop dx ; dl = очередной выводимый символ mov ah, 2 ; ah - функция вывода символа на экран int 21h dec di ; повторяем пока di<>0 jnz @@Show pop di pop dx pop cx pop bx pop ax ret Show_AX endp @code ends end main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д