Найти сумму положительных элементов строк матрицы - 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

Объяснение кода листинга программы

  1. Результат (5) сохраняется в переменной Result.
  2. Далее, в цикле, происходит сканирование вперёд.
  3. Указатели на матрицу и результат сохраняются в регистрах bx и di.
  4. Переменная cx содержит количество строк (5).
  5. Далее, в цикле, происходит вызов подпрограммы GetSum, которая суммирует элементы строки.
  6. Результат подсчёта строки сохраняется в стеке (stosw).
  7. После окончания цикла, результат выводится на экран.
  8. Подпрограмма GetSum вычисляет сумму элементов строки.
  9. В прологе подпрограммы сохраняется указатель на стек (bp).
  10. Далее, в цикле, происходит загрузка очередного элемента строки в si.
  11. Элементы строки суммируются, при этом каждый элемент умножается на 5 (соответствует количеству строк).
  12. Результат суммирования сохраняется в dx.
  13. После окончания цикла, результат выводится на экран (mov ax,dx).
  14. Состояние регистров восстанавливается (pop si, dx, cx, bp).
  15. Возврат из подпрограммы (ret 4).
  16. Очистка стека от параметров (5 байт).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5
Похожие ответы