Программирование на языке Ассемблера и отладка разработанных программ

Страницы работы

Содержание работы

Министерство образования и науки Российской Федерации

Новосибирский государственный технический университет

Кафедра ССОД

Лабораторная работа

Дисциплина  «Архитектура компьютера»

  Факультет:     АВТ                

  Группа:           АИ-92                                                      

  Выполнил:  Макаров С.

  Преподаватель: Матушкин Г.Г.               

  Отметка о защите_______________   

Новосибирск  2010

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. Учебник для ВУЗов

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
61 Kb
Скачали:
0