Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000239.doc
Скачиваний:
23
Добавлен:
30.04.2022
Размер:
1.12 Mб
Скачать

4.6. Лабораторная работа № 2

Цели работы:

– закрепление навыков организации ветвлений и циклов в программах на ассемблере.

– закрепление навыков работы с массивами (организации индексирования) с использованием модификации адресов.

– проверка правильности выполнения задания № 5 второй части контрольной работы.

Среда выполнения

Интерпретатор команд DOS, ассемблер MASM, интерактивный отладчик AFD.

Необходимым условием допуска к выполнению работы является наличие выполненной контрольной работы (часть 2, задание № 5).

Каждое выполненное по ходу работы задание следует показывать преподавателю.

Отчет по лабораторной работе

Отчет по лабораторной работе следует писать по ходу выполнения ЛР от руки либо на отдельных листах, либо непосредственно в контрольной работе (рядом с решением и/или с оборотной стороны листов). В каждом задании указывается, какие именно данные должны быть внесены в отчет.

Порядок выполнения работы

Задание 1. 30 (15 – здесь и далее в скобках указано время, отводимое на задание студентам с сокращенным сроком обучения) минут. Создать, ассемблировать и выполнить в отладчике программу поиска большего из двух чисел-слов (на базе примера из теории к пятому заданию контрольной работы).

Пусть X,Y,Z – переменные размером в слово. Записать в Z большее из чисел X и Y.

Для чисел со знаком

Для чисел без знака

MOV AX, X

CMP AX, Y

JGE L1

MOV AX, Y

L1: MOV Z, AX

MOV AX, X

CMP AX,Y

JAE L1

MOV AX, Y

L1: MOV Z,AX

Значения X и Y подобрать таким образом, чтобы результат зависел от того, будут ли переменные рассматриваться как целые со знаком, или как целые без знака.

Записать в отчет значения переменных X и Н, а также значения флагов ZF, SF, CF и OF после выполнения команды CMP.

Результат показать преподавателю (в отладчике и в отчете).

Задание 2. 30 (15) минут. Создать, ассемблировать и выполнить в отладчике программу вычисления суммы целых без знака с учетом возможности выхода за пределы разрядной сетки (на базе примера из теории к пятому заданию контрольной работы):

Пусть X,Y,Z – беззнаковые байтовые переменные. Вычислить Z = X + Y. если сумма не помещается в байт, то управление передать на метку error (например, для выдачи сообщения об ошибке).

MOV AL, X

ADD AL, Y

JC ERROR

MOV Z, AL

JMP L:

ERROR:

L:

Протестировать работу программы как в случае, когда перенос не возникает, так и для больших чисел.

Записать в отчет значения слагаемых и результат сложения, полученный в регистре AL, для обоих случаев.

Результат показать преподавателю (в отладчике и в отчете).

Задание 3. 30 (15) минут. Создать, ассемблировать и выполнить в отладчике программу вычисления суммы элементов одномерного массива:

Пусть дан массив X из 10 целых-слов, инициализированный некоторыми значениями. Тогда сумму можно вычислить следующим образом (считаем, что выхода за пределы разрядной сетки заведомо не происходит)

MOV AX, 0 ; Очистка корзины

MOV СX, 10 ; Инициализация счетчика цикла

MOV SI, 0 ; Начальное смещение по

; вектору (индекс)

L: ADD AX, X [SI] ; AX := AX + X[I]

ADD SI, 2 ; Следующий индекс

LOOP L

Занести в отчет описание переменной-массива и содержимое памяти (в шестнадцатеричном виде), занимаемое этой переменной.

Каково значение регистров CX и SI после второго выполнения команды loop? Каково в этот момент значение исполнительного адреса для операнда X[SI] и значение элемента массива по этому адресу? Занести в отчет.

Записать в отчет значения получившейся суммы (в шестнадцатеричном и десятичном представлениях).

Результат показать преподавателю (в отладчике и в отчете).

Задание 4. 90 (45) минут. Проверить правильность выполнения пятого задания второй части контрольной работы (ветвления, циклы, индексирование).

Создать и отассемблировать программу, содержащую Ваше решение. Программу разработать на основе любой уже работающей, содержащей корректное оформление сегментов и т.д. Добиться, чтобы ассемблер не выдавал сообщений об ошибках и предупреждений.

Собрать загрузочный модуль и запустить в отладчике. Пошагово выполняя программу, проверить корректность своего решения.

Занести в отчет значения используемых регистров перед входом в цикл и в момент выхода из него. Записать исходное содержимое памяти, занимаемой вектором, а также итоговое, если оно меняется в ходе выполнения программы.

Протестировать программу при различных исходных данных. Например, при поиске максимума, расположить максимальный элемент в начале, в середине и в конце вектора. Данные можно менять как в исходной программе (с последующим ассемблированием), так и непосредственно в загрузочном модуле с помощью отладчика. В отладчике использовать функциональные клавиши F9, F10 и стрелки для перевода курсора в нужное место панели памяти.

Исправить решение в контрольной работе, если в нем были ошибки (команды и/или значения флагов).

Показать результаты преподавателю (на экране и в отчете).