Консультация № 189136
09.04.2016, 10:24
0.00 руб.
09.04.2016, 15:16
0 3 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Может кто помочь написать комментарий к этой программе
[code lang=asm h=200]model small
.code
szRow equ 6
szCol equ szRow
start: mov ax,@data
mov ds,ax
mov ch,szRow+1
xor dx,dx
xor bx,bx
lRow: mov cl,szCol+1
xor di,di
lCol: cmp cl,ch
jle next
mov al,mass[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 ah,1
int 21h
.data
sum dw ?
mass label byte
dat = 0
rept szRow
rept szCol
db dat
dat = (dat+szRow*szCol)mod 256
endm
endm
.stack 256
end start
[/code]

Обсуждение

давно
Посетитель
400176
3
09.04.2016, 10:30
общий
09.04.2016, 10:33
И если кому то не сложно, то можете проверить программу, мало ли
давно
Посетитель
7438
7205
09.04.2016, 15:14
общий
это ответ
Здравствуйте, Dron!
1) Комментариев сделал не просто много, а неприлично много
2) Ошибочки таки есть: неправильно задавались счетчики строк и столбцов и неправильно задавалась функция выхода из программы
[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 ;элементы на главной диагонали и выше
jle 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
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
11.04.2016, 11:19
общий
Адресаты:
Чем вызван отрицательный отзыв о моем ответе?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа