Сумма элементов главной диагонали матрицы - Assembler
Формулировка задачи:
Добрый день.
Дана матрица m*n. Выделить в ней наиболее подходящую квадратную матрицу и вычислить сумму элементов ее главной диагонали.
Выделять наиболее подходящую квадратную матрицу сейчас не обязательно т.к.:
Проблема в коде выделенном комментариями. Подскажите почему эта часть кода отрабатывает 1 раз и в результат sum попадает только элемент [0,0].
Поиском пользовался, ответа не нашел.
в такой матрице 1 2 3 4 5 6 7 8 9 10 11 12 и в такой 1 2 3 4 5 6 7 8 9 10 11 12 сумма главной диагонали в наиболее подходящей квадратной матрице будет состоять из элементов [0,0] + [1,1] + [2,2]
.model small .stack 100h .data ;размер матрицы rows equ 3 columns equ 4 a db 1,2,3,4 db 5,6,7,8 db 9,10,11,12 sum dw ? .code .486 mov ax, @data mov ds, ax ;В bx будем хранить номер строки, в si - номер столбца. Вся нумерация начинается с нуля xor bx, bx xor ax, ax ;тут будем копить результат mov cx, rows ;внешний цикл будет перебирать строки ;начало расчета c_external: push cx ;запоминаем текущее значение параметра внешнего цикла в стеке mov cx, columns ;внутренний цикл xor si, si ;обнуляем номер столбца ; ************************************************************************************ c_internal: cmp bx, si ; если индекс строки = индекс столбца, je summ ; то прибавляем к сумме jne next ; иначе просматриваем дальше summ: add al, byte ptr a[bx][si] ; базовая индексная адресация со смещением adc ah, 0 next: inc si ;переход к следующему столбцу loop c_internal ; ************************************************************************************ pop cx add bx,columns ;переходим к следующей строке loop c_external mov sum, ax mov ah, 4ch int 21h end
Решение задачи: «Сумма элементов главной диагонали матрицы»
textual
Листинг программы
c_internal: add al, byte ptr a[bx][si] ; базовая индексная адресация со смещением adc ah, 0 inc si ;переход к следующему столбцу loop c_internal
Объяснение кода листинга программы
Код выполняет базовую индексную адресацию со смещением для каждого элемента главной диагонали матрицы. Переменные al
и ah
используются для хранения суммы элементов. Переменная si
используется для индексации столбцов.
Список действий:
- Базовая индексная адресация со смещением используется для получения каждого элемента главной диагонали матрицы.
- Элементы складываются в
al
иah
. si
увеличивается на 1 для перехода к следующему столбцу.- Цикл повторяется до тех пор, пока все элементы главной диагонали матрицы не будут обработаны.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д