Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

B1c:0100 aa stosb

Использование программы-отладчика debug

В составе любой ОС, а также в любой среде разработки программных комплексов имеются программы-отладчики. У ОС MS DOS таким отладчиком была программа debug, в последних версиях OS Windowsntsd.exe. Первая программа используется для однопрограммных однопользовательских режимов работы и 16-разрядных приложений. Вторая программа нужна для работы в многопрограммном многопользовательском режиме работы с 32-разрядными приложениями. Программу debug можно использовать для обучения пользователей при начальном знакомстве с ОС и принципами их построения и работы. Она удобна для демонстрации процессов, происходящих в микропроцессоре во время работы и принципов управления различными устройствами компьютера.

Вызов программы debug осуществляется набором в командной строке её имени и нажатием <Enter>. Компьютер переходит в режим эмуляции MS DOS. Программа вызывается и размещается в памяти компьютера, начиная с ячейки 100h (16-ричный адрес). В следующей строке появляется мигающий минус «» – приглашение к вводу нужной команды.

Выход из программы debug осуществляется набором буквы q (Quit – завершение работы).

Список всех команд, выполняемых программой debug можно получить, если в строке приглашения набрать –?, как показано на рис. 1.5.

Рис 1.5

Программа debug позволяет анализировать и оценивать состояние аппаратных и программных средств компьютера в различных стадиях вычислительного процесса. Динамика изменения состояний ресурсов отслеживается в пошаговом (покомандном) режиме. Так, например, команда r (register) выдаёт на экран информацию о текущем состоянии всех программно доступных регистров компьютера.

Эта информация представлена двумя первыми строками скриншота.

R

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0B1C ES=0B1C SS=0B1C CS=0B1C IP=0100 NU UP EI PL NZ NA PO NC

B1C:0100 AA STOSB

В первой строке помещены:

Регистры данных или пользовательские регистры:

АХ – регистр аккумулятора;

ВХ – базовый регистр;

СХ – счётчик;

DX – регистр данных.

Указатели:

SP – указатель стека;

ВР – указатель базы;

SI – источник данных (индекс);

DI – приёмник данных (индекс);

IP – указатель команд (инструкций) – в середине второй строки.

Во второй строке:

Сегментные регистры:

DS – сегмент данных;

ES – дополнительный сегмент данных;

SS – сегмент стека;

CS – сегмент команд.

Правую часть второй строки занимают мнемонические значения разрядов регистра флагов FLAGS (NU UP El...), значения которых используются для ветвления вычислительного процесса.

Примечание. В последних моделях IBM PC с вводом многопрограммных режимов работы изменилось число регистров, их разрядность, состав и назначение отдельных полей, их функции в зависимости от режима и т.д.

Третья строка содержит указания об очередной подготовленной для выполнения команде: адрес размещения команды в памяти, 16-ричный код представлениякоманды и мнемонический код команды.

Адреса команд и данных являются параметрами многих команд программы debug. Исполнительный адрес Аисп в IBM PC состоит из суммы: адреса начала информационного сегмента (адреса базы) Анач и адреса байта в сегменте Асм (адрес смещения): Аиспнач + Асм.

Система MS DOS была создана для 16-разрядной модели компьютеров при максимальном размере памяти в 1 Мбайт (220 байт). Но 16-разрядные регистры не могли формировать 20-разрядные адреса. Малоразрядные (16-разрядные) адреса смещений Асм – адреса байтов обычно явно задаются в командах программ, а адреса Анач берутся по умолчанию с определенного сегментного регистра компьютера. Загрузка сегментных регистров осуществляется заблаговременно. При сложении по формуле содержимое сегментного регистра сдвигается на одну шестнадцатеричную тетраду, т.е. увеличивается в 16 раз. Младшая тетрада сдвинутого Анач всегда содержит 4 нулевых бита, то есть адреса Анач выровнены на границу параграфа или кратны шестнадцати.

В третьей строке указан исполнительный адрес следующей команды STOSB, формируемый из содержимого сегментного регистра CS=0B1C и указателя команд (инструкций) IP=0100. Их значения указаны через двоеточие (CS:IP). Значит, исполнительный адрес команды будет равен:

Аисп = CS ×16 + IP = 0В1С0 + 0100 = 0В2С0.

Некоторые полезные возможности программы debug.

1. Просмотр содержимого памяти.

1.1. Проверка объёма основной памяти DOS.

Эта информация после загрузки DOS находится в 413h и 414h байтах памяти (адреса младшего и старшего байтов в 16-ричном представлении). Пусть адрес сегмента 400 (если убрать последний нуль, то можно узнать начало параграфа 40) и смещения 13.

Надо набрать команду –d (dump – диапазон) 40:13 и нажать Enter. Ввод данных строчными или прописными буквами не имеет значения, так как DOS в командной строке не различает регистр символов ASCII. На экране дисплея получится следующая картина.

В каждой строке текста содержатся адреса 16 байтов, их 16-ричное и символьное представление, если такое существует в коде ASCII. Как и должно получиться, в первом (413) и втором (414) байтах распечатки содержатся цифры 80 и 02, т.е. с учётом «вращения байтов» (особенность памяти IBM -совместимого компьютера) должно получиться 0280h Кбайт в 16-ричном представлении. А в 10-чном: 2×16×16+8×16+0 = 640 Кб.

Что и должно быть!

1.2. Проверка «серийного номера и даты копирайта».

Эта информация находится в ПЗУ, начиная с адреса FE000h. Здесь находятся: 7-значный номер компьютера, дата копирайта, фирма изготовитель. Эта информация является символьной. Аналогично если набрать адрес памяти: –d FE00:0 <Enter>, то получится следующее.

1.3. Проверка даты «прошивки» ROM BIOS.

Информация находится по адресу: FFFF5h. Формат даты – американский, т.е. mm/dd/yy. Если ввести адрес и команду –d FFFF:5 <Enter>, то выдаётся информация о дате «прошивки» ПЗУ (ROM BIOS). В верхней строке в символьном представлении находится нужная дата (08/01/07).

1.4. Еще одна полезная операция!

Если надо определить местоположение в памяти какой-либо информации (например, какого-либо слова), то можно набрать и выполнить команду s (Search – поиск), задав адресные границы поиска и «ключевое слово». Например, выполнение команды: –s F000:0 L FFFF «IBM», где F000:0 – начальный адрес памяти ПЗУ, FFFF – конечный адрес, а «IBM» – ключевое слово, позволяет получить следующие результаты выполнения команды –s F000:0 L FFFF «IBM» <Enter>.

Ниже выполненной команды следует перечень адресов, в которых содержится искомое ключевое слово. Проверьте этот факт, набрав эти адреса памяти. Команду s (Search) можно использовать, например, для поиска вирусов, если известны их «следы» и т.п. Рассмотренные примеры позволяют объективно определить модель и возраст компьютера, а также просмотреть содержимое любой ячейки памяти.

1.5. Работа часов реального времени.

Время, измеряемое компьютером, формируется по отсчёту счётчика часов реального времени. 4 байта счётчика расположены в оперативной памяти, начиная с адреса 0046Ch. Значения счётчика корректируется по каждому сигналу от таймера с частотой 18,2 имп/с (точнее 18,206481). Тактовая частота системного таймера персонального компьютера составляет 1,19318 Мгц. Она кратна основной частоте, принятой в телевидении f =14,31818 Мгц, и составляет 1/12 этой частоты.

Значение счётчика можно найти с помощью программы debug. Надо записать два показания счётчика примерно через минуту, а затем найти разницу этих значений. Результат переводится из 16-ричной в 10-чную систему и делится на 18,2, чтобы получить данный результат в секундах. При этом темп изменения отсчётов действительно соответствует темпу изменения реального времени.

1.6. Выявление связей между ассемблерным и машинным кодом программы и содержимым основных регистров при выполнении команд.

Задача. Пусть дана следующая программа.

Адреса Ассемблерный код Машинный код Содержание
  MOV AX,123 B8 2301 (AX):=123h
  ADD AX,0025 05 2500 (AX):=123h+25h=148h
  MOV BX,AX 89 C3 (BX):=(AX)
  ADD BX,AX 01 C3 (BX):=(BX)+(AX)= 290h
010A MOV CX,AX 89 C1 (CX):=(AX)
010C SUB CX,AX 29 C1 (CX):=(CX)–(AX)= 148h
010E SUB AX,AX 29 C0 (CX):=(AX)–(AX)
010F NOP    
  RETF CB  

Обратите внимание при выполнении заданий на такие моменты: как вычисляются адреса команд? Как числовая информация размещается в памяти? Как должно и как меняется содержимое регистров АХ, ВХ, СХ?

Ввод программы в память ПК.

Сначала надо задать значение регистра CS в диапазоне (0400...9FF0). За пределами этого диапазона находятся зоны, контролируемые DOS. Значение CS можно взять равным значению, полученному введением команды –R (регистр). Последовательно строку за строкой следует ввести машинные коды. Для этого используется команда –E (Enter – ввод).

–E CS:100 B8 23 01 05 25 00 <Enter>

–E CS:106 89 С3 01 СЗ 89 C1 <Enter>

–E CS:10C 29 C1 29 C0 90 CB<Enter>

Затем надо подать команду –R (Registr) – команду чтения содержимого регистров, включая и регистр флагов. Это позволит просмотреть исходное состояние всех регистров общего назначения перед выполнением программы. Содержимое регистров CS и IP определяет адрес очередной выполняемой команды MOV АХ,123, адрес, машинный код и содержание которой приведено после перечня регистров.

Если теперь подать команду –Т (трассировка, т.е. покомандное выполнение программы с остановками), то можно увидеть последовательное изменение содержания регистров в соответствии с командами программы. Далее следует повторить выполнение команды –Т и проанализировать выполнение каждой очередной команды до тех пор, пока не будет выполнена последняя команда программы RETF.

Обратите внимание на следующие факты: как и почему меняется содержимое регистров после выполнения очередной команды программы? Как и почему меняется содержимое регистра флагов?

Если надо повторить трассировку программы, то следует:

· набрать и выполнить команду –R IP, для того чтобы просмотреть содержимое регистра IP;

· ввести 0100 и нажать клавишу <Enter>. Тем самым регистр IP вновь получает значение 0100, и можно снова повторить трассировку.

ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

1. Найти название и исполнительный адрес команды идущей за –r.

2. Вычислить объём основной памяти. Найти дату прошивки и адреса слова «IBM».

3. Найти два последовательных значения счётчика времени в 16-ричной и 10-чной системе. Вычислить промежуток времени в секундах.

4. Найти исходное содержимое регистров CS и IP и его изменение в ходе трассировки.

5. Записать всю информацию из выполнения заданий (1-4) в свой текстовый файл и показать его преподавателю.

6. Удалить созданный файл.


Дата добавления: 2015-11-14; просмотров: 51 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Практическая часть| Ріст і розвиток дитячого організму.

mybiblioteka.su - 2015-2024 год. (0.011 сек.)