
- •Машинное исполнение
- •1. Просмотр памяти.
- •2. Пример машинных кодов: непосредственные данные.
- •3. Пример машинных кодов: определение данных.
- •4. Пример машинных кодов: определение размера памяти.
- •5. Специальные средства отладчика.
- •6. Сохранение программы из отладчика.
- •Ассемблирование и выполнение программы
- •1. Ввод программы
- •2. Ассемблирование программы.
- •3. Компоновка программы.
- •4. Выполнение программы.
- •5. Ввод, ассемблирование, компоновка, выполнение и анализ листинга исходной программы.
- •Определение данных
- •1. Директивы определения данных.
- •2. Определение данных с числом повторений.
- •3. Директива определения байта (dв).
- •4. Директива определения слова (dw).
- •5. Директива определения двойного слова (dd).
- •6. Директива определения поля из четырех слов (dq).
- •7. Директива определения десяти байт (dt), директива equ.
- •Программы в com-файлах
- •1. Создание exe-файла.
- •2. Получение com-файла.
- •Логика и организация программы
- •1. Команда jmp.
- •2. Команда loop.
- •3. Сегмент стека.
- •4. Программа: расширение операции пересылки.
- •5. Программа: замена строчных букв на заглавные.
- •6. Команды сдвига и циклического сдвига.
- •7. Команды логических операций: and, or, xor, test, not.
- •Xor al,bl ;Логическое сравнение
- •Команды обработки строк
- •1. Rep: префикс повторения команды.
- •2. Программа: строковые операции.
- •3. Сканирование и замена.
- •4. Дублирование образца.
- •5. Программа: выравнивание справа при выводе на экран.
- •Арифметические операции 1: обработка двоичных данных
- •1. Сложение и вычитание.
- •2. Многословное сложение.
- •3. Умножение.
- •4. Повышение эффективности умножения.
- •5. Многословное умножение.
- •6. Сдвиг регистровой пары dx:ax.
- •7. Деление.
- •8. Деление вычитанием.
- •9. Преобразование знака.
- •Арифметические операции 2: обработка данных в форматах ascii и
- •1. Сложение в ascii-формате.
- •2. Вычитание в ascii-формате.
- •3. Умножение в ascii-формате.
- •4. Деление в ascii-формате.
- •5. Двоично-десятичный формат (bcd).
- •6. Преобразование ascii-формата в двоичный формат и наоборот.
- •Обработка таблиц
- •1. Прямой табличный доступ
- •2. Табличный поиск.
- •3. Табличный поиск с использованием сравнения строк.
- •4. Транслирующая команда xlat.
- •5. Программа: вывод шестнадцатиричных и ascii-кодов.
- •6. Программа: сортировка элементов таблицы.
- •Макрокоманды
- •If (условие)
- •If (условие)
- •1. Простое макроопределение.
- •2. Использование параметров в макрокомандах.
- •3. Комментарии в макрокомандах.
- •4. Использование макрокоманд внутри макроопределения.
- •5. Директива local.
- •6. Использование библиотек макроопределений.
- •7. Конкатенация (&).
- •8. Директивы повторения: rept, irp, irpc.
- •Inc ctr ;Увеличить счетчик
- •Inc dx ;Увеличить счетчик
- •Inc dx ;Увеличить счетчик
- •9. Макрокоманды, использующие директивы if и ifndef.
- •10. Макрокоманды, использующие директиву ifidn.
- •Связь между подпрограммами
- •1. Программа: использование директив extrn и public для меток.
- •2. Программа: использование директивы public в кодовом сегменте.
- •3. Программа: общие данные в подпрограмме.
- •4. Передача параметров.
4. Пример машинных кодов: определение размера памяти.
4.1. Базовая система ввода-вывода (BIOS) имеет подпрограмму, которая определяет размер памяти. Обращение к BIOS осуществляется по команде INT по прерыванию 12Н. В результате BIOS возвращает в регистр АХ размер памяти в килобайтах. Для этого необходимо вызвать отладчик DEBUG из DOS и ввести для команд INT 12H и RET следующие машинные коды:
E CS:100 CD 12 CB
4.2. Введите команду отладчика R для отображения содержимого регистров. При этом регистр IP должен содержать 0100 и высвечиваться команда INT 12.
4.3. 0 Введите команду отладчика T несколько раз и просмотрите выполняемые команды BIOS до тех пор пока не появится команда IRET. В этот момент регистр АХ содержит размер памяти в шестнадцатиричном формате. Теперь введите еще раз команду Т для выхода из BIOS и возврата в вашу программу. На экране появится команда RET для машинного кода СВ, который был введен вами.
4.4. Для завершения работы с программой и выхода из DEBUG в DOS введите команду отладчика Q.
5. Специальные средства отладчика.
5.1. Вызовите отладчик DEBUG и введите команду отладчика:
A 100
Эта команда переводит DEBUG в режим приема команд ассемблера и преобразования их в машинные коды. Число 100 задает смещение в сегменте команд. Отладчик выдает значение начального адреса сегмента кодов и смещения. Теперь можно вводить команды ассемблера последовательно одна за другой. Введите следующую программу:
MOV AL,25
MOV BL,32
ADD AL,BL
RET
Команда RET записывается в 106 ячейку относительно начала сегмента команд. В этот момент отладчик готов к приему команды в 107 ячейку. Не вводя информации нажмите клавишу "ввод"(Enter).
При этом операция ввода команд ассемблера будет прекращена.
5.2. Введите команду отладчика U, которая показывает машинные коды для команд ассемблера. Необходимо сообщить отладчику адреса первой и последней команд, которые необходимо просмотреть, в данном случае 100 и 106. Введите:
U 100,106
На экране появятся адреса ячеек, машинные коды команд и обозначение этих команд на ассемблере.
5.3. Выполните команду отладчика R для вывода содержимого регистров и первой команды программы.
5.4. С помощью команд Т выполните последовательно все команды введенной программы.
5.5. Для завершения работы с программой и выхода из DEBUG в DOS введите команду отладчика Q.
6. Сохранение программы из отладчика.
6.1. Вызвать отладчик DEBUG.
6.2. С помощью команды А со смещением 100 ввести программу:
MOV AX,0012
MOV [0004],AX
MOV AX,0053
MOV [0006],AX
MOV BX,0002
MOV AX,[0000]
ADD AX,AX
MOV DX,AX
ADD BX,DX
MOV AX,[BX]
MOV [0002],AX
RET
Последняя команда RET записывается в 011D ячейку сегмента команд. Следующая свободная ячейка для записи команды 011E.
6.3. Присвоить имя программе EBF с расширением COM. Для этого ввести команду N:
N EBF.COM
6.4. Запросить регистр СХ командой:
R CX
Отладчик выдаст сообщение СХ 0000 и приглашение к установке нового значения регистра СХ.
6.5. В регистре СХ указывается длина введенной программы. Длину программы определяют как разность между адресом следующим после последней команды программы и адресом первой команды программы, т.е. 011Е-0100=1Е. Вести число 1Е в регистр СХ.
6.6. Записать программу вводом команды: W.
6.7. Выйти из отладчика вводом команды: Q.
6.8. Выти из DOS в NORTON и проверить наличие файла EBF.COM на диске.
6.9. Отключить панели NORTON и загрузить из DOS программу по ее имени с помощью отладчика:
DEBUG EBF.COM
6.10. Ввести команду отладчика U и просмотреть исходную программу.
6.11. Выполнить трассировку программы, используя команды отладчика R и T.
6.12. С помощью команды U определить адрес 6 команды программы MOV AX,0001.
6.13. С помощью команды А заменить команду MOV AX,0001 командой MOV AX,0002.
6.14. С помощью команды U проверить правильность записи команды в программу.
6.15. Выполнить трассировку измененной программы, используя команды отладчика R и Т. Объяснить, что изменилось в выполнении программы.
6.16. Выйти из отладчика вводом команды: Q.
СОДЕРЖАНИЕ ОТЧЕТА
1. В отчете должны быть приведены все программы, рассматриваемые в лабораторной работе на языке машинных кодов с приведением ассемблерных мнемонических кодов соответствующих машинному коду.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Напишите машинные команды для:
а) пересылки значения 4629Н в регистр АХ;
б) сложения 036А с содержимым регистра АХ.
2. Предположим, что была введена следующая Е-команда:
Е CS:100 B8 45 01 05 25 00
Вместо значения 45 предполагалось 54. Напишите команду Е для корректировки только одного неправильно введенного байта, т.е. непосредственно замените 45 на 54.
3. Имеется следующая программа в машинных кодах:
B0 25 D0 E0 B3 15 F6 E3 CB
Программа выполняет следующее:
- пересылает значение 25Н в регистр AL;
- сдвигает содержимое регистра AL на один бит влево (в результате в AL будет 4А);
- пересылает значение 15Н в регистр BL;
- умножает содержимое регистра AL на содержимое регистра BL.
Используйте отладчик для ввода (Е) этой программы по адресу CS:100. Не, забывайте, что все значения представлены в шестнадцатиричном виде. После ввода программы наберите D CS:100 для просмотра сегмента кода. Затем введите команду R и необходимое число команд Т для пошагового выполнения программы до команды RET. Какое значение будет в регистре АХ в результате выполнения программы?
4. Используйте отладчик для ввода (Е) следующей программы в машинных кодах:
Данные: 25 15 00 00
Код: A0 00 00 D0 E0 F6 26 01 00 A3 02 00 CB
Программа выполняет следующее:
- пересылает содержимое одного байта по адресу DS:00 (25) в регистр AL;
- сдвигает содержимое регистра AL влево на один бит (получая в результате 4А);
- умножает AL на содержимое одного байта по адресу DS:01 (15);
- пересылает результат из АХ в слово, начинающееся по адресу DS:02.
После вводе программы используйте команды D для просмотра сегмента данных и сегмента кода. Затем введите команду R и необходимое число команд Т для достижения конца программы (RET). В этот момент регистр АХ должен содержать результат 0612. Еще раз используйте команду D DS:00 и определите какое значение записано по адресу DS:02.
ОТВЕТЫ:
1. а) В82946, б) 056А03
2. E CS:101 54
3. 0612
4. 12 06
Л а б о р а т о р н а я р а б о т а N 2