Здравствуйте, andruxa2112!
За основу взята программа из консультации
№ 189136Отличается одной командой!
[code lang=asm h=200]
model small ;модель памяти
.code ;сегмент кода
szRow equ 6 ;число строк матрицы
szCol equ szRow ;колонок столько же, матрица квадратная
start: mov ax, @data ;адрес сегмента данных в памяти
mov ds, ax ;инициируем регистр сегмента данных
;далее идет подсчет суммы положительных элементов матрицы,
;расположенных выше главной диагонали
mov ch, szRow ;число строк
xor dx, dx ;здесь будем накапливать сумму
xor bx, bx ;база очередной строки матрицы
lRow: mov cl, szCol ;цикл по строкам, число колонок в строке
xor di, di ;индекс колонки в строке
lCol: cmp cl, ch ;элементы на главной диагонали и ниже
jge next ; пропускаем
mov al, mass[bx][di];берем элемент bx строки di столбца
test al, 80h ;отрицательное число?
jnz next ;рассматриваем только положительные числа
cbw ;байт превращаем в слово
add dx, ax ;складываем
next: inc di ;на следующий элемент в строке
dec cl ;уменьшаем счетчик колонок
jnz lCol ;на следующую колонку строки
add bx, szCol ;строка закончилась, смещаем базу строки на длину строки
dec ch ;уменьшаем счетчик строк
jnz lRow ;на следующую строку
mov sum, dx ;строки кончились, сохраняем результат
mov ah, 4ch ;ф-я завершения программы
mov al, 1 ;код возврата
int 21h
.data ;сегмент данных
sum dw ? ;здесь будет сумма
mass label byte ;матрица szRow на szCol элементов
;далее задается содержимое матрица при помощи макро
dat = 0 ;начальное значение данных
rept szRow ;внешний цикл, повтор szRow раз
rept szCol ;внутренний цикл, повтор szCol раз
db dat ;байт, равный переменной dat
dat = (dat+szRow*szCol)mod 256 ;следующее значение равно
;остатку от деления на 256 от суммы
;предыдущего значения и szRow*szCol=36
;т.о., в матрице будут числа
;0, 36, 72, 108, 144, 180, 216, 252, 32, 72 и т.д.
;числа рассматриваются, как знаковые.
;т.е., если 0 <= число < 128, то положительное
;если 128 <= число < 256, то отрицательное, в доп коде
endm ;конец внутреннего цикла
endm ;конец внешнего цикла
.stack 256 ;стек 100h байт
end start ;точка входа в программу
[/code]