ПРАКТИЧЕСКАЯ РАБОТА
Программма-отладчик как средство практического изучения организации ЭВМ
1. Цель pаботы: изучение основных инструкций отладчика Debug, ознакомлении со структурой микроЭВМ IBM PC и освоении особенностей выполнения этих инструкций.
2. Введение
Системный отладчик DEBUG является утилитой MS DOS и используется для:- отладки загpузочных модулей пpогpамм;- выполнения опеpаций с памятью и поpтами компьютеpа.
3. Порядок выполнения:
Сведения из теории
1.Состав и структура IBM PC
Структурную схему персональных компьютеров типа IBM PC различных модификаций можно представить в обобщенном виде, как показано на рисунке 1.1.
Рисунок 1.1
Персональный компьютер построен по модульному принципу, т.е. в его состав могут входить различные модули-устройства в зависимости от желания и финансовых возможностей покупателя. Отдельные модули соединяются между собой при помощи системной шины. На рисунке 1.1 показан минимальный комплект, включающий центральный процессор, оперативную память, дисплей с клавиатурой, накопители на гибких и жестких дисках, принтер и другие устройства. Центральный процессор, постоянная и оперативная память подсоединяются к общей шине непосредственно, а остальные устройства - при помощи контроллеров. В современных компьютерах для повышения производительности используют несколько шин различных типов.Конструктивно обычно процессор, оперативная память, накопители на дисках и контроллеры остальных устройств объединены в один электронный блок. При этом процессор, а также оперативная и постоянная память располагаются на так называемой системной, или материнской плате, к которой с помощью штепсельных разъемов подсоединяются остальные устройства.
2. Структура микропроцессора
Основу компьютера составляет микропроцессор, упрощенная структура которого показана на рисунке 1.2. [Здесь приведена структурная схема процессора Intel 80286.] Для этого компьютера данные и команды имеют в основном формат длиной 2 байта (16 бит), а оперативная память может быть емкостью до 1 Мбайт.
Рисунок 1.2
Устройство управления дешифрирует команды и вырабатывает сигналы управления различными блоками процессора, а также блоками остальных устройств. Основой блока управления служит микропрограммная память, на адресный вход которой подается код операции из регистра команд.
Арифметико-логическое устройство (АЛУ) служит для выполнения арифметических и логических операций. Помимо результата операции, который сохраняется в регистре или памяти, АЛУ определяет ряд признаков результата, или флагов, которые фиксируются на специальном регистре – регистре флагов. Они будут описаны ниже.
В качестве регистра команд используется блок очереди команд; он позволяет хранить шесть очередных байтов команды. Очередь команд заполняется автоматически, как только освобождаются 2 байта в регистрах этого блока. Этот блок позволяет разместить в нем длинную команду и совместить во времени выполнение одной команды и выборку из основной памяти (ОП) следующей команды.
Для формирования исполнительного адреса памяти [он определяется сложением начального адреса сегмента, находящегося в регистре, и смещения в команде (см. ниже)] служит сумматор адресов. Буферы адреса/состояния и адреса/данных обеспечивают связь микропроцессора с другими устройствами. Шина адреса/данных имеет разрядность 16 бит. По этой шине передаются данные или младшие 16 бит адреса. Для передачи старших четырех бит адреса используется шина адреса/состояния.
Микропроцессор содержит 14 программно-доступных регистров, т.е. регистров, имеющих адреса, к которым можно обратиться из программы:
общие регистры, или регистры общего назначения (AX, CX, DX, BX);
адресные регистры (SP, BP, SI, DI);
сегментные регистры (CS, SS, DS, ES);
регистр флагов (признаков результата);
счетчик команд (IP).
Программно-доступные регистры позволяют хранить слова длиной 16 бит. Формат и адреса программно-доступных регистров приведены на рисунке 1.3. Общие регистры, иногда называемые также регистрами общего назначения (AX, CX, DX, BX), используются в качестве сверхоперативной памяти. Они допускают обращение как ко всему регистру (два байта), так и отдельно к старшему (Н) и младшему (L) байтам. Например, регистр АХ состоит из регистров АН (старший байт) и АL (младший байт). При этом регистр АХ имеет адрес 000, а регистры АН и AL - адреса 100 и 000, соответственно.
Регистры SP, BP, SI и DI обычно используются для хранения адресной информации, необходимой для определения адреса при различных режимах адресации.
Указатель команд (IP), называемый также счетчиком команд, предназначен для хранения адреса выполняемой команды. Более точно, в нем хранится не полный адрес, а только смещение в текущем сегменте (см. ниже).
Регистр флагов служит для хранения признаков результата выполнения команды. Эти признаки используются для организации условных переходов в программах. На рисунке 1.3 показано, что в регистре флагов используются только 8 разрядов.
Рисунок 1.3
Обозначение флагов
Флаг
Установлен
Сбpошен
Описание
CF
CY
CN
Флаг пеpеноса. Устанавливается в состояние 1, если аpифметическая опеpация вызвала пеpенос (пpи сложении) или заем (пpи вычитании) из стаpшего бита pезультата. В пpотивном случае флаг CF сбpасывается
PF
PO
PE
Флаг четности. Во многих командах устанавливается в 1, если младшие восемь бит pезультата содеpжат четное число единичных бит. В пpотивном случае флаг PF сбpасывается в 0.
AF
AC
NA
Флаг вспомогательного пеpеноса.Устанавливается в 1, если аpифметическая опеpация вызвала пеpенос (пpи сложении) или заем (пpи вычитании) из младшей тетpады. В пpотивном случае флаг CF сбpасывается в 0. Пpогpаммно этот флаг недоступен.
ZF
ZR
NZ
Флаг нуля. Большинством команд устанавливается в 1, когда pезультат опеpации pавен 0.
SF
NG
PL
Флаг знака. Большинство команд устанавливают флаг SF в то же состояние, в каком находится стаpший бит pезультата.
IF
EI
DI
Флаг пpеpывания. Пpи установленном флаге IF пpоцессоp pаспознает и обpабатывает внешние аппаpатные пpеpывания. Пpи IF=0 пpоцессоp игноpиpует аппаpатные пpеpывания.
DF
UP
DN
Флаг напpавления обpаботки цепочек.Пpи DF=0 после выполнения цепочечной опеpации пpоизводится автоматический инкpемент, а в состоянии DF=1 - автоматический декpемент индексных pегистpов ESI/SI и EDI/DI, адpесующих цепочки.
OF
NV
OV
Флаг пеpеполнения. Флаг OF устанавливается в 1,если в аpифметических опеpациях со знаковыми опеpандами pезультат пpевышает диапазон пpедставимых чисел.В пpотивном случае OF сбpасывается в 0.
Сегментные регистры (DS, CS, ES, SS) служат для сегментной организации оперативной памяти. При этом общее пространство памяти в 1 Мбайт делится на сегменты по 64 Кбайт каждый. Расположение сегмента в памяти жестко не фиксируется и задается при помощи сегментных регистров. В этом случае адрес ячейки оперативной памяти определяется адресом сегмента и смещением, которое указывается в команде. Сегментная организация памяти позволяет обеспечить перемещаемость программных модулей, т.е. возможность их записи на любое свободное место в оперативной памяти. Назначение сегментных регистров:
CS - сегмент кода (программы), используется для задания начального адреса сегмента памяти, в котором записана программа;
DS - сегмент данных, задает начальный адрес сегмента памяти, в котором записаны данные для активной программы;
SS - сегмент стека, используется при организации стековой памяти;
ES - дополнительный сегмент, используется для временного хранения других сегментов, например, при выводе данных на терминал.
Как указано выше, емкость оперативной памяти этого компьютера составляет 1Мбайт, и адрес должен быть 20-битным, а разрядность регистров (в том числе сегментных регистров и регистров смещения) равна 16 бит. Поэтому для формирования исполнительного адреса памяти производится суммирование адреса сегмента и смещения, при этом адрес сегмента сдвигается влево на четыре бита.
Пусть, например, в регистре сегмента записан адрес сегмента 0000 0001 0001 0000, а смещение равно 0000 0011 0000 0000.
Тогда адрес памяти будет равен:
0000 0001 0001 0000
+ 0000 0011 0000 0000
---------------------------------------------
0000 0001 0100 0000 0000
или в шестнадцатеричном виде 0 1 4 0 0
Для удобства ввода информации с клавиатуры она представляется в шестнадцатеричной системе счисления.
Общие сведения об отладчике Debug
Программа Debug (отладчик) предназначена для отладки программ, написанных на языке Ассемблера или на машинном языке. Отладчик позволяет вводить в оперативную память целые программы или отдельные команды, выполнять их в автоматическом или пошаговом режиме, а также анализировать результаты их выполнения путем просмотра содержимого ячеек оперативной памяти и регистров процессора. Перечень основных инструкций (команд) отладчика и их функции приведены в таблице 1.1.
Таблица 1.1
Инструкция
Функция
A [адрес]
[адрес] = [смещение] или
[сегмент:смещение]
Ассемблировать набор команд. Нажать “Enter” на пустой строке для окончания ввода.
U [адрес] или
U [диапазон]
Дизассемблировать. Отображает мнемонику кода операции, записанного по указанному адресу или 128 байтов, начиная с последнего адреса после предыдущего ассемблирования.
D [диапазон]
[диапазон]=[адрес, адрес] или
[адрес, L количество байт]
Выдать на экран содержимое памяти из заданного диапазона в шестнадцатеричном (и символьном) виде. Cодержимое каждого байта выдается на экран в виде двух шестнадцатеричных цифр.
Например: D 400,407 или D 400 L8 или D 1000:400,407 - выдать на экран содержимое восьми ячеек памяти, начиная с адреса 400.
E адрес [байты]
Вводит байты или строки в оперативную память.
Например: E 400 12 34 56 78 9A (ввести цифровые данные) или E 400 “ABCDEF” (ввести символьные данные)
F диапазон [байты]
Заполняет память по заданному «образцу байтов».
Например: F 400,407 12 34 (заполнить байты 400...407 данными 1 2 3 4), или F 400,407 “XYZ”, или F 400 L8 “XYZ” (заполнить 8 байтов, начиная с адреса 400, символами XYZ)
G [=адрес] [[адрес]...]
Выполняет команду, адрес которой указан в CS:IP, с возможными контрольными точками в указанных адресах. Например: G 1005 - выполнить с текущего адреса до IP = 1005. При написании инструкции не забудьте знак «равно».
Т [=адрес] [число шагов]
Трассировка. Пошаговое выполнение программы, начиная с адреса, указанного в команде Т или в CS:IP. На каждом шаге выполняется одна команда с выдачей на экран содержимого регистров. Например: T 5 - выполнить пять команд в пошаговом режиме. Т=1000 5
P [=адрес] [число шагов]
Трассировка. Исключить пошаговое выполнение вызова процедур и т.п.
I [порт]
Ввод. Отображает значение, считанное из указанного порта (при вводе).
O [порт]
Вывод байта в указанный порт.
N [диск:] путь [параметры]
Имя. Устанавливает имя файла и параметры командной строки.
L [адрес]
Загрузка. Загружает файл по указанному адресу или в CS:100H
W [адрес]
Запись фрагмента оперативной памяти в виде файла с именем, введенным в команде N. Размер записываемого фрагмента содержится в BX:CX.
R [регистр]
Ввод или отображение значений в регистрах.
Например: R- отобразить содержимое регистра;
R AX - отобразить содержимое регистра АХ или R IP - отобразить содержимое регистра IP.
После отображения содержимого можно ввести новое значение, нажав перевод каретки (после вывода символа “ : ”).
S [диапазон]
Поиск в памяти. Указывает адрес, по которому содержатся указанные байты или строка.
Например: S 1000 L4F “AGA” - найти адрес, по которому содержится строка “AGA”; поиск вести, начиная с адреса 1000 и до адреса 1000 + 4F = 104F.
Q [выход]
Завершение работы с отладчиком.
Подготовка к выполнению работы
При подготовке к выполнению работы необходимо:
изучить теоретическую часть;
подробно изучить форматы инструкций D, E, F, R, S, G, T;
по структурной схеме микропроцессора изучить взаимодействие и работу его узлов при выполнении машинной команды;
подготовить материалы для отчета.
Порядок выполнения работы
В ходе работы выполнить:
Задание 1. Загрузить отладчик Debug. Для этого найти модуль debug.exe и запустить его. Признаком готовности отладчика к работе является символ “ - “ и мигающий курсор за ним в начале строки.Варианты загрузок:а) Windows XP, 7 - ПУСК,Выполнить, debug (Windows 8 8.1 - установить DOSBox0.74-win32-installer.exe в режиме совместимости и на диск С: отладчик DEBUG)б) Linux - c рабочего стола загрузить DOSBox и ввести
Задание 2. Выполнить инструкцию R. Изучить формат, в котором выдается содержимое регистров. Обратить внимание на разрядность. Выполнить инструкцию R для чтения данных из одного регистра (по указанию преподавателя). Записать новые данные в регистр (год рождения или шифр).
Задание 3. Выполнить инструкцию D c различными вариантами ее параметров. Изучить формат выдачи результатов ее выполнения.
Эта команда выводит содержимое указанной области памяти на экран. Следующие три примера используют команду D для просмотра одного и того же участка памяти, начинающегося со смещения ЗС1H в сегменте кода (CS):
D CS:3C1 (команда набрана заглавными буквами с пробелом);
DCS:3C1 ( команда набрана заглавными буквами без пробела);
dcs:3cl (команда набрана строчными буквами без пробела);
В результате выполнения команды получается восемь строк. В левой части каждой из них будет указан адрес первого слева показанного байта в форме сегмент: смещение. Основную часть строки, в центре, занимает шестнадцате ричное представление параграфа, начинающегося с указанного в начале строки байта. Справа на экран выведены в ASCII-форме символы этого параграфа, которые можно вывести на экран, для облегчения интерпретации шестнадцатеричной записи.
Команда D выводит 8 строк данных, в каждой из которых по 16 байт (32 шест надцатеричных разряда), всего – 128 байт, начиная с указанного адреса.
Адрес слева относится только к первому байту в строке, адреса после дующих байтов могут быть легко найдены простым счетом: например, если адрес первого байта – 0159:0240Н, то одиннадцатый байт в строке имеет адрес 0159:024АН. Шестнадцатеричное представление содержит два знака для каждого байта, байты разделяются пробелами для улучшения читаемости. Кроме того, восьмой и девятый байты разделяет дефис. Поэтому, например, если требуется найти байт со смещением хх13Н, начните с байта хх10Н и найдите третий после него байт.
Команда D также показывает содержимое регистров и состояние флагов в регистре Flags.
Упражнение 1: просмотр области данных BIOS
Первое упражнение показывает содержимое области данных BIOS в памяти, на чиная с адреса 400Н или, более точно, с адреса сегмента 40[0]Н. BIOS инициа лизирует значения в этой области памяти при включении компьютера и меняет их в ходе выполнения программ.
Просматривайте эти значения при помощи адреса из двух частей: в качестве адреса сегмента (то есть 400, с отброшенным младшим разрядом), и nn в качестве смещения от начала сегмента. Воспринимайте адрес 40:nn как сегмент 40[0]Н плюс смещение nnН.
Проверка параллельных и последовательных портов
Первые 16 байт области данных BIOS содержат адреса параллельных и после довательных портов. Введите следующую команду:
D 40:00 (и нажмите)
Первые четыре выведенных слова указывают на адреса портов от СОМ1 до COM4. Если на компьютере два последовательных порта, первые два слова, вероятно, содержат F803 и F802 в обращенной (с переставленными бай тами) последовательности. Последовательные порты имеют адреса 03F8 и 02F8. Следующие 4 слова указывают на параллельные порты от LPT1 до LPT4. Для системы с одним параллельным портом первое слово, вероятно, содержит 7803, т.е. адрес порта – 0378.
Проверка оборудования системы (результат запишите в отчет)
Слово состояния оборудования в области данных BIOS предлагает базовую информацию о присутствующих в системе устройствах. Это слово, расположенное по адресу 410Н - 411Н, можно просмотреть командой
D 40:10 (и нажмите)
Выведенные строки должны начинаться так:
0040:0010 хх хх ...
Допустим, что слово содержит 23 44 в шестнадцатеричной форме. Чтобы интерпретировать его, переставим байты (44 23) и преобразуем в двоичную форму:
Двоичное значение : 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 1
Позиция бита: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Эти биты означают:
Неописанные биты не используются .
Проверка состояния регистра клавиатуры (клавиша Shift)
В области данных BIOS по адресу 417Н хранится первый байт состояния регистра клавиатуры. Убедитесь, что Num Lock и Caps Lock выключены, и просмотрите содержимое байта по этому адресу командой D 40:17.
Результат будет похож на
0040:0017 00 00 ...
Проверка состояния видеоустройства
В области данных BIOS по адресу 449Н находится первая область видео данных (Video Data Area). Введите команду D 40:49. Первый показанный байт указывает на текущий видеорежим (например, 03 - цветной), а второй – число столбцов на экране (например, 50 означает режим с 80 столбцами). Число строк хранится по адресу 40:84Н.
Упражнение 2: Просмотр ROM BIOS
Сведения об авторском праве BIOS системы встроены в ROM BIOS no адресу FE00:0. В зависимости от производителя компьютера будут выведены различные строки, после которых будет указан семизначный серийный номер. Строка, указывающая на авторство BIOS, легко читается в виде ASCII-после довательности, а серийный номер – в виде шестнадцатеричного числа. Строка с ук азанием авторских прав может быть длиннее, чем показанный участок памяти; в этом случае для просмотра не показанной части снова введите D и нажмите.
Проверка даты производства BIOS (результат запишите в отчет)
Пользуясь командой D по адресу F000:FFF0 найдите и запишите в тетрадь дату прошивки BIOS Вашей машины/ Знание этой даты полезно при опре делении возраста и модели компьютера.
Используя команду D, вы можете просмотреть содержимое любой области памяти. Можно также последовательно просматривать память, просто повторно вводя D – DEBUG будет выводить 128 байт, следующих за последними просмотренными.
Задание 4. Выполнить инструкцию Е для ввода цифровой и символьной информации. При вводе цифровых данных байты данных необходимо разделять пробелами, а символьную строку заключать в апострофы. Правильность ввода проверить, выполнив инструкцию D. Убедиться в том, что при вводе, как шестнадцатеричного числа, так и соответствующего ему символа (например, числа 52 и символа R) в память заносится одна и та же информация.
Опробуйте работу команды Е . Изменение содеpжимого ячеек памяти: а) пpосмотpите содеpжимое нескольких ячеек памяти, начиная с адpеса 300Н. б) измените содеpжимое пеpвых 10 ячеек памяти, начиная с адpеса 300Н, записывая пpоизвольные числа. Напpимеp: Е300 АА 12 00 72 ВС 1F 54 6D 72 15 в) пpовеpьте коppектное выполнение команды Е.
Задание 5. Выполнить инструкцию F для заполнения памяти по заданному образцу (цифровому или символьному). Правильность заполнения памяти проверить, выполнив инструкцию D.
Заполнение области памяти пpоизвольными числами (команда F) a) заполните область памяти, начинающуюся с адpеса 300, нулями общим числом 1024. F300 L400 00 и пpовеpьте коppектное выполнение пpедыдущей команды с помощью команды D 300 L400. б) заполните отpезок памяти длиной 4096 байт (1000Н) повтоpяющейся паpой байтов 00 FF, начиная с адpеса DS:500. F 500 L1000 00 FF в) заполните область памяти, являющуюся текстовым дисплейным буфеpом : F B800:0000 L1000 41 05 41 15 41 85 Результат будет немедленно виден на экpане
Задание 6. Выполнить инструкцию S. В качестве «образца» использовать данные, записанные при выполнении задания 4.
Задание 7. Записать в память число 00 С3. (Этот код можно рассматривать как данные или как машинную команду сложения младших байтов регистров AX и BX). В регистры AX и BX записать произвольные числа. С помощью отладчика выполнить операцию сложения; для этого необходимо указать либо полный адрес команды (CS:IP), либо в счетчик команд (IP) загрузить смещение. Убедиться в правильности выполнения операции сложения по содержимому регистров AX и BX. Обратить внимание на формат результата после выполнения инструкции G.
Содержание отчета
В отчет по работе включить следующие материалы:
Тему и цель работы.
Форматы инструкций D, E, F, S, R, G, T.
Упрощенную структурную схему процессора с указанием последовательности работы его узлов при выполнении команды.
Результаты выполнения заданий.
Анализ полученных результатов и выводы по работе.
Контрольные вопросы
Какие устройства входят в состав IBM PC?
Какие блоки входят в состав микропроцессора?
Перечислите программно-доступные регистры IBM PC.
Для чего используются общие регистры?
Как формируется адрес памяти?
Для чего используется отладчик DEBUG?
Перечислите основные инструкции (команды) отладчика.
Как просмотреть содержимое фрагмента памяти?
Как изменить содержимое регистра?
Как выполнить машинную команду?
Рисунок 0CђЗаголовок 1CђЗаголовок 315
Программма-отладчик как средство практического изучения организации ЭВМ
1. Цель pаботы: изучение основных инструкций отладчика Debug, ознакомлении со структурой микроЭВМ IBM PC и освоении особенностей выполнения этих инструкций.
2. Введение
Системный отладчик DEBUG является утилитой MS DOS и используется для:- отладки загpузочных модулей пpогpамм;- выполнения опеpаций с памятью и поpтами компьютеpа.
3. Порядок выполнения:
Сведения из теории
1.Состав и структура IBM PC
Структурную схему персональных компьютеров типа IBM PC различных модификаций можно представить в обобщенном виде, как показано на рисунке 1.1.
Рисунок 1.1
Персональный компьютер построен по модульному принципу, т.е. в его состав могут входить различные модули-устройства в зависимости от желания и финансовых возможностей покупателя. Отдельные модули соединяются между собой при помощи системной шины. На рисунке 1.1 показан минимальный комплект, включающий центральный процессор, оперативную память, дисплей с клавиатурой, накопители на гибких и жестких дисках, принтер и другие устройства. Центральный процессор, постоянная и оперативная память подсоединяются к общей шине непосредственно, а остальные устройства - при помощи контроллеров. В современных компьютерах для повышения производительности используют несколько шин различных типов.Конструктивно обычно процессор, оперативная память, накопители на дисках и контроллеры остальных устройств объединены в один электронный блок. При этом процессор, а также оперативная и постоянная память располагаются на так называемой системной, или материнской плате, к которой с помощью штепсельных разъемов подсоединяются остальные устройства.
2. Структура микропроцессора
Основу компьютера составляет микропроцессор, упрощенная структура которого показана на рисунке 1.2. [Здесь приведена структурная схема процессора Intel 80286.] Для этого компьютера данные и команды имеют в основном формат длиной 2 байта (16 бит), а оперативная память может быть емкостью до 1 Мбайт.
Рисунок 1.2
Устройство управления дешифрирует команды и вырабатывает сигналы управления различными блоками процессора, а также блоками остальных устройств. Основой блока управления служит микропрограммная память, на адресный вход которой подается код операции из регистра команд.
Арифметико-логическое устройство (АЛУ) служит для выполнения арифметических и логических операций. Помимо результата операции, который сохраняется в регистре или памяти, АЛУ определяет ряд признаков результата, или флагов, которые фиксируются на специальном регистре – регистре флагов. Они будут описаны ниже.
В качестве регистра команд используется блок очереди команд; он позволяет хранить шесть очередных байтов команды. Очередь команд заполняется автоматически, как только освобождаются 2 байта в регистрах этого блока. Этот блок позволяет разместить в нем длинную команду и совместить во времени выполнение одной команды и выборку из основной памяти (ОП) следующей команды.
Для формирования исполнительного адреса памяти [он определяется сложением начального адреса сегмента, находящегося в регистре, и смещения в команде (см. ниже)] служит сумматор адресов. Буферы адреса/состояния и адреса/данных обеспечивают связь микропроцессора с другими устройствами. Шина адреса/данных имеет разрядность 16 бит. По этой шине передаются данные или младшие 16 бит адреса. Для передачи старших четырех бит адреса используется шина адреса/состояния.
Микропроцессор содержит 14 программно-доступных регистров, т.е. регистров, имеющих адреса, к которым можно обратиться из программы:
общие регистры, или регистры общего назначения (AX, CX, DX, BX);
адресные регистры (SP, BP, SI, DI);
сегментные регистры (CS, SS, DS, ES);
регистр флагов (признаков результата);
счетчик команд (IP).
Программно-доступные регистры позволяют хранить слова длиной 16 бит. Формат и адреса программно-доступных регистров приведены на рисунке 1.3. Общие регистры, иногда называемые также регистрами общего назначения (AX, CX, DX, BX), используются в качестве сверхоперативной памяти. Они допускают обращение как ко всему регистру (два байта), так и отдельно к старшему (Н) и младшему (L) байтам. Например, регистр АХ состоит из регистров АН (старший байт) и АL (младший байт). При этом регистр АХ имеет адрес 000, а регистры АН и AL - адреса 100 и 000, соответственно.
Регистры SP, BP, SI и DI обычно используются для хранения адресной информации, необходимой для определения адреса при различных режимах адресации.
Указатель команд (IP), называемый также счетчиком команд, предназначен для хранения адреса выполняемой команды. Более точно, в нем хранится не полный адрес, а только смещение в текущем сегменте (см. ниже).
Регистр флагов служит для хранения признаков результата выполнения команды. Эти признаки используются для организации условных переходов в программах. На рисунке 1.3 показано, что в регистре флагов используются только 8 разрядов.
Рисунок 1.3
Обозначение флагов
Флаг
Установлен
Сбpошен
Описание
CF
CY
CN
Флаг пеpеноса. Устанавливается в состояние 1, если аpифметическая опеpация вызвала пеpенос (пpи сложении) или заем (пpи вычитании) из стаpшего бита pезультата. В пpотивном случае флаг CF сбpасывается
PF
PO
PE
Флаг четности. Во многих командах устанавливается в 1, если младшие восемь бит pезультата содеpжат четное число единичных бит. В пpотивном случае флаг PF сбpасывается в 0.
AF
AC
NA
Флаг вспомогательного пеpеноса.Устанавливается в 1, если аpифметическая опеpация вызвала пеpенос (пpи сложении) или заем (пpи вычитании) из младшей тетpады. В пpотивном случае флаг CF сбpасывается в 0. Пpогpаммно этот флаг недоступен.
ZF
ZR
NZ
Флаг нуля. Большинством команд устанавливается в 1, когда pезультат опеpации pавен 0.
SF
NG
PL
Флаг знака. Большинство команд устанавливают флаг SF в то же состояние, в каком находится стаpший бит pезультата.
IF
EI
DI
Флаг пpеpывания. Пpи установленном флаге IF пpоцессоp pаспознает и обpабатывает внешние аппаpатные пpеpывания. Пpи IF=0 пpоцессоp игноpиpует аппаpатные пpеpывания.
DF
UP
DN
Флаг напpавления обpаботки цепочек.Пpи DF=0 после выполнения цепочечной опеpации пpоизводится автоматический инкpемент, а в состоянии DF=1 - автоматический декpемент индексных pегистpов ESI/SI и EDI/DI, адpесующих цепочки.
OF
NV
OV
Флаг пеpеполнения. Флаг OF устанавливается в 1,если в аpифметических опеpациях со знаковыми опеpандами pезультат пpевышает диапазон пpедставимых чисел.В пpотивном случае OF сбpасывается в 0.
Сегментные регистры (DS, CS, ES, SS) служат для сегментной организации оперативной памяти. При этом общее пространство памяти в 1 Мбайт делится на сегменты по 64 Кбайт каждый. Расположение сегмента в памяти жестко не фиксируется и задается при помощи сегментных регистров. В этом случае адрес ячейки оперативной памяти определяется адресом сегмента и смещением, которое указывается в команде. Сегментная организация памяти позволяет обеспечить перемещаемость программных модулей, т.е. возможность их записи на любое свободное место в оперативной памяти. Назначение сегментных регистров:
CS - сегмент кода (программы), используется для задания начального адреса сегмента памяти, в котором записана программа;
DS - сегмент данных, задает начальный адрес сегмента памяти, в котором записаны данные для активной программы;
SS - сегмент стека, используется при организации стековой памяти;
ES - дополнительный сегмент, используется для временного хранения других сегментов, например, при выводе данных на терминал.
Как указано выше, емкость оперативной памяти этого компьютера составляет 1Мбайт, и адрес должен быть 20-битным, а разрядность регистров (в том числе сегментных регистров и регистров смещения) равна 16 бит. Поэтому для формирования исполнительного адреса памяти производится суммирование адреса сегмента и смещения, при этом адрес сегмента сдвигается влево на четыре бита.
Пусть, например, в регистре сегмента записан адрес сегмента 0000 0001 0001 0000, а смещение равно 0000 0011 0000 0000.
Тогда адрес памяти будет равен:
0000 0001 0001 0000
+ 0000 0011 0000 0000
---------------------------------------------
0000 0001 0100 0000 0000
или в шестнадцатеричном виде 0 1 4 0 0
Для удобства ввода информации с клавиатуры она представляется в шестнадцатеричной системе счисления.
Общие сведения об отладчике Debug
Программа Debug (отладчик) предназначена для отладки программ, написанных на языке Ассемблера или на машинном языке. Отладчик позволяет вводить в оперативную память целые программы или отдельные команды, выполнять их в автоматическом или пошаговом режиме, а также анализировать результаты их выполнения путем просмотра содержимого ячеек оперативной памяти и регистров процессора. Перечень основных инструкций (команд) отладчика и их функции приведены в таблице 1.1.
Таблица 1.1
Инструкция
Функция
A [адрес]
[адрес] = [смещение] или
[сегмент:смещение]
Ассемблировать набор команд. Нажать “Enter” на пустой строке для окончания ввода.
U [адрес] или
U [диапазон]
Дизассемблировать. Отображает мнемонику кода операции, записанного по указанному адресу или 128 байтов, начиная с последнего адреса после предыдущего ассемблирования.
D [диапазон]
[диапазон]=[адрес, адрес] или
[адрес, L количество байт]
Выдать на экран содержимое памяти из заданного диапазона в шестнадцатеричном (и символьном) виде. Cодержимое каждого байта выдается на экран в виде двух шестнадцатеричных цифр.
Например: D 400,407 или D 400 L8 или D 1000:400,407 - выдать на экран содержимое восьми ячеек памяти, начиная с адреса 400.
E адрес [байты]
Вводит байты или строки в оперативную память.
Например: E 400 12 34 56 78 9A (ввести цифровые данные) или E 400 “ABCDEF” (ввести символьные данные)
F диапазон [байты]
Заполняет память по заданному «образцу байтов».
Например: F 400,407 12 34 (заполнить байты 400...407 данными 1 2 3 4), или F 400,407 “XYZ”, или F 400 L8 “XYZ” (заполнить 8 байтов, начиная с адреса 400, символами XYZ)
G [=адрес] [[адрес]...]
Выполняет команду, адрес которой указан в CS:IP, с возможными контрольными точками в указанных адресах. Например: G 1005 - выполнить с текущего адреса до IP = 1005. При написании инструкции не забудьте знак «равно».
Т [=адрес] [число шагов]
Трассировка. Пошаговое выполнение программы, начиная с адреса, указанного в команде Т или в CS:IP. На каждом шаге выполняется одна команда с выдачей на экран содержимого регистров. Например: T 5 - выполнить пять команд в пошаговом режиме. Т=1000 5
P [=адрес] [число шагов]
Трассировка. Исключить пошаговое выполнение вызова процедур и т.п.
I [порт]
Ввод. Отображает значение, считанное из указанного порта (при вводе).
O [порт]
Вывод байта в указанный порт.
N [диск:] путь [параметры]
Имя. Устанавливает имя файла и параметры командной строки.
L [адрес]
Загрузка. Загружает файл по указанному адресу или в CS:100H
W [адрес]
Запись фрагмента оперативной памяти в виде файла с именем, введенным в команде N. Размер записываемого фрагмента содержится в BX:CX.
R [регистр]
Ввод или отображение значений в регистрах.
Например: R- отобразить содержимое регистра;
R AX - отобразить содержимое регистра АХ или R IP - отобразить содержимое регистра IP.
После отображения содержимого можно ввести новое значение, нажав перевод каретки (после вывода символа “ : ”).
S [диапазон]
Поиск в памяти. Указывает адрес, по которому содержатся указанные байты или строка.
Например: S 1000 L4F “AGA” - найти адрес, по которому содержится строка “AGA”; поиск вести, начиная с адреса 1000 и до адреса 1000 + 4F = 104F.
Q [выход]
Завершение работы с отладчиком.
Подготовка к выполнению работы
При подготовке к выполнению работы необходимо:
изучить теоретическую часть;
подробно изучить форматы инструкций D, E, F, R, S, G, T;
по структурной схеме микропроцессора изучить взаимодействие и работу его узлов при выполнении машинной команды;
подготовить материалы для отчета.
Порядок выполнения работы
В ходе работы выполнить:
Задание 1. Загрузить отладчик Debug. Для этого найти модуль debug.exe и запустить его. Признаком готовности отладчика к работе является символ “ - “ и мигающий курсор за ним в начале строки.Варианты загрузок:а) Windows XP, 7 - ПУСК,Выполнить, debug (Windows 8 8.1 - установить DOSBox0.74-win32-installer.exe в режиме совместимости и на диск С: отладчик DEBUG)б) Linux - c рабочего стола загрузить DOSBox и ввести
Задание 2. Выполнить инструкцию R. Изучить формат, в котором выдается содержимое регистров. Обратить внимание на разрядность. Выполнить инструкцию R для чтения данных из одного регистра (по указанию преподавателя). Записать новые данные в регистр (год рождения или шифр).
Задание 3. Выполнить инструкцию D c различными вариантами ее параметров. Изучить формат выдачи результатов ее выполнения.
Эта команда выводит содержимое указанной области памяти на экран. Следующие три примера используют команду D для просмотра одного и того же участка памяти, начинающегося со смещения ЗС1H в сегменте кода (CS):
D CS:3C1 (команда набрана заглавными буквами с пробелом);
DCS:3C1 ( команда набрана заглавными буквами без пробела);
dcs:3cl (команда набрана строчными буквами без пробела);
В результате выполнения команды получается восемь строк. В левой части каждой из них будет указан адрес первого слева показанного байта в форме сегмент: смещение. Основную часть строки, в центре, занимает шестнадцате ричное представление параграфа, начинающегося с указанного в начале строки байта. Справа на экран выведены в ASCII-форме символы этого параграфа, которые можно вывести на экран, для облегчения интерпретации шестнадцатеричной записи.
Команда D выводит 8 строк данных, в каждой из которых по 16 байт (32 шест надцатеричных разряда), всего – 128 байт, начиная с указанного адреса.
Адрес слева относится только к первому байту в строке, адреса после дующих байтов могут быть легко найдены простым счетом: например, если адрес первого байта – 0159:0240Н, то одиннадцатый байт в строке имеет адрес 0159:024АН. Шестнадцатеричное представление содержит два знака для каждого байта, байты разделяются пробелами для улучшения читаемости. Кроме того, восьмой и девятый байты разделяет дефис. Поэтому, например, если требуется найти байт со смещением хх13Н, начните с байта хх10Н и найдите третий после него байт.
Команда D также показывает содержимое регистров и состояние флагов в регистре Flags.
Упражнение 1: просмотр области данных BIOS
Первое упражнение показывает содержимое области данных BIOS в памяти, на чиная с адреса 400Н или, более точно, с адреса сегмента 40[0]Н. BIOS инициа лизирует значения в этой области памяти при включении компьютера и меняет их в ходе выполнения программ.
Просматривайте эти значения при помощи адреса из двух частей: в качестве адреса сегмента (то есть 400, с отброшенным младшим разрядом), и nn в качестве смещения от начала сегмента. Воспринимайте адрес 40:nn как сегмент 40[0]Н плюс смещение nnН.
Проверка параллельных и последовательных портов
Первые 16 байт области данных BIOS содержат адреса параллельных и после довательных портов. Введите следующую команду:
D 40:00 (и нажмите
Первые четыре выведенных слова указывают на адреса портов от СОМ1 до COM4. Если на компьютере два последовательных порта, первые два слова, вероятно, содержат F803 и F802 в обращенной (с переставленными бай тами) последовательности. Последовательные порты имеют адреса 03F8 и 02F8. Следующие 4 слова указывают на параллельные порты от LPT1 до LPT4. Для системы с одним параллельным портом первое слово, вероятно, содержит 7803, т.е. адрес порта – 0378.
Проверка оборудования системы (результат запишите в отчет)
Слово состояния оборудования в области данных BIOS предлагает базовую информацию о присутствующих в системе устройствах. Это слово, расположенное по адресу 410Н - 411Н, можно просмотреть командой
D 40:10 (и нажмите
Выведенные строки должны начинаться так:
0040:0010 хх хх ...
Допустим, что слово содержит 23 44 в шестнадцатеричной форме. Чтобы интерпретировать его, переставим байты (44 23) и преобразуем в двоичную форму:
Двоичное значение : 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 1
Позиция бита: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Эти биты означают:
Неописанные биты не используются .
Проверка состояния регистра клавиатуры (клавиша Shift)
В области данных BIOS по адресу 417Н хранится первый байт состояния регистра клавиатуры. Убедитесь, что Num Lock и Caps Lock выключены, и просмотрите содержимое байта по этому адресу командой D 40:17.
Результат будет похож на
0040:0017 00 00 ...
Проверка состояния видеоустройства
В области данных BIOS по адресу 449Н находится первая область видео данных (Video Data Area). Введите команду D 40:49. Первый показанный байт указывает на текущий видеорежим (например, 03 - цветной), а второй – число столбцов на экране (например, 50 означает режим с 80 столбцами). Число строк хранится по адресу 40:84Н.
Упражнение 2: Просмотр ROM BIOS
Сведения об авторском праве BIOS системы встроены в ROM BIOS no адресу FE00:0. В зависимости от производителя компьютера будут выведены различные строки, после которых будет указан семизначный серийный номер. Строка, указывающая на авторство BIOS, легко читается в виде ASCII-после довательности, а серийный номер – в виде шестнадцатеричного числа. Строка с ук азанием авторских прав может быть длиннее, чем показанный участок памяти; в этом случае для просмотра не показанной части снова введите D и нажмите
Проверка даты производства BIOS (результат запишите в отчет)
Пользуясь командой D по адресу F000:FFF0 найдите и запишите в тетрадь дату прошивки BIOS Вашей машины/ Знание этой даты полезно при опре делении возраста и модели компьютера.
Используя команду D, вы можете просмотреть содержимое любой области памяти. Можно также последовательно просматривать память, просто повторно вводя D – DEBUG будет выводить 128 байт, следующих за последними просмотренными.
Задание 4. Выполнить инструкцию Е для ввода цифровой и символьной информации. При вводе цифровых данных байты данных необходимо разделять пробелами, а символьную строку заключать в апострофы. Правильность ввода проверить, выполнив инструкцию D. Убедиться в том, что при вводе, как шестнадцатеричного числа, так и соответствующего ему символа (например, числа 52 и символа R) в память заносится одна и та же информация.
Опробуйте работу команды Е . Изменение содеpжимого ячеек памяти: а) пpосмотpите содеpжимое нескольких ячеек памяти, начиная с адpеса 300Н. б) измените содеpжимое пеpвых 10 ячеек памяти, начиная с адpеса 300Н, записывая пpоизвольные числа. Напpимеp: Е300 АА 12 00 72 ВС 1F 54 6D 72 15 в) пpовеpьте коppектное выполнение команды Е.
Задание 5. Выполнить инструкцию F для заполнения памяти по заданному образцу (цифровому или символьному). Правильность заполнения памяти проверить, выполнив инструкцию D.
Заполнение области памяти пpоизвольными числами (команда F) a) заполните область памяти, начинающуюся с адpеса 300, нулями общим числом 1024. F300 L400 00 и пpовеpьте коppектное выполнение пpедыдущей команды с помощью команды D 300 L400. б) заполните отpезок памяти длиной 4096 байт (1000Н) повтоpяющейся паpой байтов 00 FF, начиная с адpеса DS:500. F 500 L1000 00 FF в) заполните область памяти, являющуюся текстовым дисплейным буфеpом : F B800:0000 L1000 41 05 41 15 41 85 Результат будет немедленно виден на экpане
Задание 6. Выполнить инструкцию S. В качестве «образца» использовать данные, записанные при выполнении задания 4.
Задание 7. Записать в память число 00 С3. (Этот код можно рассматривать как данные или как машинную команду сложения младших байтов регистров AX и BX). В регистры AX и BX записать произвольные числа. С помощью отладчика выполнить операцию сложения; для этого необходимо указать либо полный адрес команды (CS:IP), либо в счетчик команд (IP) загрузить смещение. Убедиться в правильности выполнения операции сложения по содержимому регистров AX и BX. Обратить внимание на формат результата после выполнения инструкции G.
Содержание отчета
В отчет по работе включить следующие материалы:
Тему и цель работы.
Форматы инструкций D, E, F, S, R, G, T.
Упрощенную структурную схему процессора с указанием последовательности работы его узлов при выполнении команды.
Результаты выполнения заданий.
Анализ полученных результатов и выводы по работе.
Контрольные вопросы
Какие устройства входят в состав IBM PC?
Какие блоки входят в состав микропроцессора?
Перечислите программно-доступные регистры IBM PC.
Для чего используются общие регистры?
Как формируется адрес памяти?
Для чего используется отладчик DEBUG?
Перечислите основные инструкции (команды) отладчика.
Как просмотреть содержимое фрагмента памяти?
Как изменить содержимое регистра?
Как выполнить машинную команду?
Рисунок 0CђЗаголовок 1CђЗаголовок 315