Как настроить смартфоны и ПК. Информационный портал

Описание команд отладчика debug.



Программа DEBUG (отладчик) дает средство обнаружения ошибок при
работе с программой, транслированной в машинный язык. Программа
DEBUG обеспечивает возможность пошагово выполнять программу и
следить за тем, что при этом происходит. Программа DEBUG - это еще
одно программное средство, поставляемое как часть DOS. Вы
загружаете ее так же, как и любую другую программу, и работаете в
диалоге, используя клавиатуру и экран. Когда программа DEBUG
ожидает каких-либо действий со стороны пользователя, то свой запрос
она обозначает символом "-".

Вместо перечисления всех команд, которые входят в программу
DEBUG, используем данный отладчик для проверки работы только что
составленной программы, приведенной на Фиг. 5.13 и П5.14. На
Фиг. 5.17 приведен соответствующий листинг.
В данном примере сначала вызывается программа DEBUG и
указывается та программа, которую предполагается отлаживать - в
нашем случае программа FIG5=13.EXE. После того, как программа DEBUG
загружена, она производит загрузку отлаживаемой программы.
Управление теперь принадлежит отладчику, и он с помощью символа "-"
показывает, что ожидает ввода. До тех пор, пока вы не введете для
него указаний, с программой ничего происходить не будет.

Команда R выводит содержимое всех регистров в момент,
соответствующий загрузке программы FIG5=13 и передаче ей управления.
Содержимое регистров не требует пояснений, за исключением, быть
может, значений флагов. Флаг NV указывает на отсутствие
переполнения, флаг UP - флаг направления и т.д. При выводе
содержимого регистров в последней строке приводится следующая
выполняемая команда. В ячейке 04C5:0000 записана команда PUSH DS.
B>A:DEBUG FIG5_13.EXE
-R

AX=0000 BX=0000 CX=0120 DX=0000 SP=FFF0 BP=0000 SI=0000 DI=0000
DS=2C26 ES=2C26 SS=2C26 CS=2C26 IP=0000 NV UP DI PL NZ NA PO NC
2C26:0000 1E PUSH DS

2C26:0000 1E PUSH DS
2C26:0001 B80000 MOV AX,0000
2C26:0004 50 PUSH AX
2C26:0005 FC CLD
2C26:0006 8CC8 MOV AX,CS
2C26:0008 8ED8 MOV DS,AX
2C26:000A 8D361D00 LEA SI,
2C26:000E AC LODSB
2C26:000F A24000 MOV ,AL
2C26:0012 E82C00 CALL 0041
2C26:0015 803E40000A CMP ,0A
2C26:001A 75F2 JNZ 000E
2C26:001C CB RET Far
2C26:001D 9D POPF
2C26:001E E2A0 LOOP FFC0
2C26:0020 20AFE0AE AND ,CH
2C26:0024 A3E0A0 MOV ,AX

D2C26:0

2C0E:0000 CD 20 00 A0 00 9A EE FE 1D F0 ED 04 04 1C 3C 01 . ............<.
2C0E:0010 22 1B EB 04 22 1B 04 1C 01 01 01 00 02 06 FF FF "..."...........
2C0E:0020 FF FF FF FF FF FF FF FF FF FF FF FF 08 2C D0 FF .............,..
2C0E:0030 04 1C 14 00 18 00 0E 2C FF FF FF FF 00 00 00 00 .......,........
2C0E:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2C0E:0050 CD 21 CB 00 00 00 00 00 00 00 00 00 00 20 20 20 .!...........
2C0E:0060 20 20 20 20 20 20 20 20 00 00 00 00 00 20 20 20 .....
2C0E:0070 20 20 20 20 20 20 20 20 00 00 00 00 00 00 00 00 ........

RAX
AX 0000
:1234

E 2C0E:21
2C0E:0021 69. 73. 20. 61.20 20.


DS=2C26 ES=2C26 SS=2C26 CS=2C26 IP=003C NV UP DI PL NZ NA PO NC
2C26:003C CD10 INT 10
-T

AX=0E54 BX=0000 CX=003F DX=0000 SP=FFEA BP=0000 SI=001D DI=0000
DS=2C26 ES=2C26 SS=2C26 CS=F000 IP=0165 NV UP DI PL NZ NA PO NC
F000:F065 FB STI
-T

Фиг. 5.17 Листинг отладчика для Фиг 5.13 и 4.14 (начало)
AX=0E54 BX=0000 CX=003F DX=0000 SP=FFEA BP=0000 SI=001D DI=0000
DS=2C26 ES=2C26 SS=2C26 CS=F000 IP=0166 NV UP DI PL NZ NA PE NC
F000:F066 FC CLD
-G 2C26:3E

T
AX=0E54 BX=0000 CX=003F DX=0000 SP=FFEA BP=0000 SI=001D DI=0000
DS=2C26 ES=2C26 SS=2C26 CS=2C26 IP=013E NV UP DI PL NZ NA PO NC
2C26:003E RET
-G

Эта программа - тест

Program terminated normally
-R

AX=0754 BX=0000 CX=003F DX=0000 SP=FFEA BP=0000 SI=001D DI=0000
DS=2C26 ES=2C26 SS=2C26 CS=2C26 IP=003E NV UP DI PL NZ NA PO NC
2C26:003E C3 RET
-Q

Фиг. 5.17 Листинг отладчика для Фиг 5.13 и 4.14 (продолжение)

Здесь следует немного задержаться и проанализировать
информацию, которая записывается в регистры. Содержимое регистров
соответствует моменту, когда программа FIG5=13 получает управление
от командного процессора. Обратите внимание, что пара регистров
CS:IP указывает на первую команду, определяемую оператором END
программы. Регистры DS и ES указывают на префикс программного
сегмента. И наконец, пара регистров SS:SP указывает на сегмент
STACK. Описанное состояние регистров будет сравниваться позднее с
аналогичным состоянием регистров для файла типа.COM.

Чтобы просмотреть большее число команд, надо ввести символ "U"
(дизассемблировать), и на дисплей выводится около двадцати
следующих команд. Это удобно при обладке программы, для которой нет
листинга. Дизассемблирование программы позволяет просмотреть ее
команды. Это может сэкономить вам бумагу и время в случае, когда в
программу внесены небольшие изменения. Так как ваш листинг больше
не соответствует той программе, которая находится в памяти, то ее
дизассемблирование позволяет вам узнать правильные адреса для
каждой команды.

Однако у дизассемблирования с помощью программы DEBUG имеется
ряд недостатков по сравнению с использованием листинга. Отсутствуют
комментарии (может быть очень важные для понимания программы), и
ячейки памяти идентифицируются только по адресу, а не по имени
переменной. Например, хранящаяся в ячейке 04C5:000E команда имеет,
как показано на Фиг.5.13, следующий вид:

MOV OUTPUT_CHARACTER,AL

А в дизассемблированном виде

MOV ,AL

Это одна и та же команда. Для программиста, выполняющего
отладку, имя переменной OUTPUT_CHARACTER говорит больше, чем адрес
ячейки . Однако программе DEBUG не известны имена переменных,
и она вынуждена оперировать фактическими адресами.

Кроме того, программа, DEBUG не обеспечивает той же самой
ассемблерной мнемоники, которую воспринимает ассемблер. Это значит,
что некоторые команды будут выглядеть по-разному. Команда из ячейки
04C5:0014 будет при дмзассемблировании иметь вид

CMP B,,0A

Но та же саммая команда на Фиг.5.13 представлена в виде:

CMP OUTPUT_CHARACTER,10

Программа дизассемблирования как на входе, так и на выходе
работает только с шестнадцатеричными значениями. Этим объясняется
появление значения 0A. Мы уже выяснили, почему получается значение
, вместо имени OUTPUT_CHARACTER. Что же такое символ "B,"?

Ассемблер оперирует переменными вполне определенного типа. Это
значит, что во время ассемблирования тип переменных может иметь
значение: байт, слово или какой-нибудь другой. Таким образом, когда
программист вводит команду, содержащую ссылку на область памяти, то
ассемблеру известен размер этой области. На программа DEBUG не
имеет представления о длине переменной, записанной по адресу
. Однако программе дизассемблирования точно известно, что
данная команда пересылает ровно один байт данных, указанных
непосредственно в команде, по адресу . Таким образом, символ
"B," указывает на то, что непосредственная операция состоит в
пересылке одного байта. Для получения того же самого результата с
помощью ассемблера соответствующая команда должна иметь вид:

CMP BYTE PTR ,10

Вы можете рассматривать символ "B," как сокращение BYTE PTR.
Аналогично символ W используется для WORD PTR,L - для длинного
(far) возврата и т.д.

Вместе с командой в дизассемблированном виде вводится и ее
объектный код. Как вы можете заметить, по адресу 04C5:001C записаны
какие-то команды, которых нет на Фиг. 5.13. Эта область данных,
содержащая строку "Это тест". Однако команде, осуществляющей
дизассемблирование, не известно, где в программе кончаются команды
и начинаются данные. Таким образом она все интерпретирует как
команды. (Кстати, именно эта последовательность команд выполнялась
бы, если в вашей программе был сделан переход в рассматриваемую
область данных.)

Команда вывода на экран D позволяет просмотреть на дисплее
области данных. Отображение на экране состоит из двух частей.
Вместе с листингом содержимого ячеек памяти в шестнадцатеричном
представлении приводятся символы в коде ASCII, которые
соответствуют этим значениям. Если отображение команд подобным
образом не имеет смысла, то область данных представляется очень
ясно. Когда вам будет нечем особенно заняться, вы можете
попробовать написать такую программу, команды которой в коде ASCII
соответствуют инициалам вашего имени. С помощью отладчика можно
изменять содержимое регистров и ячеек памяти. Если ввести символ R
(регистр) и затем тип регистра, то на дисплей будет выведено
содержимое этого регистра с возможностью его коррекции. Если нажать
клавишу "возврат", то содержимое регистра останется прежним. Оно
будет изменено, если ввести новое значение.

Можно также модифицировать содержимое ячеек памяти. Ввод
символа E (редактирование) позволяет это сделать. При этом
программа DEBUG выводит на дисплей значения отдельных ячеек памяти,
после которых следует символ. Вы можете изменить содержимое
ячейки, вводя новое значение, либо нажать клавишу пробела, чтобы
перейти к следующей ячейке, или - клавишу "возврат", чтобы
вернуться к режиму запроса следующей команды отладчика. В
рассматриваемом примере значения в первых трех ячейках остаются
прежними. Содержимое ячейки 04C5:0024 изменено со значения 61H на
значенее 20H. Так как эта ячейка входит в область данных, то
выводимое сообщение будет отличаться от тог, которое было в
транслированной программе.

В любой команде, обращающейся к ячейкам памяти, предполагается,
что адрес является частью команды. Команда E, как и команда
отображения, выводит на дисплей содержимое ячейки по указанному в
ней адресу. Точно так же можно было использовать адрес в команде
дизассемблирования. Можно ввести адрес в виде сегмента и смещения,
или только смещения. Если вы указали только смещение, то
соответствующий сегментный регистр будет выбран программой DEBUG. В
случае команды U используется регистр CS, а для команд D и E по
умолчанию сегмент будет определяться регистром DS.

Теперь попытаемся выполнить эту программу. Ее можно просто
запустить и посмотреть, что будет происходить. На для этого не
нужна программа DEBUG. Программа DEBUG позволяет задать точки
останова, называемые "точками прерывания" программы. Благодаря
введению в программу таких точек можно возвращать управление
программе DEBUG. Это дает еще одну возможность проверки состояния
памяти и регистров для того, чтобы контролировать ход выполнения
программы.

Команда G, (выполнять) передает управление от программы DEBUG
пользовательской программе. Выполнение команд начинается с ячейки,
задаваемой парой регистров CS:IP (так же, как в реальном
микропроцессоре). Тестируемая программа продолжает выполняться до
тех пор, пока она не пройдет точку прерывания. В нашем примере мы
задали точку прерывания по адресу 3CH. Так как мы указали только
смещение, то для определения сегмента программа DEBUG использует
содержимое регистра CS. Из листинга, приведенного на Фиг. 5.14,
видно, что смещение 3CH соответствует команде INT 10H. В
рассматриваемом примере программы было выбрано именно это место,
потому что это - та точка, где управление передается подпрограмме
BIOS, вызываемой из ПЗУ. Проверка программы в этой точке
гарантирует, что мя установили регистры в нужное состояние перед
выполнением подпрограммы BIOS.

Как только встречается точка прерывания, управление
возвращается программе DEBUG. При этом, так же как и в случае
команды R, на дисплей выводятся содержимое регистров и следующая
выполняемая команда. Так как управление опять передано программе
DEBUG, вы можете использовать любую из команд отладки.

Имеются ограничения на использование точек прерывания.
Фактически точка прерывания реализуется кодом операции 0CCH.
Соответствующая этому коду команда вызывает прерывание INT 3.
Данное математическое прерывание возвращает управление программе
DEBUG. Если какая-то команда возвращает управление отладчику, то
точка прерывания должна находиться в начале этой команды. Если же
точка прерывания выбрана где-то в другом месте, то управление не
будет возвращено отладчику и будет выполняться не та команда
программы, которая предполагалась. Например, если бы было задано
"=G 3D", то по адресу 3CH была бы команда INT 0CCH, и дальнейшее
выполнение программы предсказать трудно.

Если точка прерывания выбрана осмотрительно, то никаких
осложнений не будет. Командв "G" позволяет задать до десяти точек
прерывания. После прохождения любой из них происходит
восстановление исходных значений точек прерывания. Выполнение
команды отладки "G" без указания точек прерывания никогда не выйдет
ни на какую из ранее заданных точек прерывания, потому что все они
были удалены. Если вы запустили программу, и произошел ее останов и
она зациклилась, то возможно, что вернуть управление, которое
передано программе, удастся только с помощью клавиши системного
сброса Ctrl=Alt=Del, т.е. вам придется начать все с начала.
Запуская незнакомую программу, следует быть осторожным.

Если вы захотите ввести пермаментную точку прерывания,
воспользуйтесь командой E для изменения значения первого байта
команды на значение 0CCH. Эта точка прерывания будет там постоянно
или, по крайней мере, до тех пор, пока вы ее не измените. Возможно
вы захотите использовать это прерывание в точке входа в
подпрограмму обработки ошибки и проанализируете возникающие ошибки
более тщательно, чем при передаче их обработки программе.

Существует еще одно обстоятельство, связанное с точками
прерывания, о котором следует помнить. Если вы попытаетесь задать
точку прерывания в области, относящейся к ПЗУ, то ничего не
получится. Так как вы не можете менять содержимое ПЗУ, то команда
0CCH никогда туда не запишется.

Рассмотрим следующую команду отладчика - команда трассировки T.
Данная команда инициирует выполнение одной команды отлаженной
программы. В нашем примере команда T выполнена несколько раз. Как
вы можете убедиться, выполняется несколько первых команд BIOS,
вызванной по прерыванию INT 10H. Подпрограмма BIOS, естественно,
находится в ПЗУ. Команда трассировки позволяет "приостановить"
программу при ее выполнении в ПЗУ.

Перед передачей управления пользовательской программе команда
трассировки выставляет в регистре флагов соответствующий бит
трассировки. Этот бит инициирует прерывание INT 1 после выполнения
каждой команды. Вектор прерывания INT 1 возвращает управление
программе DEBUG. Выполнение прерывания INT 1 автоматически
сбрасывает бит трассировки в исходное состояние. Это значит, что
программа DEBUG не прерывается после выполнения каждой ее команды.
Команда трассировки служит прекрасным средством "пробиться" через
трудный участок программы. При этом программа DEBUG выводит на
экран каждую команду вместе с содержимым регистров как раз в
момент, предшествующий выполнению этой команды. Так как в данном
режиме используются не точки прерывания, а собственно прерывания,
то можно выполнять трассировку даже программ ПЗУ.

Вернемся к нашему примеру. Команда =G 4C5:3E обеспечивает
полное выполнение подпрограммы BIOS. Обратите внимание, что
программа вывела на дисплей символ "Э". Вызванная по прерыванию 10H
подпрограмма BIOS выводит символы на дисплей. В данном случае это
первый символ выводимого сообщения. Так как теперь можно быть
уверенными, что наша программа выполняется правильно, то, введя
символ "G", мы обеспечим выполнение программы до конца без точек
прерывания.

В данном примере рассматривался файл типа.EXE, и потому для
возврата управления системе DOS мы не могли использовать прерывание
INT 20H. Вместо этого программа записала в стек состояние регистра
DS и значение 0. Управление передается обратно системе DOS в конце
основной программы с помощью команды возврата типа FAR. Программа
DEBUG распознает это и фиксирует состояние машины в конце
тестируемой программы. Если бы это был файл типа.EXE, то
прерывание INT 20H аналогичным образом вернуло бы управление
программе DEBUG. Теперь, уделив достаточно времени этому примеру,
мы можем выйти из программы DEBUG и вернуться в систему DOS с
помощью команды завершения Q.

С помощью ярлыка, помещенного на рабочий стол, щелкните его правой кнопкой мыши и выберите пункт «Свойства» в выпавшем контекстном меню. На вкладке «Ярлык» в окне, которое откроется в результате этого действия, кликните поле «Объект». Затем нажмите клавишу End, чтобы переместить курсор в самый конец строки, введите пробел и наберите нужный ключ (-debug). После этого нажмите кнопку «OK» для сохранения ярлыка с внесенными изменениями и запускайте игру обычным способом - двойным щелчком по этой иконке.

Раскройте главное меню на кнопке «Пуск» и выберите пункт «Выполнить» - таким способом вы откроете стандартное окно запуска программ. Этому действию соответствует нажатие сочетания горячих клавиш Win+R - можно использовать и его. Затем введите в открывшемся окне полный путь к исполняемому файлу программы. Набирать его вручную не обязательно, можно нажать кнопку «Обзор» и найти исполняемый файл игры на диске вашего компьютера. После этого добавьте через пробел ключ -debug и нажмите кнопку «OK». При следующем запуске с помощью этого диалога набирать повторно путь и ключ не потребуется - введенная строка сохранится в выпадающем списке, откуда ее можно будет выбрать.

Создайте текстовый файл в любой папке вашего компьютера. Можно сделать это на рабочем столе - щелкните фоновое изображение правой кнопкой мыши, во всплывшем контекстном меню раскройте раздел «Создать» и выберите пункт «Текстовый документ». Введите в первой строке документа полный путь к исполняемому файлу игры - его можно скопировать в ярлыке программы или в адресной строке Проводника. Добавьте через пробел ключ -debug и сохраните документ с расширением bat. Запускать игру надо двойным щелчком по этому файлу.

Не все старые игры и программы могут работать в новых операционных системах и с высоким разрешением экрана. В Windows можно настроить параметры совместимости, и приложение будет запущено. О том, как это сделать, читайте ниже.

Инструкция

Щелкните правой кнопкой мыши по ярлыку игры. В выпавшем меню выберите пункт «Свойства».

В открывшемся окне перейдите на вкладку «Совместимость».

Нажмите «Ок».

Видео по теме

Читерские программы придуманы для того, чтобы упростить компьютерную игру. При помощи чит-кодов вы сможете получать дополнительные бонусы и способности для своего компьютерного героя.

Вам понадобится

  • - программа "CheMax";

Инструкция

Читы для игры Казаки
В стратегии «Казаки» меню для ввода чит-кодов открывается при нажатии клавиши «Enter»
supervizor - туман сражения вкл/выкл
money – пополнения
multitvar – доступ ко всем солдатам
Gods - помощь богов
AI - возможность контролировать врагов
resources - пополнить все ресурсы
shield – супер оружие

Читы для игры Sims 3
Чтобы ввести коды в игре Sims 3, нажмите комбинацию горячих клавиш CTRL + SHIFT + С. Если не открылась, то сверните игру и проверьте, не открылась ли при нажатии этих клавиш другая программа. Закройте ее и разверните игру. Повторно нажмите клавиши.
Для пользователей операционной системы Vista: используйте клавиши Ctrl+Windows+Shift+C.
Некоторые коды для Sims 3:
Kaching - добавляет §1.000 в семейную копилку
Motherlode - добавляет §50.000 симолеонов к семейному бюджету
Familyfunds - позволяет установить бюджет .

Читы для игры Counter-Strike 1.6
Это одна из самых популярных -игр . К данной компьютерной игре хакеры придумали множество чит-программ. Скачайте BadBoy v 5.2. Это универсальный чит, включающий в себя все предыдущие его версии. Установите программу в корневую папку cstrike. Запустите игру и нажмите клавишу “Insert”. Откроется меню данной программы. Клавишами “Page Up” и “Page down” выбирайте необходимые вам настройки и играйте. Данный чит позволяет видеть сквозь стены, быстро бегать, точно стрелять. Но за эту программу на онлайн-серверах блокируют.

Читы для игры Дальнобойщики 2
Во время игры нажмите на клавиатуре клавишу «Pause/Break» и введите необходимый вам чит-код.
SLFILLUP – вы получите полный бак топлива.
SLRECOVER – в службу спасения без затраты средств.
SLREPAIR – бесплатный ремонт автомобиля.

Видео по теме

Обратите внимание

За данные чит-коды, вы можете получить бан на онлайн-серверах

Текстовые игры – один из излюбленных способов проведения досуга у молодежи, увлекающейся ролевыми играми. Ведь для того, чтобы поиграть за любимого персонажа, не нужно готовить костюм и ехать в лес. Играть в форумную игру можно дома, на работе или в перерывах между парами, в общем, когда вам удобно.

Инструкция

Итак, вы решили создать свою текстовую игру и вскоре станете администратором своего ролевого мира. Для начала вам было бы неплохо найти себе одного – двух помощников, так как работы предстоит достаточно.

Если вы хотите сделать игру по своему оригинальному миру, вы должны тщательно продумать и расписать устройство мира, его правила, культуру и ценности. Если вы делаете тестовую ролевку , или – тщательно изучите выбранную вами . Как администратор, вы должны знать все – способности персонажей, которые будут играть, используемые заклинания.

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

Сочините правила форума и шаблон анкеты. Правила различных текстовых игр весьма похожи, вы можете посмотреть их на любом игровом форуме и, взяв их за основу, написать свои. В же необходимо создать перечень вопросов, на которые должны ответить игроки, подающие заявку на роль персонажа. Обычно в анкете–заявке пишут имя, расу и возраст персонажа, описывают внешность, характер и умения. Лучше всего, если вместе с анкетой вы вывесите заполнения.

Когда текстовая часть готова, можно создавать , на котором и будет проходить игра. В интернете существует несколько бесплатных серверов (к примеру, борда). Если вы умеете писать сайты, вы сможете создать уникальный дизайн со своим цветовым решением, логотипом и кнопками. Если нет – не расстраивайтесь, вы сможете подобрать стандартный шаблон. В конце концов, дизайн форума – это не главное.

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

Видео по теме

Полный к файлу нужен, как правило, чтобы передать его в качестве параметра какой-либо программе-обработчику. Чаще всего это задача возникает при программировании каких-то процессов, но иногда бывает нужно просто сверить место размещения объекта с путем, указанном в инструкциях. Этот параметр содержит перечисление всех каталогов, начиная с корневого, которые нужно последовательно открыть, чтобы добраться до нужного файла.

Вам понадобится

  • ОС Windows.

Инструкция

Воспользуйтесь «Проводником», если надо найти полный путь к файлу в операционной системе Windows. Откройте программу с помощью «горячих клавиш» Win + E или выбором пункта «Компьютер» в главном меню, вызываемом щелчком по кнопке «Пуск». Если вам известно что-либо о месте расположения нужного объекта, переместитесь по дереву каталогов как можно ближе к нему - это сузит диапазон поиска, а значит, и время на эту процедуру.

В поле, расположенном правее адресной строки менеджера файлов, введите название файла и дождитесь, пока программа просмотрит все вложенные каталоги и найдет объекты, в именах которых есть что-либо похожее. Полный путь будет помещен в колонку «Путь к папке» таблицы с результатами поиска. Переписывать его вручную нет необходимости - кликните эту строку правой кнопкой мыши, в выпавшем контекстном меню выберите строку «Свойства» и скопируйте содержимое поля «Расположение» открывшегося окна.

Если по какой-либо причине вы вынуждены пользоваться интерфейсом командной строки, задействуйте DOS-команду where. Ей нужно задать параметр R, чтобы сделать поиск файла рекурсивным, то есть, чтобы просматривались все вложенные папки. Кроме него обязательно укажите название нужного файла, а необязательным параметром может быть известная вам часть пути к нему. Эта команда тоже осуществляет поиск, поэтому указав хотя бы часть пути, вы сократите затраченное на нее время. Например, если необходимо получить полный путь к файлу с названием RM.csv, о котором известно лишь, что он находится на диске F, команда должна быть написана так:where /R f: RM.csv

Набрав команду и ее параметры, нажмите Enter и по окончании поиска найдете полный путь в следующей строке интерфейса. К сожалению, выделить и скопировать только эту строку здесь нельзя, поэтому кликните правой кнопкой в любом месте окна, выберите в меню команду «Выделить все», а затем нажмите Enter. Таким способом вы поместите в буфер обмена все содержимое интерфейса командной строки, которое в каком-либо текстовом редакторе можно очистить от лишних строк.

Одной из важных составляющих процесса разработки программного обеспечения является отладка. В отношении прикладных программ она осуществляется средствами, работающими в пользовательском режиме и зачастую встроенными в IDE. Но для того чтобы иметь возможность отлаживать, например, драйвера, нужно запустить отладчик ядра .

Вам понадобится

  • - права администратора на целевой машине.

Инструкция

Запустите командный процессор cmd. Кликните по кнопке «Пуск» в панели задач. Кликните по пункту «Выполнить...» появившегося меню. В текстовое поле диалога «Запуск программы» введите строку cmd и нажмите кнопку OK.

Создайте резервную копию файла boot.ini. Узнайте путь инсталляции текущей копии Windows при помощи команды:echo %SystemRoot%Перейдите на тот диск, куда установлена операционная система при помощи ввода литеры устройства с последующим двоеточием. Перейдите в его корневой каталог, используя команду cd. Снимите атрибуты «системный», «только для чтения» и «скрытый» с файла boot.ini при помощи команды attrib, создайте резервную копию командой copy и снова установите атрибуты:attrib -h -s -r boot.inicopy boot.ini boot.ini.oldattrib +h +s +r boot.ini

Выведите текущий список вариантов загрузки. Используйте команду:bootcfg /queryПросмотрите элементы списка и определите тот, на основе которого будет создана новая конфигурация с возможностью отладки в режиме ядра . Запомните идентификатор загрузочной записи.

Создайте новую загрузочную запись, исполнив команду bootcfg с параметром /copy. Используйте параметр /id для указания идентификатора записи, которая будет скопирована. При помощи параметра /d задайте отображаемое имя записи. Например:bootcfg /copy /id 1 /d "Win XP (Debug)"Снова выведите список вариантов загрузки командой bootcfg с параметром /query и узнайте идентификатор добавленной записи.

Включите опции для запуска отладчик а ядра в загрузочную запись, созданную на предыдущем шаге. Если отладка будет производиться на целевой машине, просто добавьте опцию /debug. Например:bootcfg /debug on /id 2Если планируется удаленная отладка с подключением целевого компьютера к хост-машине через com-порт, дополнительно используйте опции /port /baud для указания номера порта и скорости обмена соответственно:bootcfg /debug on /port COM2 /baud 9600 /id 2Если удаленная отладка будет осуществляться с подключением через интерфейс IEEE 1394 (кабель FireWire), воспользуйтесь опцией /dbg1394 для включения соответствующего режима и опцией /ch для указания номера канала, например:bootcfg /dbg1394 on /ch 42 /id 2Просмотрите загрузочные записи командой bootcfg с параметром /query и убедитесь в том, что изменения внесены. Закройте окно командного процессора, выполнив команду exit.

DEBUG . EXE – специальная системная программа для ввода и пошагового выполнения программ, написанных на машинном языке или с помощью команд ассемблера.

Для запуска этой программы нажмите кнопку Пуск , затем Выполнить , введите Debug и нажмите ввод , в результате программа должна загрузиться с диска в память.

После окончания загрузки на экране появится приглашение в виде дефиса, что свидетельствует о готовности программы Debug для приема команд.

Наиболее часто используемые инструкции Debug :

1. Q – выход из программы.

2. ? – получение справки.

3. H (Hexarithmetic) – шестнадцатеричная арифметика. Если после символа Н набрать 2 числа (размером не более 4 цифр каждое) через пробел, то получим сумму и разность набранных чисел:

4. R [<имя регистра>] – работа с регистрами (от слова Register). Инструкция «R» без параметра позволяет просмотреть содержимое всех регистров, а также значение флагов и команду, расположенную по смещению 0100 в сегменте кода. Обычно по смещению 0100 находится первая команда программы.

С помощью этой инструкции можно ввести новое значение в один регистр. Для этого после команды нужно ввести название регистра:

Как видим, при первом просмотре регистров командой r, в регистре АХ был 0, затем содержимое регистра было изменено.

5. U [<сегментный регистр>:]<начальный адрес>, <конечный адрес> – просмотр ячеек оперативной памяти, начиная с указанного смещения в сегменте, заданном сегментным регистром. Команда U (Unassemble) дизассемблирует команды, находящиеся в памяти по заданному адресу.

Например, в следующем примере мы просматриваем команды, находящиеся в регистре CS, начиная с адреса 100, по адрес 102.

6. Е [<сегментный регистр>:]<смещение> – запись информации в ячейки оперативной памяти.

Как было сказано, с помощью Debug можно вводить команды как на машинном языке, так и на языке ассемблера. Инструкция Debug E (Enter) служит для ввода команд на машинном языке . Здесь Debug используется как интерпретатор, чтобы работать непосредственно с микропроцессором. Можно задавать машинные команды, записывать их в определенное место оперативной памяти, обычно, начиная с 0100 смещения относительно начала сегмента кода. Затем выполнять пошагово (по одной команде) либо сразу всю программу.

Так как микропроцессор понимает только двоичные числа (сокращенно их можно записать шестнадцатеричными), то и коды машинных команд записываются в виде шестнадцатеричных чисел, причем команды бывают одно-, двух- трехбайтовые и т.д.

Например, команда для сложения значений из регистров АХ и ВХ двухбайтовая и имеет машинный код 01D8.

Инструкция “E <смещение>” при работе распечатывает в следующей после ее ввода строке адрес, состоящий из двух чисел, и старое значение байта по этому адресу: <содержимое CS>:<смещение><значение байта>, далее компьютер ожидает ввода нового значения байта.

Для ввода, например, двухбайтовой машинной команды 01D8 нужно записать 01 в сегмент кода по смещению 100, и D8 – по смещению 101:

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

8. А <смещение> – ввод команд в ассемблерном виде (от Assemble). Первую команду программы следует начинать вводить со смещения 0100. Далее система ждет поочередного ввода команд ассемблера. Для окончания ввода нужно нажать Enter после пустой строки.

Пример . Введем в оперативную память программу на ассемблере, выполняющую сложение двух чисел. Установим начальный адрес следующим образом: A 0100 .

Отладчик выдаст значение адреса сегмента кодов и смещения в виде хххх:0100. Теперь можно вводить каждую команду, завершая клавишей Ввод.

Прежде чем выполнить программу, проверим сгенерированные машинные коды при помощи команды U. Необходимо сообщить отладчику адреса первой и последней команд, которые необходимо просмотреть, в данном случае 0100 и 0106. Введите: U 100, 106

Как видим, машинные коды сгенерированы верно.

С помощью команды R выведем содержимое регистров и первую команду нашей программы:

С помощью команд Т выполним последовательно все команды программы:

Так вводятся и трассируются программы на языке ассемблера.

Изучим остальные команды Debug, после чего вернемся к примеру.

9. G (от Go) – запуск программы, находящейся в оперативной памяти по адресу 0100. Для вызова программы на выполнение нужно предварительно позаботиться, чтобы в регистре IP (счетчик команд) было число 0100.

10. N <имя.com-файла> – задает имя программы (Name) для последующей записи ее на диск либо считывания с диска. Перед записью предварительно нужно записать 0 в регистр ВХ, а размер программы (в байтах) – в регистр СХ.

11. W (от Write) – запись программы на диск. После выполнения инструкции “W” на диске в текущей директории появится файл с расширением.COM – точная копия веденной программы.

программы с диска в оперативную память. Предварительно имя программы задается с помощью команды N.

Вернемся к примеру со сложением двух чисел. Чтобы записать эту программу на диск, следует выполнить три действия:

1. присвоить программе имя;

2. указать длину программы;

3. выполнить запись.

1. Присвоим будущему файлу имя с помощью команды N.

2. Программа состоит из четырех двухбайтных инструкций, занимает адреса со смещениями с 0100 по 0106, значит ее длина – 8 байт. Размер программы Debug хранит в регистровой паре . В нашем случае значение длины умещается в одном регистре, поэтому старший регистр пары мы просто обнулим: BX=0, CX=8.

3. Для записи программы на диск используем программу W.


ПРИМЕЧАНИЕ
Рисунки на этой странице не отображаются, но вы можете найти их в книге.


Чтобы написать уже известную нам программу, используя Debug, сделаем следующее (подразумевается, что Debug вы уже запустили, и увидели черный экран с маленькой мигающей черточкой в левом верхнем углу).

Введем букву «а» (напоминаю в последний раз - все команды вводятся на английском языке) и нажмем ENTER.

Затем введем программу, нажимая ENTER в конце каждой строки:

0B72: 0100 MOV AH, 02 0B72: 0102 MOV DL, 41 0B72: 0104 INT 21 0B72: 0106 INT 20 0B72: 0108 Результат будет примерно таким, как показано на рис. 1.6.

ПРИМЕЧАНИЕ 1
Обратите внимание, что все числовые значения пишутся без буковки h в конце. Это потому, что Debug работает только с шестнадцатеричными числами, и ему не надо объяснять, в какой системе исчисления вводятся данные.

ПРИМЕЧАНИЕ 2
После ввода команды -а, появляются символы: 0B72: 0100. В вашем случае первые четыре символа могут быть другими, но нас они пока не интересуют. А как вы думаете, что означает число 0100? Помните директиву ORG 100h (см. раздел )? Вот-вот – это адрес, с которого начинается выполнение программы. То есть в память с этим адресом заносится первая команда программы (для файлов СОМ). Каждая команда занимает 2 байта, поэтому следующий адрес будет 0102 и т.д.

Сами команды мы уже знаем (см. раздел ), поэтому описывать их здесь не будем.

Программа написана – нужно проверить ее работу. Нажмём ENTER ещё раз, чтобы на экране появилась чёрточка, которая говорит о том, что можно вводить команду для Debug. Затем введем команду g (от английского «GO») и нажмем клавишу ENTER. На экране увидим следующее:

G A Программа завершилась нормально - Здесь A – та самая буква, которая выводится на экран в результате работы программы. Затем идёт сообщение о нормальном завершении программы (оно может отличаться в зависимости от версии Debug).

А теперь, если интересно, можно проверить программу в пошаговом режиме, то есть понаблюдать, как выполняются команды одна за другой. Для этого придется по новой набрать текст программы (не забудьте сначала ввести команду а), затем:

Введем команду t и нажмем клавишу ENTER. Увидим нечто вроде этого:

AX=0200 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B72 ES=0B72 SS=0B72 CS=0B72 IP=0102 NV UP EI PL NZ NA PO NC 0B72:0102 B241 MOV DL,41 Это есть ни что иное, как состояние регистров процессора после выполнения первой строки программы. Как вы можете видеть, в регистр АН записалось число 02. В нижней строке находится адрес команды и сама команда, которая будет выполняться следующей.

AX=0200 BX=0000 CX=0000 DX=0041 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B72 ES=0B72 SS=0B72 CS=0B72 IP=0104 NV UP EI PL NZ NA PO NC 0B72:0104 CD21 INT 21 Команда MOV DL, 41, как ей и полагается, записала в регистр DL число 41.

Снова введем команду t и нажмем клавишу ENTER. Увидим следующее:

AX=0200 BX=0000 CX=0000 DX=0041 SP=FFE8 BP=0000 SI=0000 DI=0000 DS=0B72 ES=0B72 SS=0B72 CS=0347 IP=0225 NV UP EI PL NZ NA PO NC 0347:0225 80FC4B CMP AH,4B Команды CMP AH,4B нет в нашей программе. Наша программа завершила свою работу. Мы можем долго еще вводить команду t – нам будут выдаваться состояния регистров. Почему это происходит, нам пока не интересно. Лучше введем команду g и нажмем клавишу ENTER, таким образом окончательно выполним нашу программу, и увидим то, что мы уже видели.

Программа написана и проверена. Но как сделать ее самостоятельной, то есть как создать файл СОМ? Ведь то, что мы сделали, работает только с помощью Debug. Чтобы создать исполняемый файл, нужно ответить на несколько вопросов:

  1. Какого размера будет наш файл? Выполнение программы начинается с адреса 0100h, а последняя строка в программе содержит адрес 0108h. Это значит, что размер файла будет 8 байт (108h – 100h = 8).
  2. Как мы назовем наш файл? А хоть как. Однако, рекомендуется давать файлам английские имена, в которых содержится не более 8 символов (DOSу так приятнее работать). Назовем, например, debug_1.com
А теперь выполним следующие действия:
  1. Снова напишем нашу программу (тренируйтесь, тренируйтесь...).
  2. Запишем в регистр СХ размер файла. Для этого введем команду r cx и нажмем ENTER. Затем введем размер файла (8 байт) и нажмем ENTER.
  3. Введем команду n, затем один пробел и имя файла. Нажмем ENTER.
  4. И, наконец, введем команду w и нажмем ENTER.
В результате всех этих действий на экране появится следующая информация (см. также рис. 1.7): -r cx СХ 0000:8 -n debug_1.com -w Запись: 00008 байт - Если вы работаете в режиме эмуляции DOS из под WINDOWS, то файл debug_1.com сохранится на рабочий стол, либо в папку текущего пользователя. Это зависит от версии и/или настроек WINDOWS. Теперь его можно запустить как обычную программу. Если в указанных папках вы не нашли этот файл, то найдите его через поиск файлов. Ну а если вы не знаете, как это сделать, см. книгу Компьютер для чайников.

Чувствую, что мы уже устали. Выход из Debug осуществляется командой q.

Набравшись сил и терпения, изучим еще одну опцию Debug – дизассемблер. С его помощью можно дизассемблировать какой-нибудь СОМ-файл (то есть выполнить действие, обратное ассемблированию – преобразовать исполняемый файл в исходный код на языке ассемблера). Допустим, у вас есть программка, написанная не вами – ее исходный код вы не знаете, а посмотреть очень хочется. Для этого и существует дизассемблер.

Итак, программа Debug у нас закрыта. Набираем в командной строке:

Debug debug_1.com (где debug_1.com – это имя файла, который мы хотим дизассемблировать) и нажимаем ENTER.

ПРИМЕЧАНИЕ
Если программа не запустилась, значит нужно указать полный путь к ней, например

C:\WINDOWS\COMMAND\debug debug_1.com Если же программа запустилась, но выдала ошибку (например: Ошибка 1282 или «Файл не найден»), то нужно указать полный путь к файлу, например: C:\WINDOWS\COMMAND\debug C:\MYPROG\debug_1.com Если и это не помогло, то, возможно, вы всё-таки где-то допустили ошибку в пути или путь не соответствует требованиям DOS. В таком случае лучше поместить программу в корень диска С, откуда она гарантированно загрузится по пути «C:\debug_1.com».

Если Debug запустилась без сообщений об ошибках, то вводим команду u и нажимаем ENTER. Вот что мы увидим (примерно, см. также рис 1.8):

U 0BC6:0100 B402 MOV AH, 02 0BC6:0102 B241 MOV DL, 41 0BC6:0104 CD21 INT 21 0BC6:0106 CD20 INT 20 0BC6:0108 56 PUSH SI 0BC6:0109 2E CS: 0BC6:010A 8A04 MOV AL, 0BC6:010C 0AC0 OR AL, AL 0BC6:010E 741A JZ 012A 0BC6:0110 3C3A CMP AL, 3A 0BC6:0112 750D JNZ 0121 0BC6:0114 2E CS: 0BC6:0115 807C0100 CMP BYTE PTR , 00 0BC6:0119 7506 JNZ 0121 0BC6:011B 2E CS: 0BC6:011C C60400 MOV BYTE PTR , 00 0BC6:011F EB09 JMP 012A - Посмотрите на первые четыре строки. Узнаете? Это наша программа. Остальные строки нас не интересуют (это инструкции, оставшиеся от программ или данных, отработавших до запуска Debug). Ну а если мы рассматриваем незнакомый файл, как узнать, где кончается программа и начинается «мусор»? Ориентировочно это можно сделать по размеру файла (для очень маленьких программ). Размер можно посмотреть в свойствах файла. Только следует учитывать, что в свойствах файла размер дан в десятичной форме, а Debug нам выдает шестнадцатеричные адреса. Поэтому придется перевести десятичное число в шестнадцатеричное.

Есть еще вариант (который тоже не всегда приемлем) – найти в полученном списке строку, содержащую команду выхода из программы (INT 20).

Если программа большая, то список ее команд не поместится на экран. Тогда снова вводим команду u и нажимаем ENTER. И так до конца программы.

Возможно, вы не увидите на экране свою программу. Это может быть либо из-за того, что программа почему-то не загрузилась, либо по причине несоответствия адресов. Будьте внимательны: обращайте внимание на адреса памяти, которые указаны в левой колонке. Наша программа начинается с адреса 0100. Если адрес другой, то это, соответственно, не наша программа.

Отладчик DEBUG предназначен для решения широкого круга задач. К ним относятся, например, следующие задачи: изучение текущего содержимого оперативной памяти; дизассемблирование.COM и.EXE-файлов;разработка и отладка собственных программ на языке ассемблера; изучение работы программ и их модификация; тестирование периферийного оборудования, для работы с портами ввода/вывода напрямую (в диалоговом режиме); изучение системы команд процессора, прерываний BIOS и MS-DOS.

Существует два способа запуска отладчика:

debug (Enter) или debug filename (Enter)

После запуска отладчик загружается в оперативную память, а содержимое сегментных регистров CS, DS, ES, SS - на первый свободный параграф сразу после самого отладчика. Регистр IP устанавливается равным 100.

Отладчик DEBUG имеет специальный указатель адреса данных, который используется по умолчанию во многих командах отладчика.

После запуска отладчика слева на экране появляется черта [-], которая указывает на то, что отладчик ждет команду. Все числа интерпретируются отладчиком в шестнадцатеричной системе исчисления.

КОМАНДЫ ОТЛАДЧИКА DEBUG

А - команда ассемблирования. Эта команда позволяет вводить программы с использованием мнемокода команд в оперативную память. Ввод команды отладчика

А <число> (Enter)

заставляет его перейти в режим приема команд с клавиатуры и последовательного размещения их, начиная с адреса, равному указанному в команде. При вводе можно использовать две популярные инструкции ассемблера DB и DW. Например:

DB 1,2,3,”EXAMPLE”

DW 1000,2000,”FFFF”

Отладчик поддерживает мнемоники всех команд процессора, а также и сопроцессора 80Х87. При ассемблировании команд JMP и CALL по умолчанию, если это возможно, используется SHORT - вариант этих команд. Но можно указывать перед адресом перехода NEAR или FAR, что приведет к генерации соответствующих команд. Мнемоникой оператора RET, соответствующего дальнему вызову CALL FAR является RETF. Возможно, а в сомнительных случаях необходимо, использовать указатели WORD PTR или BYTE PTR. При вводе программы допускается печать префиксов CS:, ES:, SS: впереди команды в той же строке.

Пример. Программа заполнения экрана символом “!”.

Наберите А 200 (Enter), затем введите программу

В конце программы стоит команда INT 20, обеспечивающая возврат управления обратно на монитор команд отладчика. Запустите эту программу по команде

С - сравнение. Зта команда сравнивает побайтно две области памяти и печатает все различия между ними в форме

<адрес> <содержимое> <содержимое> <адрес>

В данной записи слева приведена информация о первой области памяти, а справа - о второй.

Пример. Сравнить два блока памяти длинной 256 байт. Первый начинается с адреса 100, второй с адреса 300.

Для этого надо набрать

С 100L100 300 (Enter)

Эта команда может быть полезна, например, при проверке на идентичность двух дискет. Для этого в соседние области памяти загружаются интересующие нас соответствующие блоки этих дискет, которые затем анализируются командой С.

D - дамп оперативнойй памяти. Эта команда дает на дисплее распечатку указанной области оперативной памяти, представленной в шестнадцатеричной системе счисления, а справа дает их символьное представление. Причем, кодовые комбинации, не имеющие символьного представления в стандарте ASCII, изображаются точками. В строке отображается шестнадцать байт. При этом справа указывается полный адрес самого левого бaйта. Таким образом, в одной строке приводится шестнадцатеричный дамп, а также ASCII-дамп шестнадцати байт оперативной памяти. Если команда D дана без параметров, то всего на экране отображается 128 байт (80Н) в восьми строках. В каждой строке имеется знак “-“, разделяющий 16 байт пополам: между восьмым и девятым байтами.

Пример. Просмотреть указатели-вектора первых тридцати двух прерываний (20Н).

Необходимо ввести команду

D 0:0,7F (Enter)

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

Ввод команды:

Е <адрес> (Еnter)

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

а) “пробел”, что означает переход к редактированию следующего байта;

б) “Enter”. Это приведет к выходу из режима побайтного редактирования на командный уровень отладчика;

в) “-“. Нажатие этого знака приведет к переходу на редактирование предыдущего байта.

Пример. Изменить значение счетчика системных часов.

Введем команду

и наберем четыре числа 70 70 70 70, разделенных пробелами, затеv символ возврата каретки 0D. Далее необходимо выйти из отладчика и выполнить команду time операционной системы.

F - команда заполнения. Эта команда позволяет заполнить содержимоt указанного диапазона оперативной памяти повторяющейся цепочкой байтов заданным и значениями. В частности, когда цепочка состоит из одного байта, эта команда позволяет обнулить нужную область памяти, когда байт равен нулю, а также занести во все биты единицу, заполняя байтом равным FF.

Команда имеет следующий синтаксис:

F <диапазон_памяти> <цепочка байтов> (Enter)

Пример. Заполнить область памяти, начинающуюся с адреса DS:0100 нулями общим числом 16384 байта (4000 16).

F 100L4000 00 (Enter)

Проверить командой

D 100L4000 (Enter)

G - команда запуска программы programmy. Эта команда предназначена для запуска программы на исполнение. При этом, если той области памяти, где хранятся данные, передается управление как программе, компьютер “зависает”, и требуется его повторный запуск. В случае, когда в программе имеются серьезные ошибки (например, отсутствует оператор INT 20 возврата на командный уровень отладчика), попытка исполнить ее с помощью оператора G также приводит к зависанию компьютера.

Этот оператор обычно используется в одной из следующих четырех форм:

Исполнение этого оператора сводится к передаче управления адресу CS:IP. Значения CS и IP можно узнать набрав команду R (Enter)дампа всех регистров процессора;

б) G=<адрес> (Enter)

При этом производится запуск программы по указанному адресу.

в) G <адрес> (Enter)

В этом случае программа запускается с адреса CS:IP и при достижении оператора с указанным адресом осуществляется BREAK- остановка исполнения программы. Распространенной ошибкой начинающих является пропуск знака “равно” при использовании команды G. В этом случае указанный адрес воспринимается как адрес останова, и если CS:IP указывал, например на область данных, то компьютер “зависнет”.

г) G=<адрес> <другой_адрес> (Еnter)

в этом случае производится запуск программы с указанного после знака “=” адреса и в случае достижения программой команды с величиной адреса, указанного вторым (другой адрес), происходит остановка. Такой способ остановки программы называется введением контрольной точки останова. При указании контрольной точки останова соответствующий байт команды по этому адресу заменяется командой INT 3, имеющей размер 1 байт. При достижении контрольной точки исходное значение байта восстанавливается.

Сначала введем программу (с помощью команды А 100):

MOV ,1234

DEC BX ;здесь поставить контрольную точку

Запустим программу командой G=100 109 (Еnter) Программа, дойдя до адреса 109, остановилась и дала полный дамп регистров.

Н - команда шестнадцатиричной арифметики. Эта команда позволяет получить сумму и разность двух указанных в команде шестнадцатеричных чисел.

В ответ получим 1 (сумма) и FFFF (разность).

I - команда ввода из порта. Эта команда позволяет прочесть содержимое порта ввода/вывода с указанным адресом, распечатав его на экране в шестнадцатиричном виде.

Синтаксис команды:

I <адрес_порта> (Enter)

При этом мы получим содержимое порта В из программируемого периферийного интерфейса 82 .

L - команда загрузки с диска. Эта команда позволяет загружать как логические сектора с флоппи-дисков и винчестеров, так и отдельные файлы. Загрузка секторов с диска производится командой:

L<адрес><номер_диска><начальный_сектор><число_секторов> (Enter)

Здесь “адрес” означает начальный адрес в оперативной памяти, начиная с которого будет последовательно размещаться содержимое блоков-секторов. Переменная “номер диска” указывает с какого диска будет производиться загрузка. Число 0 означает диск А, число 1 - диск В, число 2 - диск С и т.д. Следующие две переменные соответственно указывают с какого сектора начинается чтение и общее число прочитанных секторов.

Загрузить BOOT-блок с флоппи-диска А: в оперативную память, начиная с адреса DS:1000, для чего необходимо выполнить команду

L 1000 0 0 1 (Enter)

Затем содержимое ВООТ-блока можно распечатать командой

D 1000L200 (Enter)

а также дизассемблировать

U 1000L200 (Enter)

N <имя_файла> (Enter)

Далее необходимо исполнить команду L без аргументов. В результате этих действий файл (за исключением файлов с расширением ЕХЕ), будет загружен в оперативную память начиная с адреса CS:100. Если загружаемый файл имеет расширение ЕХЕ, то отладчик загрузит файл, начиная с адреса СS:0. Число прочитанных байтов хранится в регистровой паре ВХ:СХ после выполнения команды L.

M - команда копирования.Эта команда копирует содержимого части оперативной памяти в другую область оперативной памяти. Синтаксис команды следующий:

М <диапазон> <начальный_адрес> (Enter)

Здесь “диапазон” указывает на копируемую область памяти, а “начальный_адрес” - на адрес первого байта, начиная с которого размещаются скопированные данные. Эту команду можно использовать для временного сохранения содержимого оперативной памяти с ее последующим восстановлением.

В начале просмотрим содержимое памяти:

D 100L100 (Enter)

Затем сохраним часть памяти, начиная с адреса

M 100L100 1000 (Enter)

Затрем исходное содержимое

F 100L100 0 (Enter)

Проверим обнуление

D 100L100 (Enter)

И наконец восстановим исходное содержимое

M 100L100 100 (Enter)

N - команда указания имени. Эта команда прежде всего, определяет имя файла, который далее либо будет считываться с диска командой L, либо записываться на диск командой W. Синтаксис этой команды следующий:

N <имя_файла> (Enter)

Прочитаем с диска в оперативную память файл AUTOEXEC.BAT. Для этого выполним

N C:\AUTOEXEC.BAT (Enter)

В регистровую пару ВХ:СХ, будет занесена длина загруженного файла в байтах.

О - команда вывода данных в порт. Эта команда позволяет вывести указанный байт в порт с заданным адресом. Она полезна для тестирования работы периферийных устройств и корпусов на системной плате в диалоговом режиме. Синтаксис команды:

О <адрес_порта> <величина> (Enter)

Здесь вместо «адреса_порта» подставляется адрес необходимого порта в диапазоне 0-FFFF, а вместо “величина” - значение, которое затем загружается в порт. Если порт шестнадцатибитный, то “величина” может быть четырехразрядным шестнадцатиричным числом, которое загружается в порт.

Мотор дисковода А: для флоппи-диска можно включить следующей командой

О 3F2 10 (Enter)

Р - команда высокоуровневой трассировки. Эта команда также, как и команда Т, предназначена для трассировки программ. Однако, в отличие от Т трассировки, эта трассировка менее детальна. Она не отслеживает досконально подпрограммы и программные прерывания, а также циклы LООР и строковые команды с повторением. Как и в случае Т-трассировки после каждой команды печатается содержимое всех регистров и следующая исполняемая команда. Синтаксис команды:

Р=<адрес> <число_команд> (Enter)

Можно опустить любой из двух параметров командной строки: <адрес> и/или <число_команд>. Параметр<адрес> задает начальный адрес, начиная с которого будет производиться трассировка, а параметр <число_команд> будет указывать общее число команд, которые будут исполнены после нажатия клавиши (Enter). Обязателен ввод символа “=” при указании адреса для того, чтобы не спутать адрес с числом исполняемых команд. Этот тип Р -трассировки крайне полезен при изучении общей логики выполнения программы, избавляя от утомительного отслеживания деталей. При начальном изучении программы необходимо начинать именно с Р -трассировки.

Введем, начиная с адреса 100, следующую программу

Затем проведем Р-трассировку. Для этого сначала введем команду Р=100 (Enter) и далее последовательные

После этого проведем обычную детальную Т-трассировку

Q - команда выхода из отладчика. Команда Q приводит к выходу из отладчика на следующий верхний программный уровень. При этом рабочие файлы не сохраняются.

R - команда дампа/коррекции регистров. Эта команда позволяет просматривать содержимое всех регистров сразу, а также флаги, или просматривать значения отдельных регистров и регистра флагов с возможностью их изменения.

дает распечатку всех регистров, а также команды, на которую указывает CS:IP.

R <имя_регистра> (Enter)

дает распечатку содержимого указанного регистра, и затем печатает двоеточие на следующей строке. После этого пользователь может нажать клавишу (Enter) и выйти обратно на монитор команд отладчика, либо задать новое значение регистра перед нажатием клавиши (Enter). В последнем случае старое значение регистра заменится на новое. Возможные имена регистров: AX, BX, CX, DX, SP, BP, SI, DI, DS, ES, SS, CS, IP, F (регистр флагов).

При использовании команды

надо учитывать, что кодирование значений флагов производится весьма специфическим образом. Ниже приводится таблица кодировки, где символьная пара слева соответствует значению 0 соответствующего флага, а справа - значению, равному 1 (флаг установлен):

При исполнении команды

значения флагов печатаются в строку в порядке, обратном к порядку в таблице. Сразу же за этим в строке печатается знак черты <->, отладчик переходит в состояние ожидания ввода с клавиатуры. Если пользователь нажмет только клавишу (Enter), то значения флагов не изменятся и произойдет возврат на монитор команд отладчика. Однако, перед этим пользователь может набрать новые значения некоторых флагов согласно кодировочной таблицы. Порядок следования при этом не существенен.

S - команда поиска. Команда поиска упорядоченного набора байтов позволяет провести поиск указанной цепочки байт в заданном диапазоне оперативной памяти и имеет синтаксис:

S <диапазон_памяти> <цепочка_байтов> (Enter)

Ответ выдается в виде списка адресов, начиная с которых располагается указанная цепочка байтов.

Предположим, нужно определить встречается ли цепочка символов “DOS” в первых 32К оперативной памяти. Для этого необходимо ввести команду

S 0:0L8000 44 4F 53 (Enter)

Т - команда трассировки. Эта команда позволяет исполнить одну или несколько команд в режиме трассировки с печатью содержимого всех регистров и мнемоники следующей декодированной исполняемой команды. После трассировки текущей команды указатель IР сдвигается так, что он указывает на следующую команду. Команда

производит трассировку одной текущей команды, на которую указывает CS:IP, с соответствующим изменением IP.

T <число> (Enter)

производит последовательную трассировку нескольких команд, общее число которых задается в команде.

Т=<адрес> (Enter)

трассирует одну команду по указанному адресу.

Общий вид команды Т следующий:

Т=<адрес> <число_команд> (Enter)

Команда: Т=FFFF:0 (Enter)

производит трассировку первой исполняемой команды при первоначальном запуске компьютера.

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

U <начальный_адрес> <длина> (Enter)

U <начальный_адрес>,<конечный_адрес> (Enter)

вызывает дизассемблирование 32 байт, начиная с байта, на который указывает CS:IP с выводом результирующего листинга на дисплей.

W - команда записи на диск. Эта команда позволяет записывать на диск (флоппи-диски или винчестер) в последовательные блоки указанный диапазон оперативной памяти, а также записывать в файлы. Запись в секторы на диск производится командой

W<адрес><номер_диска><начальный_сектор><число_секторов> (Enter)

Эта команда записывает на диск не более 80Н секторов, число секторов не более 80. Параметр <адрес> означает адрес оперативной памяти, начиная с которого содержимое памяти копируется на диск. Параметр <номер диска> указывает диск, на который производится запись (0-диск А:, 1-диск В:, ..., 80 - винчестер С:). Параметр <начальный сектор> указывает номер логического сектора, начиная с которого будет производиться загрузка образа оперативной памяти. Параметр <число секторов> указывает общее количество записываемых на диске секторов.

Скопируем в файл на диске содержимое ВIОS-области оперативной памяти. Предполагая наличие РС/АТ со стандартным ВIОS размером 64К, обнулим сначала регистр ВХ, а затем занесем в регистр СХ 2000Н. Далее зададим имя файла, куда будем копировать старшую половину ВIОS, командой

N ВIОS.СОМ (Enter)

И наконец, команда

W F000:Е000 (Enter)

занесет в файл ВIОS.СОМ содержимое BIOS.


Лучшие статьи по теме