Задание № 1.4. Работа с отладчиком Debug
Для знакомства с работой отладчика Debug выполните следующие примеры.
Пример 1. Исследование и изменение памяти. Используется команда «E адрес». Она располагает в ячейке памяти с указанным адресом введенное значение и может быть использована как для записи данных, так и для ввода команд в машинных кодах непосредственно в ячейки памяти.
- Е 100
3756:0100 Е4.01 85.D8
Числа 01h и D8h расположены по адресам 3756:0100 и 3756:0101. Номер сегмента, который вы увидите у себя на экране, возможно, будет другим. В ответ на команду, Debug высвечивает числа (в примере E4 и 85) – это старые значения ячеек памяти на смещениях 100h и 101h от начала сегмента.
Пример 2. Просмотр содержимого участка памяти. Используется команда «D адрес». Она позволяет просмотреть содержимое ячеек памяти, начиная с указанного адреса, в шестнадцатеричном представлении.
-D 100
Пример 3. Ввод мнемокода команды на языке ассемблера. Выполните команду:
- A адрес
После появившегося приглашения вводится команда, которая будет располагаться по адресу, указанному в команде (например, 100h). После ввода каждой инструкции необходимо нажимать клавишу Enter. Для окончания работы в этом режиме необходимо дважды нажать клавишу Enter. Использование этой команды значительно упрощает ввод программ.
Задание. Введите по адресу 100h команду «ADD AX,BX».
Пример 4. Просмотр содержимого регистров микропроцессора. Используется команда «R»:
- R
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=3756 CS=3756 ES=3756 SS=3756 IP=0100 NV UP DI PL NZ NA PO NC
3756:0100 01D8 ADD AX,BX
Замечание. Возможно, на своем дисплее вы увидите другие числа во второй и третьей строках.
В первой строке отображается информация о содержимом регистров общего назначения (AX, BX, CX, DX), базовых (SP, BP) и индексных регистров (SI, DI).
Замечание. Четырехзначное число, показанное вслед за именем регистра, является шестнадцатеричным. При работе с Debug используются только шестнадцатеричные цифры, хотя рядом с ними и не ставится обозначение «h».
Во второй строке представлено содержание сегментных регистров (DS, CS, ES, SS). Значения, содержащиеся в них, представляют собой адрес начала соответствующего сегмента. Далее указан регистр указатель команд IP. В начале работы он инициализирован значением 100 h, равным размеру префикса программного сегмента. После него указаны мнемонические обозначения отдельных битов регистра флагов
В третьей строке присутствует следующая информация. Полный адрес команды, на которую показывает регистр IP. Он состоит из двух частей: слева от двоеточия находится адрес начала сегмента (значение, находящееся в регистре CS), справа – относительный адрес команды, отсчитанный от начала сегмента (значение, находящееся в регистре IP). Далее (через пробел) находится машинный код команды, на которую указывает регистр IP, в данном случае 01D8 – это код команды ADD AX,BX (сложить содержимое регистров AX и BX, результат поместить в AX), а далее представлена сама команда в обозначениях языка ассемблера.
Таким образом, с помощью команды «R» можно получить информацию о содержимом регистров на текущий момент времени.
Пример 5. Пошаговая трассировка программы реализуется командой «T». Выполняется команда, на которую указывает регистр IP.
Пример 6.Проверка размера доступной для работы памяти компьютера.
В зависимости от модели компьютера размер доступной для работы памяти зависит от установки внутренних переключателей и может быть меньше, чем реально существует. BIOS хранит двухбайтовую переменную по адресу 0040:0013, которая сообщает число килобайтов используемой памяти
-d 0040:0013.
Пример 7. Проверка состояния переключающих клавиш.
Состояние так называемых переключающих клавиши: NumLock, ScrollLock, CapsLock, Ins записывается в область данных BIOS в два байта с адресами 0000h:0417h и 0000h:0418h.
Формат байта 0000h:0417h: