Консультация № 189197
15.04.2016, 16:11
0.00 руб.
15.04.2016, 16:54
0 4 1
Здравствуйте! У меня возникли сложности с таким вопросом:Мне нужна помощь в ассемблере

Посчитать и вывести сумму положительных элементов, расположенных над главной диагональю матрицы

Обсуждение

давно
Посетитель
7438
7205
15.04.2016, 16:13
общий
Адресаты:
В чем суть-то?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
400207
3
15.04.2016, 16:31
общий
[q=7438][/q] "Посчитать и вывести сумму положительных элементов, расположенных над главной диагональю матрицы."
давно
Посетитель
7438
7205
17.04.2016, 15:55
общий
это ответ
Здравствуйте, 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]
5
Спасибо большое.<br>Там больше ничего не нужно вставлять?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
18.04.2016, 00:06
общий
Адресаты:
Ничего. Программы отличаются командой' которая определяет, выше или ниже диагонали ищется сумма положительных элементов.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа