Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornaya_rabota_1_Ispolzovanie_sistemnykh...doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
207 Кб
Скачать
☆

Справочная информация

1. Системная программа-отладчик debug

DEBUG.EXE - специальная программа, входящая в состав утилит MS-DOS, для ввода и пошагового выполнения программ, написанных на машинном языке или с помощью команд ассемблера. Почему программа называется DEBUG? "Bugs" (дословно "насекомые") в переводе со слэнга программистов означает "ошибки в программе". В соответствии с компьютерным фольклором термин "debugging" (дословно "обезжучивание", "обезнасекомливание") появился в то время, когда перестал работать компьютер Гарвардского университета "Марк I".

После долгих поисков техники обнаружили источник своих бед - небольшую моль, попавшую между контактами реле. Они удалили моль и внесли запись в сменный журнал о процессе под названием "debugging", произведенным над "Марком I"

Системная программа-отладчик DEBUG является мощным средством для отладки ассемблерных программ.

Для запуска этой программы в ответ на приглашение операционной системы надо в командной строке ввести DEBUG и нажать клавишу [Enter]:

...> DEBUG

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

Программа DEBUG позволяет:

1) производить пошаговую отладку программы с просмотром регистров и содержимого оперативной памяти;

2) производить арифметические действия над шестнадцатеричными числами;

3) вводить данные в регистры и в ячейки оперативной памяти;

4) вводить программу в виде машинных кодов, а также в ассемблерном виде в ячейки оперативной памяти и выполнять ее;

5) записать введенную программу из оперативной памяти на диск, т.е. получить исполняемый (.COM-файл).

Отладчик DEBUG имеет командный интерфейс. Это значит, что при запуске и после выполнения очередной инструкции появляется символ "-", означающий, что программа ждет ввода очередной инструкции. После ввода инструкции нужно нажать символ Enter. Рассмотрим далее некоторые наиболее часто используемые инструкции DEBUG и их упрощенные форматы:

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

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

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

4. R [<имя регистра>] – работа с регистрами. Инструкция "R" без параметра позволяет просмотреть содержимое всех регистров, а также значение флагов и команду, расположенную по смещению 100 в сегменте кода.

Обычно по смещению 0100 находится первая команда программы. Состояние флагов выдается в следующем виде:

NV UP DI PL NZ NA PO NC,

что соответственно показывает: нет переполнения, правое направление смещения, прерывания запрещены, знак плюс, не ноль, нет внешнего переноса, контроль на четность, нет переноса.

Кроме того, на экран выводится адрес, машинное и ассемблерное представления команды, которую предстоит выполнить С помощью инструкции "R <имя регистра>" можно ввести новое значение в один регистр.

5. U [<сегментный регистр>:]<смещение> – просмотр ячеек оперативной памяти, начиная с указанного смещения в сегменте, заданном сегментным регистром;

6. Е [<сегментный регистр>:]смещение В1 В2 ,где В1, В2 - пара шестнадцатеричных цифр, представляющих собой содержимое одного байта. Команда предназначена для записи информации в ячейки оперативной памяти, начиная с указанного адреса памяти (адрес определяется начальным адресом сегмента и смещением в сегменте);

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

Например, команда для сложения значений из регистров AX и BX двухбайтовая и имеет машинный код 01D8. А машинная команда записи слова из регистра AX в стек – однобайтовая и имеет код 50. Инструкция "E <смещение>" при работе распечатывает в следующей после ее ввода строке адрес, состоящий из двух чисел, и старое значение байта по этому адресу:

<содержимое CS>:<смещение> <значение байта>,

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

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

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

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

10. N <имя .сom-файла> – предназначена для присвоения имени введенной программе (тип файла должен быть .com для последующей записи ее на диск либо считывания с диска. Т.к. только программист знает действительный размер программы, то программе DEBUG необходимо указать длину программы в байтах, введя эту величину в регистр СХ. Для этого необходимо запросить содержимое регистра СХ командой R:

R CX

и затем в ответ на приглашение программы DEBUG к вводу информации в этот регистр ввести длину программы в байтах; Перед записью предварительно нужно записать 0 в регистр BX;

11. W -–предназначена для записи файла на текущее внешнее устройство. После выполнения инструкции "W" на диске в текущей директории появится файл с расширением .COM - точная копия введенной Вами в оперативную память программы. Эту программу можно запустить непосредственно из DOS;

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

13. D адрес сегмента:смещение –команда служит для выдачи на экран дампа памяти, начинающегося с указанной ячейки. Всего выдается 8 строк по 16 байт данных в каждой строке в шестнадцатеричном представлении и символьное представление этих же байтов в кодах ASCII.

Замечание.

Обратите внимание, что при вводе ассемблерных программ в DEBUG числа воспринимаются как шестнадцатеричные. В Turbo Assembler для указания, что число шестнадцатеричное, после него записывается буква "h".