Кафедра ССОД
Лабораторная работа
Дисциплина «Архитектура компьютера»
Факультет: АВТ
Группа: АИ-92
Выполнил: Макаров С.
Преподаватель: Матушкин Г.Г.
Отметка о защите_______________
1. Цель работы
Приобретение навыков программирования на языке Ассемблера и отладки разработанных программ.
2. Задача
Задать в памяти компьютера массив данных из двенадцати 48 разрядных двоичных чисел без знака. Определить в заданном массиве максимальное и минимальное число, а также количество чисел, равных некоторому заданному числу из заданного массива – L, с указанием их адресов. Исходный массив чисел, найденные максимальное и минимальное числа с их адресами, а также количество чисел L, отобразить в дампе памяти отладчика.
Исходный массив чисел находится в сегменте данных по адресам 0000 - 0006, 0008 - 0013 ... 0058 – 0063. Максимум находится в экстрасегменте по адресу 0000 - 0006, в 0007, 0008 находится адрес максимума. Минимум находится в экстрасегменте по адресу 0010 - 0016, в 0017, 0018 находится адрес минимума. Число, количество повторов которого считаем находится в экстрасегменте по адресу 0020 - 0026, в 0027 находится количество повторений, а в 0028 адрес последнего повтора.
3. Листинг программы :
;Загружаем массив
CALL DATA;
MOV DX, 12 ;заносим в DX колчичество повторений цикла
MOV SI, 0000
MOV DI, 0000
;пересылаем в макс 1-ый элемент
CLD
MOV CX, 0006
REP MOVSB
MOV SI, 0000
MOV DI, 0010
;пересылаем в минимум 1-ый элемент
CLD
MOV CX, 0006
REP MOVSB
MOV SI, 0008 ;настраиваем SI на второй элемент
METKA1 : MOV DI, 0000
;запоминаем адрес текущего элемента в регистр BX
LEA BX, DS:[SI];
;проверка для максимума
MOV CX, 0006
REP CMPSB
JA MAX ;если больше чем максимум то копируем текущий элемент в максимум
;проверка для минимума
PER1 : SUB SI, 0006
MOV DI, 0010
MOV CX, 0006
REP CMPSB
JС MIN ;если меньше чем минимум, то устанавливаем новый минимум
;проверка для равенства
PER2 : SUB SI, 0006
MOV DI, 0020
MOV CX, 0006
REP CMPSB
JZ RAVN ;если равно заданному
;переходим к следующему числу
PER3 : SUB SI, 0006;
ADD SI, 0008; смещаем адрес
DEC DX ;декрементируем DX
JNZ METKA1 ;к следующей итерации цикла, если в DX не 0
MAX : SUB SI, 0006; обрабатываем новый MAX
MOV DI, 0000;
; пересылка
MOV CX, 0006
REP MOVSB;
;запоминаем адрес максимума
MOV ES:[0008], BX
JMP PER1
MIN : SUB SI, 0006; обрабатываем новый MIN
MOV DI, 0010;
; пересылка
MOV CX, 0006
REP MOVSB;
;запоминаем адрес минимума
MOV ES:[0018], BX
JMP PER2
RAVN : INC W/ES:[0027]; при равенстве увеличиваем количество повторов
MOV ES:[0028], BX ;запоминаем адрес последнего повтора
JMP PER3
DATA :
;загружаем первое 48 разрядное число
MOV [0000], 00
MOV [0001], 00
MOV [0002], 00
MOV [0003], 00
MOV [0004], 00
MOV [0005], 11
;загружаем второе 48 разрядное число
MOV [0008], 00
MOV [0009], 00
MOV [000A], 00
MOV [000B], 00
MOV [000C], 00
MOV [000D], 11
;загружаем третье 48 разрядное число
MOV [0010], 00
MOV [0011], 00
MOV [0012], 00
MOV [0013], 00
MOV [0014], 00
MOV [0015], 11
;загружаем четвертое 48 разрядное число
MOV [0018], 00
MOV [0019], 00
MOV [001A], 00
MOV [001B], 00
MOV [001C], 00
MOV [001D], 11
;загружаем пятое 48 разрядное число
MOV [0020], 00
MOV [0021], 00
MOV [0022], 00
MOV [0023], 00
MOV [0024], 00
MOV [0025], 11
;загружаем шестое 48 разрядное число
MOV [0028], 00
MOV [0029], 00
MOV [002A], 00
MOV [002B], 00
MOV [002C], 00
MOV [002D], 11
;загружаем седьмое 48 разрядное число
MOV [0030], 00
MOV [0031], 00
MOV [0032], 00
MOV [0033], 00
MOV [0034], 00
MOV [0035], 11
;загружаем восьмое 48 разрядное число
MOV [0038], 00
MOV [0039], 00
MOV [003A], 00
MOV [003B], 00
MOV [003C], 00
MOV [003D], 11
;загружаем девятое 48 разрядное число
MOV [0040], 00
MOV [0041], 00
MOV [0042], 00
MOV [0043], 00
MOV [0044], 00
MOV [0045], 11
;загружаем десятое 48 разрядное число
MOV [0048], 00
MOV [0049], 00
MOV [004A], 00
MOV [004B], 00
MOV [004C], 00
MOV [004D], 33
;загружаем одинадцатое 48 разрядное число
MOV [0050], 00
MOV [0051], 00
MOV [0052], 00
MOV [0053], 00
MOV [0054], 00
MOV [0055], 44
;загружаем одинадцатое 48 разрядное число
MOV [0058], 00
MOV [0059], 00
MOV [005A], 00
MOV [005B], 00
MOV [005C], 00
MOV [005D], 11
; загружаем число для повторения
MOV es:[0020], 00
MOV es:[0021], 00
MOV es:[0022], 00
MOV es:[0023], 00
MOV es:[0024], 00
MOV es:[0025], 11
MOV es:[0027],00
MOV es:[0008],00
MOV es:[0028],00
RET
Результаты :
В результате в соответствующей области памяти получили максимальный и минимальный элементы массива, а также адреса минимума и максимума и количество повторений искомой строки.
Заключение : в ходе разработки данной программы получены начальные навыки программирования на языке ассемблера микропроцессоров семейства 80х86.
Литература :
1. Конспект лекций по курсу Архитектура компьютера 2010 г, лектор Матушкин Г.Г.
2. В. И. Юров - Assembler. Учебник для ВУЗов
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.