
методические указания для выполнения лабораторных работ / Вводная лабораторная работа по Ассемблеру
.docВводная лабораторная работа.
ИСПОЛЬЗОВАНИЕ СИСТЕМНОЙ ПРОГРАММЫ DEBUG
для просмотра памяти, ввода программ и осуществления трассировки их выполнения.
1. ОСНОВНЫЕ ПОНЯТИЯ
Микропроцессор ПК состоит из:
-
Операционного устройства;
-
Шинного интерфейса.
Операционное устройство включает в себя:
-
Устройство микропрограммного управления;
-
Регистры микропроцессора (кроме сегментных);
-
АЛУ.
Регистры.
Микропроцессоры содержат 32 регистра, из которых 16 пользовательских и 16 системных. Пользовательские регистры делят на виды:
-
регистры общего назначения
-
сегментные регистры
-
регистры состояния и управления (содержат информацию о состоянии МП, исполняемой программы и позволяют изменить это состояние);
-
Регистры сопроцессора (предназначены для написания программ, использующих тип данных с плавающей точкой);
-
Целочисленные регистры ММХ – расширения;
-
Регистры ММХ – расширения с плавающей точкой;
-
Регистр флагов;
-
Регистр указатель команд.
Регистры общего назначения.
Регистры общего назначения – это 32 – битные регистры.
Регистр AX – называется аккумулятором, является основным сумматором, применяется для операции ввода – вывода, операции над строками. применение этого регистра для некоторых операций являются необходимым (*,:).
Регистр BX – базовый. Применяется для хранения базового адреса и некоторого объекта в памяти. Один из регистров, который может использоваться в качестве индекса для расширенной адресации.
Регистр CX – регистр счетчика.
Может использоваться для вычисления, если в задаче некоторое число повторений .При организации циклов или в командах сдвига влево или вправо.
DX – регистр данных, применяется для некоторых операций ввода – вывода, для обычных вычислений и для тех вычислений, когда требуется использовать регистровую пару AX,BX.
Регистровые указатели – обеспечиваю доступ к сегменту стека и кроме того могут использоваться для операций сложения и вычитания.
SP – указатель стека, обеспечивает использование стека в памяти и позволяет временно хранить адреса и данные. Причем он связан с регистром SS.
BP – указатель базы стека. Обеспечивает произвольный доступ к любому месту в стеке.
Стек – небольшой участок в памяти, который используется для временного хранения переменных, передачи параметров вызываемым подпрограммам и сохранение возврата при вызове процедур и прерываний. Размер стека зависит от режима работы микропроцессора и ограничивается 64 Кбайтами. Стек располагается в сегменте памяти, описываемом регистром SS, и текущее смещение вершины стека отражено в регистре ESP, причем во время записи значение этого смещения уменьшается, то есть он «растет вниз» от максимально возможного адреса.
Индексные регистры - применяются для расширенной адресации, в операциях сложения и вычитания.
SI – индекс источника. применяется для цепочных операций и содержит текущий адрес элемента в цепочке – источнике.
DI – индекс приемника. Используется как и SI, содержит текущий адрес в цепочке приемника.
Сегментные регистры.
Сегмент – некоторая область памяти, которая начинается на границе параграфа, т.е. по адресу, кратному 16. Существуют 3 сегмента, размером до 64 Кб. Могут располагаться в любом месте памяти.
CS – сегмент кода содержит все машинные команды в программе, которые необходимо выполнить. Начальный адрес содержится в регистре CS.
DS – сегмент данных - содержит константы, различные рабочие области, используемые в программе. Начальный адрес этого сегмента записан в регистр DS.
Сегмент стека – SS, содержит адрес возврата в ОС, и для вызова подпрограмм при возврате в главную программу.
Сегменты могут находиться в любом месте памяти, могут накладываться друг на друга, перекрываться, занимать непересекающиеся области.
ES, GS, FS - дополнительные регистры сегмента данных. При их использовании их адреса должны быть указаны явно с помощью специальных префиксов переопределения сегментов в команде.
Все адреса команд внутри программы относительны к началу сегмента. Такие адреса называются смещением. Для обращения по любому адресу в программе компьютер складывает адрес в регистре сегмента с тем смещением, который нам нужен.
Смещение может измениться от 0000 до FFFF –65535.
Пример: DS=045FH
0006h (смещение)
Для того, чтобы сформировать адрес необходимо выполнить:
0000 045F0H
0002 045F2H
0004 045F4H
0006 045F6H
Формирование физического адреса.
-
адрес в регистре сегмента умножить на 10h
-
к полученному числу прибавить соответствующее смещение
-
0045Fh*10h=045F0h
-
045F0h+0006h=045F6h
Регистры состояния и управления
1. Регистр указателя команды. Смещение очередной выполняемой команды всегда храниться в этом регистре.
2. Регистры флагов
2. ХОД РАБОТЫ
Использование системной программы DEBUG для просмотра памяти, ввода программ и осуществления трассировки их выполнения.
-
Просмотр памяти
Для просмотра содержимого ячеек памяти используется программа DOS DEBUG.
Для запуска этой программы запустите сеанс MS DOS, выберите диск С:\, введите DEBUG и нажмите Enter.
1.1. Размер памяти. Размер доступной для работы памяти находится в ячейках памяти 413Н Ии 414Н, и его можно просмотреть по адресу, состоящему из двух частей: 400 – это адрес сегмента, который записывается как 40 (последний нуль подразумевается); 13 - это смещение от начала сегмента.
Введите запрос: D 40:13 (Enter)
Первые два байта, появившиеся на экране в шестнадцатиричном представлении, содержат объем памяти в килобайтах, причем байты располагаются в обратном порядке.
Шестнадцатиричное обратное |
Шестнадцатиричное нормальное |
Десятичное (К) |
80 00 |
00 80 |
128 |
00 01 |
01 00 |
256 |
80 01 |
01 80 |
384 |
00 02 |
02 00 |
512 |
80 02 |
02 80 |
640 |
-
Серийный номер.
Серийный номер ПК находится в ROM по адресу FE000Н. Введите с клавиатуры: D FE00:0 (Enter)
1.3. Дата ROM BIOS. Дата в формате mm/dd/yy предназначена для определения модели и возраста ПК и находится по адресу FFFF5Н. Введите: D FFFF:05 (Enter)
- Для окончания работы и выхода из отладчика в DOS введите команду Q (Quit).
-
Пример машинных кодов: непосредственные данные
Программа на машинном языке состоит из команд. Машинные команды находятся в памяти друг за другом и выполняются последовательно. В машинном коде команда пересылки MOV может кодироваться как В8 или как 8В.
Программа показана в шестнадцатиричном формате
Команда |
Назначение |
В82301 |
Переслать значение 0123Н в АХ |
052500 |
Прибавить значение 0025Н к АХ |
8BD8 |
Переслать содержимое АХ в ВХ |
03D8 |
Прибавить содержимое АХ к ВХ |
8BCB |
Переслать содержимое ВХ в СХ |
2BCB |
Вычесть содержимое АХ из АХ (очистка АХ) |
90 |
Нет операции |
CB |
Возврат в DOS |
Можно ввести эту программу в память машины и выполнить ее покомандно. В то же время можно просматривать содержимое регистров после выполнения каждой команды.
- Введите команду запуска отладчика DEBUG и нажмите (Enter).
- Для ввода программы введите команду:
E CS:100 B8 23 01 05 25 00 (Enter)
Команда Е обозначает ввод (Enter). Параметр CS:100 определяет адрес памяти, куда будут вводиться команды. Команда Е записывает каждую пару шестнадцатиричных цифр в память в виде байта, начиная с адреса CS:100 до адреса CS:105.
- Введите команду:
E CS:106 8B D8 03 D8 8B CB (Enter)
Команда Е вводит шесть байтов в ячейки с CS:106 и далее в 107, 108, 109, 10А и 10В.
- Последняя команда вводит шесть байтов:
E CS:10C 2B C8 2B C0 90 CB (Enter)
Выполнение команд программы:
- Введите команду R для просмотра содержимого регистров и флагов. В данный момент отладчик покажет содержимое регистров в шестнадцатиричном формате: АХ=0000. Регистр IР=0100, т.к. выполняемая команда находится на смещении 100Н байт от начала сегмента кодов.
Регистр флагов покажет определенные значения: NV UP DI NZ NA PO NC, которые означают: нет переполнения, прерывания запрещены, знак плюс, не ноль, нет внешнего переноса, контроль на четность и нет переноса.
Регистр CS содержит числовое значение, а команда выглядит, например, следующим образом:
13С6:0100 В82301 MOV АХ,0123
CS=13С6 указывает, что начало сегмента кода находится по смещению 13С6. Значение 13С6:0100 обозначает 10016 байт от начального адреса 13С6 в регистре CS.
В82301 – команда, введенная по адресу CS:100.
MOV AX,0123 – ассемблерный мнемонический код, соответствующий команде.
- Для выполнения команды MOV нажмите клавишу Т (для трассировки) и (Enter).
Отладчик выдаст на экран содержимое регистров, флаги и следующую команду. Регистр АХ=0123, IP:0103 показывает адрес следующей команды.
- Для выполнения последующих команд снова введите команды Т.
- Можно ввести Т для выполнения команд 90 и СВ, но это сделайте позже. Для просмотра программы в Машиных кодах в сегменте кодов введите:
D CS:100 (Enter)
Отладчик выдаст на каждую строку по 16 байт данных в шестнадцатиричном представлении. Первая строка дампа начинается с 00 и представляет содержимое ячеек от CS:100 до CS:10F. Вторая строка – от CS:110 до CS:11F. Несмотря на то, что программа заканчивается по адресу CS:111, команда Damp выдает восемь строк с адреса CS:100 до CS:170.
- Закончите выполнение программы.
- Выйдите из программы DEBUG.