Нахождение в прямоугольной матрице номера строки, имеющей максимальную сумму элементов - Assembler
Формулировка задачи:
Написать и протестировать функцию для нахождения в прямоугольной матрице
номера строки, имеющей максимальную сумму элементов. Необходимо компилировать на emu8086
Спасибо за ранее
Решение задачи: «Нахождение в прямоугольной матрице номера строки, имеющей максимальную сумму элементов»
textual
Листинг программы
.model tiny .code org 100h start: lea si,arr mov cx,n row: push cx xor bx,bx mov cx,m col: lodsw add bx,ax loop col cmp bx,max jle skip pop cx mov max,bx mov dx,n sub dx,cx push cx skip: pop cx loop row int 20h n equ 3 m equ 4 max dw 0 arr dw 1,2,3,4 dw 5,6,7,8 dw 9,0,1,2 end start
Объяснение кода листинга программы
Выполняемый файл программы на языке ассемблера, написанной под MS-DOS, содержит следующие операции:
- .model tiny — устанавливает модель памяти, необходимую для работы программы. В данном случае используется модель tiny, что означает, что для программы будет выделен сегмент размером 16 Кбайт.
- .code — сегмент, в котором будет размещен машинный код программы.
- start: — метка начала работы программы.
- lea si,arr — регистр SI ссылается на массив arr.
- mov cx,n — регистр CX содержит количество строк в матрице.
- row: — метка начала цикла по строкам матрицы.
- push cx — сохраняет значение регистра CX в стеке.
- xor bx,bx — регистр BX инактивируется.
- mov cx,m — регистр CX содержит количество столбцов в матрице.
- col: — метка начала цикла по столбцам матрицы.
- lodsw — загрузка двух слов из массива в регистры AX и BX.
- add bx,ax — сумма элементов матрицы сохраняется в регистре BX.
- loop col — цикл по столбцам продолжается до тех пор, пока не будет выполнено условие.
- cmp bx,max — сравнивает сумму элементов текущей строки с максимальным значением.
- jle skip — если текущая сумма меньше максимального значения, то переходим к следующей строке.
- pop cx — восстанавливаем значение регистра CX из стека.
- mov max,bx — максимальное значение присваивается значению регистра BX.
- mov dx,n — регистр DX содержит количество строк в матрице.
- sub dx,cx — вычитает количество строк из количества столбцов.
- push cx — сохраняет значение регистра CX в стеке.
- skip: — метка начала обработки следующей строки.
- pop cx — восстанавливаем значение регистра CX из стека.
- loop row — цикл по строкам продолжается до тех пор, пока не будет выполнено условие.
- int 20h — завершение работы программы и выход в DOS.
- n equ 3 — количество строк в матрице.
- m equ 4 — количество столбцов в матрице.
- max dw 0 — переменная для хранения максимального значения.
- arr dw 1,2,3,4 — массив, в котором хранятся значения элементов матрицы.
- dw 5,6,7,8 — продолжение массива.
- dw 9,0,1,2 — продолжение массива. В данном коде реализуется алгоритм поиска строки с максимальной суммой элементов в прямоугольной матрице.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д