Нахождение в прямоугольной матрице номера строки, имеющей максимальную сумму элементов - 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, содержит следующие операции:

  1. .model tiny — устанавливает модель памяти, необходимую для работы программы. В данном случае используется модель tiny, что означает, что для программы будет выделен сегмент размером 16 Кбайт.
  2. .code — сегмент, в котором будет размещен машинный код программы.
  3. start: — метка начала работы программы.
  4. lea si,arr — регистр SI ссылается на массив arr.
  5. mov cx,n — регистр CX содержит количество строк в матрице.
  6. row: — метка начала цикла по строкам матрицы.
  7. push cx — сохраняет значение регистра CX в стеке.
  8. xor bx,bx — регистр BX инактивируется.
  9. mov cx,m — регистр CX содержит количество столбцов в матрице.
  10. col: — метка начала цикла по столбцам матрицы.
  11. lodsw — загрузка двух слов из массива в регистры AX и BX.
  12. add bx,ax — сумма элементов матрицы сохраняется в регистре BX.
  13. loop col — цикл по столбцам продолжается до тех пор, пока не будет выполнено условие.
  14. cmp bx,max — сравнивает сумму элементов текущей строки с максимальным значением.
  15. jle skip — если текущая сумма меньше максимального значения, то переходим к следующей строке.
  16. pop cx — восстанавливаем значение регистра CX из стека.
  17. mov max,bx — максимальное значение присваивается значению регистра BX.
  18. mov dx,n — регистр DX содержит количество строк в матрице.
  19. sub dx,cx — вычитает количество строк из количества столбцов.
  20. push cx — сохраняет значение регистра CX в стеке.
  21. skip: — метка начала обработки следующей строки.
  22. pop cx — восстанавливаем значение регистра CX из стека.
  23. loop row — цикл по строкам продолжается до тех пор, пока не будет выполнено условие.
  24. int 20h — завершение работы программы и выход в DOS.
  25. n equ 3 — количество строк в матрице.
  26. m equ 4 — количество столбцов в матрице.
  27. max dw 0 — переменная для хранения максимального значения.
  28. arr dw 1,2,3,4 — массив, в котором хранятся значения элементов матрицы.
  29. dw 5,6,7,8 — продолжение массива.
  30. dw 9,0,1,2 — продолжение массива. В данном коде реализуется алгоритм поиска строки с максимальной суммой элементов в прямоугольной матрице.

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


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

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

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