IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Архиглупый вопрос к умным людям
сообщение
Сообщение #1


Гость






Читающий эти строки добрый человек, помоги советом - кто может мне решить  маленькое задание по Ассемблеру. Я студент 1-ого курса.  ПОГИБАю     ??? sad.gif :-[ :'(  
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


;(********************************************************************
*********************)
;(*                                                                                       *)
;(*          Программа ищет максимальное и минимальное значения в матрице 20x20           *)
;(*              (элемент матрицы - беззнаковое целое число размером в байт)              *)
;(*  Значение максимального элемента записывается в переменную max, а минимального в min  *)
;(*                                                                                       *)
;(******************************************************************************
***********)
;в данном примере максимальным элементом будет 255, а минимальным будет 1
masm            ;используем синтаксис Макроассемблера
model      small     ;модель памяти small (код занимает один сегмент кода, данные объединены
               ;в одну группу DGROUP)
.data           ;сегмент данных
max db ?        ;байтовая переменная под максимальный элемент матрицы
min db ?        ;байтовая переменная под минимальный элемент матрицы
               ;матрица размером 20x20 (статически её инициализируем)
matrix db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,251,2,12,14,34,15,16,17,56,76,78
      db  3,4,8,9,4,25,9,7,5,255,2,12,14,34,15,16,17,56,76, 1 ;байтовая матрица 20x20
.code           ;сегмент кода
begin:          ;точка входа в программу
mov   ax,@data ;адрес сегмента данных в регистр ax
mov   ds,ax    ;ax в ds
mov   bx,0     ;bx - строки матрицы
mov   si,0          ;si - столбцы матрицы
mov   dl,matrix[bx][si] ;первый элемент матрицы в dl
mov   max,dl   ;dl в max
mov   min,dl   ;dl в min
mov   di,0     ;обнуляем счётчик строк
mov   cx,20    ;число для внешнего цикла (по строкам)
extcycle:      ;внешний цикл по строкам
push       cx       ;сохраняем в стеке счётчик внешнего цикла
mov   cx,20    ;число для внутренего цикла (по столбцам)
mov   si,0     ;обнуляем регистр перед началом перебора значений в строке матрицы
intcycle:      ;внутренний цикл по столбцам
mov   dl,matrix[bx][si] ;очередной элемент матрицы в dl
cmp   min,dl   ;сравниваем значения в min со значением в dl
jbe   next2    ;если значение в min <= очередного элемента матрицы, то идём на метку next2
mov   min,dl   ;иначе записываем в min значение из dl
next2:         ;метка "продолжения"2
cmp   max, dl  ;сравниваем значения в max со значением в dl
jae   next1    ;если значение в max >= очередного элемента матрицы, то идём на метку next1
mov   max,dl   ;иначе записываем в max значение из dl
next1:         ;метка "продолжения"1
inc   si       ;передвижение на следующий элемент в строке
loop  intcycle ;цикл по метке intcycle
inc   di       ;инкремент di
mov   ax,di    ;di в ax
mov   si,20    ;20 в si
mul   si       ;ax умножаем на si, младшая часть результата в ax, а старшая в dx
mov   bx,ax    ;ax в bx (поскольку элемент массива - байт и 19 * 20 < FFFFh),
               ;то есть результат умножения не выйдет за пределы регистра ax
               ;(при данной размерности матрицы и её элементов)
pop   cx       ;восстанавливаем внешний счётчик цикла из стека
loop  extcycle ;цикл по метке extcycle
mov   ax,4c00h ;отдаём управление ОС
int   21h      ;вызывая прерывание Dos(21h)
end begin       ;конец программы


писал другану когда-то
это конечно не твоя задачо но что есть...
может натолкнёт на какие мысли...
а писать щас у меня время нет
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 1:07
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name