Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 356
∙ повысить рейтинг »
Куликов Роман Евгеньевич
Статус: 1-й класс
Рейтинг: 0
∙ повысить рейтинг »
Козлова Ольга Александровна
Статус: 1-й класс
Рейтинг: 0
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler

Номер выпуска:1600
Дата выхода:20.04.2016, 16:21
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:18 / 7
Вопросов / ответов:1 / 1

Консультация # 189197: Здравствуйте! У меня возникли сложности с таким вопросом:Мне нужна помощь в ассемблере Посчитать и вывести сумму положительных элементов, расположенных над главной диагональю матрицы ...

Консультация # 189197:

Здравствуйте! У меня возникли сложности с таким вопросом:Мне нужна помощь в ассемблере

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

Дата отправки: 15.04.2016, 16:11
Вопрос задал: andruxa2112 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, andruxa2112!
За основу взята программа из консультации № 189136
Отличается одной командой!

Код (Assembler) :: выделить код
   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

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное