Консультация # 189197: Здравствуйте! У меня возникли сложности с таким вопросом:Мне нужна помощь в ассемблере Посчитать и вывести сумму положительных элементов, расположенных над главной диагональю матрицы ...
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 ;точка входа в программу
Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 17.04.2016, 15:55
5
Спасибо большое. Там больше ничего не нужно вставлять? ----- Дата оценки: 17.04.2016, 22:29
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались.
Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора -
для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение.
Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал,
который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом.
Заходите - у нас интересно!