Двухмерные массивы в ассембелре - Assembler

Узнай цену своей работы

Формулировка задачи:

Есть массив 5 на 5, ниже пример(в нем могут быть любые цифры, я записал именно такие)
mas db 3,2,3,4,5
    db 1,2,3,4,5
    db 1,2,3,4,5
    db 1,2,3,4,5
    db 1,2,3,4,5
Нужно посчитать и вывести сумму сумм всех элементов в первой строке и последней. Тоесть в моем примере это должно быть: 3+2+3+4+5+1+2+3+4+5 = 32 Был бы очень признателен если бы вы написали код программы аж до вывода на экран ответа. Ну или хотя бы объяснить логику работы с массивами в ассемблере.

Решение задачи: «Двухмерные массивы в ассембелре»

textual
Листинг программы
mov cx,5
lp2:
mov ax, 0
add ax, mas[1+cx] ; Operand types do not match
mov h,ax
loop lp2
outint h ; Illegal instruction
jmp lp3
 
mov cx,5
lp3:
mov ax, 0
add ax, mas[5+cx] ; Operand types do not match
mov f,ax
loop lp3
outint f ; Illegal instruction
jmp stop

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

Вот что получилось:

  1. mov cx,5 — в начале первого цикла устанавливаем значение счётчика циклов равным 5.
  2. lp2: — здесь начинается второй цикл.
  3. mov ax, 0 — в начале второго цикла устанавливаем начальное значение аккумулятора (AX) равным 0.
  4. add ax, mas[1+cx] — в этой строке кода происходит сложение значения аккумулятора (AX) и элемента массива с индексом 1+CX. В результате данной операции будет сохранено новое значение AX.
  5. mov h,ax — сохраняем значение AX в переменную H.
  6. loop lp2 — в данном случае условием для цикла служит переменная H.
  7. outint h — выводим значение переменной H.
  8. jmp lp3 — переходим к третьему циклу.
  9. mov cx,5 — в начале третьего цикла устанавливаем значение счётчика циклов равным 5.
  10. lp3: — здесь начинается третий цикл.
  11. mov ax, 0 — в начале третьего цикла устанавливаем начальное значение аккумулятора (AX) равным 0.
  12. add ax, mas[5+cx] — в этой строке кода происходит сложение значения аккумулятора (AX) и элемента массива с индексом 5+CX. В результате данной операции будет сохранено новое значение AX.
  13. mov f,ax — сохраняем значение AX в переменную F.
  14. loop lp3 — в данном случае условием для цикла служит переменная F.
  15. outint f — выводим значение переменной F.
  16. jmp stop — переходим к операции, которая должна выполняться после завершения всех циклов.
  17. stop: — здесь заканчивается выполнение программы. Ошибки в коде:
  18. add ax, mas[1+cx] — операция сложения может быть некорректной, так как значение CX не инициализируется.
  19. add ax, mas[5+cx] — такая же ошибка, как и в предыдущем случае.
  20. outint h — попытка выполнить команду вывода значения переменной H, которая не инициализируется.
  21. outint f — аналогичная ошибка, как и в предыдущем случае.

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

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