Двухмерные массивы в ассембелре - Assembler
Формулировка задачи:
Есть массив 5 на 5, ниже пример(в нем могут быть любые цифры, я записал именно такие)
Нужно посчитать и вывести сумму сумм всех элементов в первой строке и последней. Тоесть в моем примере это должно быть:
3+2+3+4+5+1+2+3+4+5 = 32
Был бы очень признателен если бы вы написали код программы аж до вывода на экран ответа. Ну или хотя бы объяснить логику работы с массивами в ассемблере.
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
Решение задачи: «Двухмерные массивы в ассембелре»
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
Объяснение кода листинга программы
Вот что получилось:
- mov cx,5 — в начале первого цикла устанавливаем значение счётчика циклов равным 5.
- lp2: — здесь начинается второй цикл.
- mov ax, 0 — в начале второго цикла устанавливаем начальное значение аккумулятора (AX) равным 0.
- add ax, mas[1+cx] — в этой строке кода происходит сложение значения аккумулятора (AX) и элемента массива с индексом 1+CX. В результате данной операции будет сохранено новое значение AX.
- mov h,ax — сохраняем значение AX в переменную H.
- loop lp2 — в данном случае условием для цикла служит переменная H.
- outint h — выводим значение переменной H.
- jmp lp3 — переходим к третьему циклу.
- mov cx,5 — в начале третьего цикла устанавливаем значение счётчика циклов равным 5.
- lp3: — здесь начинается третий цикл.
- mov ax, 0 — в начале третьего цикла устанавливаем начальное значение аккумулятора (AX) равным 0.
- add ax, mas[5+cx] — в этой строке кода происходит сложение значения аккумулятора (AX) и элемента массива с индексом 5+CX. В результате данной операции будет сохранено новое значение AX.
- mov f,ax — сохраняем значение AX в переменную F.
- loop lp3 — в данном случае условием для цикла служит переменная F.
- outint f — выводим значение переменной F.
- jmp stop — переходим к операции, которая должна выполняться после завершения всех циклов.
- stop: — здесь заканчивается выполнение программы. Ошибки в коде:
- add ax, mas[1+cx] — операция сложения может быть некорректной, так как значение CX не инициализируется.
- add ax, mas[5+cx] — такая же ошибка, как и в предыдущем случае.
- outint h — попытка выполнить команду вывода значения переменной H, которая не инициализируется.
- outint f — аналогичная ошибка, как и в предыдущем случае.