Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler 01.doc
Скачиваний:
17
Добавлен:
09.11.2019
Размер:
727.04 Кб
Скачать

96

С о д е р ж а н и е

Л а б о р а т о р н а я р а б о т а N 1 5

МАШИННОЕ ИСПОЛНЕНИЕ  5

1.  Просмотр памяти. 5

2.  Пример машинных кодов: непосредственные данные. 6

3.  Пример машинных кодов: определение данных. 9

4.  Пример машинных кодов: определение размера памяти. 10

5.  Специальные средства отладчика. 10

6.  Сохранение программы из отладчика. 11

Л а б о р а т о р н а я р а б о т а N 2 13

АССЕМБЛИРОВАНИЕ И ВЫПОЛНЕНИЕ ПРОГРАММЫ  13

1. Ввод программы 13

2. Ассемблирование программы. 14

3. Компоновка программы. 14

4. Выполнение программы. 15

5. Ввод, ассемблирование, компоновка, выполнение и анализ листинга исходной программы. 16

Л а б о р а т о р н а я р а б о т а N 3 18

ОПРЕДЕЛЕНИЕ ДАННЫХ  18

1. Директивы определения данных. 18

2. Определение данных с числом повторений. 19

3. Директива определения байта (DВ). 19

4. Директива определения слова (DW). 20

5. Директива определения двойного слова (DD). 20

6. Директива определения поля из четырех слов (DQ). 20

7. Директива определения десяти байт (DT), директива EQU. 21

Л а б о р а т о р н а я р а б о т а N 4 22

ПРОГРАММЫ В COM-ФАЙЛАХ  22

1. Создание EXE-файла. 22

2. Получение COM-файла. 23

Л а б о р а т о р н а я р а б о т а N 5 24

ЛОГИКА И ОРГАНИЗАЦИЯ ПРОГРАММЫ  24

1. Команда JMP. 25

2. Команда LOOP. 26

3. Сегмент стека. 26

4. Программа: расширение операции пересылки. 28

5. Программа: замена строчных букв на заглавные. 30

6. Команды сдвига и циклического сдвига. 31

7. Команды логических операций: AND, OR, XOR, TEST, NOT. 33

Л а б о р а т о р н а я р а б о т а N 6 34

КОМАНДЫ ОБРАБОТКИ СТРОК  34

1. REP: префикс повторения команды. 35

2. Программа: строковые операции. 35

3. Сканирование и замена. 38

4. Дублирование образца. 38

5. Программа: выравнивание справа при выводе на экран. 39

Л а б о р а т о р н а я р а б о т а N 7 42

АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ 1: ОБРАБОТКА ДВОИЧНЫХ ДАННЫХ  42

1. Сложение и вычитание. 44

2. Многословное сложение. 44

3. Умножение. 46

4. Повышение эффективности умножения. 47

5. Многословное умножение. 47

6. Сдвиг регистровой пары DX:AX. 49

7. Деление. 50

8. Деление вычитанием. 51

9. Преобразование знака. 52

Л а б о р а т о р н а я р а б о т а N 8 54

АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ 2: ОБРАБОТКА ДАННЫХ В ФОРМАТАХ ASCII И 54

 BCD  54

1. Сложение в ASCII-формате. 56

2. Вычитание в ASCII-формате. 57

3. Умножение в ASCII-формате. 57

4. Деление в ASCII-формате. 58

5. Двоично-десятичный формат (BCD). 59

6. Преобразование ASCII-формата в двоичный формат и наоборот. 60

Л а б о р а т о р н а я р а б о т а N 9 63

ОБРАБОТКА ТАБЛИЦ  63

1. Прямой табличный доступ 64

2. Табличный поиск. 66

3. Табличный поиск с использованием сравнения строк. 67

4. Транслирующая команда XLAT. 68

5. Программа: вывод шестнадцатиричных и ASCII-кодов. 69

6. Программа: сортировка элементов таблицы. 71

Л а б о р а т о р н а я р а б о т а N 10 75

МАКРОКОМАНДЫ  75

1. Простое макроопределение. 79

2. Использование параметров в макрокомандах. 79

3. Комментарии в макрокомандах. 80

4. Использование макрокоманд внутри макроопределения. 81

5. Директива LOCAL. 82

6. Использование библиотек макроопределений. 83

7. Конкатенация (&). 83

8. Директивы повторения: REPT, IRP, IRPC. 84

9. Макрокоманды, использующие директивы IF и IFNDEF. 85

10. Макрокоманды, использующие директиву IFIDN. 87

Л а б о р а т о р н а я р а б о т а N 11 88

СВЯЗЬ МЕЖДУ ПОДПРОГРАММАМИ  88

1. Программа: использование директив EXTRN и PUBLIC для меток. 90

2. Программа: использование директивы PUBLIC в кодовом сегменте. 92

3. Программа: общие данные в подпрограмме. 93

4. Передача параметров. 94

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

Машинное исполнение

МЕТОДИЧЕСКИЕ УКАЗАНИЯ 

 1.  Для выполнения лабораторной работы вы должны войти в каталог группы из панели NORTON. Каждый студент должен иметь в каталоге группы свой личный каталог. Все программы должны создаваться и записываться в личном каталоге студента.

 2.  Системная программа DEBUG позволяет просматривать память, вводить программы и осуществлять трассировку их выполнения. В лабораторной работе показан процесс ввода этих программ непосредственно в память, в область сегмента кодов и объяснен каждый шаг выполнения программы.

 3.  Начальное упражнение научит проверять содержимое конкретных ячеек памяти. В первом примере программы используются непосредственные данные, определенные в командах загрузки регистров и арифметических команд. Второй пример программы использует данные, определенные относительно в сегменте данных. Трассировка этих команд в процессе выполнения программы позволяет понять действия компьютера и роль регистров.

 4.  Отладчик DOS DEBUG - это достаточно мощное средство, полезное для отладки ассемблерных программ. Однако следует быть осторожным при ее использовании, особенно для команды E. Ввод данных в неправильные адреса памяти или ввод некорректных данных могут привести к непредсказуемым результатам. На экране в этом случае могут появиться "странные" символы, клавиатура блокирована

или даже DOS прервет DEBUG и перезагрузит себя с диска. Какие-либо серьезные повреждения вряд ли произойдут, но возможны некоторые неожиданности, а также потеря данных, которые вводились при работе с отладчиком.

 5.  Если данные, введенные в сегмент данных или сегмент кодов, оказались некорректными, следует, вновь используя команду E, исправить их. Однако можно не заметить ошибки и начать трассировку программы. Но и здесь возможно еще использовать команду E для изменений. Если необходимо начать выполнение с первой команды, то следует установить в регистре командного указателя (IP)значение 0100. Введите команду R и требуемый регистр в следующем

виде:

R IP

Отладчик выдаст на экран содержимое регистра IP и перейдет в ожидание ввода. Здесь следует ввести значение 0100 и нажать для проверки результата команду R (без IP). Отладчик выдаст содержимое регистров, флагов и первую выполняемую команду. Теперь можно, используя команду T, вновь выполнить трассировку программы.

 6.  Если ваша программа выполняет какие-либо подсчеты, то, возможно, потребуется очистка некоторых областей памяти и регистров. Но убедитесь в ранении содержимого регистров CS, DS, SP и SS, которые имеют специфическое назначение.

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ 

 Включить компьютер и выйти в режим работы с MS-DOS.

1. Просмотр памяти.

 1.1.  Введите команду DEBUG. В результате программа DEBUG должна загрузиться с диска в память. После окончания загрузки на экране появится приглашение в виде дефиса, что свидетельствует о готовности программы DEBUG для приема команд. В первую очередь изучим выполнение команды D (вывод дампа памяти на экран дисплея).

 1.2.  Сначала проверим размер доступной для работы памяти. Данное значение находится в ячейках памяти 413H и 414H, и его можно просмотреть из DEBUG по адресу, состоящему из двух частей:

-- 400 - это адрес сегмента, который записывается как 40

(последний нуль подразумевается).

-- 13 - это смещение от начала сегмента.

Таким образом введите следующий запрос:

D 40:13

На экране появится дамп памяти. Первая строка дампа памяти начинается с:

0040:0010

Это означает, что сегмент памяти начинается с ячейки с адресом 400. Опрос ячеек начинается с ячейки с адресом 410, т.к. установлено смещение 0010 от начала сегмента памяти. Информация из ячеек с адресами 410, 411 и 412 на экран дисплея не выводится, т.к. в команде D указано смещение 13. Далее в первой строке выводится на экран из ячейки с адресом 413 число 80H, которое является младшим байтом информационного слова, из ячейки с адресом 414 число 02H, которое является старшим байтом информационного слова(возможен вывод других чисел, что зависит от типа компьютера).

Таким образом получают шестнадцатиричное обратное число 80 02. Шестнадцатиричное прямое число будет выглядеть 02 80 или 0280H. Это число и указывает количество килобайт доступной для работы памяти. Самостоятельно определить количество килобайт доступной памяти в десятичной системе счисления.

 1.3.  Вывести дамп памяти. Адрес первой ячейки сегмента FE000H, смещение 0. Для этого необходимо ввести команду:

D FE00:0

При этом в первой строке выводятся данные из ячеек с адресами FE000H-FE00FH, во второй строке выводятся данные из ячеек с адресами FE010H-FE01FH, и т.д. В целом дамп памяти выводит на экран данные из ячеек с адресами FE000H-FE07FH. Для вывода следующего дампа памяти начиная с адреса FE080H необходимо ввести команду:

D

В ячейках выведенных двух дампов памяти записаны коды символов в соответствии со стандартным кодом ASCII. Символы соответствующие каждому коду выводятся в правой части экрана для каждой строки дампа памяти. Символы составляют текст на английском языке в котором указаны: фирма производитель, тип используемого микропроцессора, версия базовой системы ввода-вывода BIOS, серийный номер компьютера и дата изготовления компьютера.

 1.4.  Вывести дамп памяти. Адрес первой ячейки сегмента FFFF0H, смещение 05. Для этого необходимо ввести команду:

D FFFF:05

При этом в дампе памяти выводится информация начиная с ячейки с адресом FFFF5H. В первой строке дампа памяти начиная с этой ячейки записаны коды символов которые отображаются в правой части экрана. Эти символы указывают дату создания постоянной памяти в которой записана базовая система ввода-вывода BIOS. Знание этой информации иногда бывает полезным для определения модели и возраста компьютера.

 1.5.  Для окончания работы и выходы из отладчика в DOS введите команду:

Q

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]