Найти сумму положительных элементов строк матрицы - Assembler
Формулировка задачи:
Помогите исправить код!!! Пожалуйста! Найти сумму положительных элементов строк матрицы А(I,J). Подсчет суммы положительных элементов одной строки матрицы оформить в виде подпрограммы. I,J = 1,2,...5. Сумму каждой строки матрицы вывести в виде массива.
Решение задачи: «Найти сумму положительных элементов строк матрицы»
textual
Листинг программы
Result dw 5 ; Массив результата ...... cld ; Сканирование вперёд lea bx,x ; Указатели на матрицу и результат lea di,Result mov cx,5 ; 5 строк M:push di ; Цикл расчётов, передача параметров push bx call GetSum ; Подсчёт суммы строки stosw ; Сохранение результата для строки loop M ...... ; Подпрограмма суммирования ; [bp+6] - указатель на матрицу ; [bp+4] - индекс строки ; ax - возвращаемая сумма Calc proc push bp ; Пролог mov bp,sp push cx ; Сохранение состояния push dx push si mov si,[bp+4] ; si=[bp+6]+[bp+4]*5 shl si,2 add si,[bp+4] add si,[bp+6] xor dx,dx ; Инициализация результата mov cx,5 SS:lodsb ; Суммирование 5 элементов cbw ; со знакорасширением add dx,ax loop SS mov ax,dx ; Сохранение результата pop si ; Восстановление состояния pop dx pop cx pop bp ; Эпилог ret 4 ; Очистка стека от параметров Calc endp
Объяснение кода листинга программы
- Результат (5) сохраняется в переменной Result.
- Далее, в цикле, происходит сканирование вперёд.
- Указатели на матрицу и результат сохраняются в регистрах bx и di.
- Переменная cx содержит количество строк (5).
- Далее, в цикле, происходит вызов подпрограммы GetSum, которая суммирует элементы строки.
- Результат подсчёта строки сохраняется в стеке (stosw).
- После окончания цикла, результат выводится на экран.
- Подпрограмма GetSum вычисляет сумму элементов строки.
- В прологе подпрограммы сохраняется указатель на стек (bp).
- Далее, в цикле, происходит загрузка очередного элемента строки в si.
- Элементы строки суммируются, при этом каждый элемент умножается на 5 (соответствует количеству строк).
- Результат суммирования сохраняется в dx.
- После окончания цикла, результат выводится на экран (mov ax,dx).
- Состояние регистров восстанавливается (pop si, dx, cx, bp).
- Возврат из подпрограммы (ret 4).
- Очистка стека от параметров (5 байт).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д