Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodichka_lab__rab_spo.doc
Скачиваний:
14
Добавлен:
05.09.2020
Размер:
433.66 Кб
Скачать

I (Input)

Считывает и выводит на дисплей один байт из порта. Формат команды

I <адрес_порта>.

L(Load)

Загружает файл или данные из секторов диска в память. Файл можно указать одним из двух способов: указав имя файла в качестве аргумента при запуске DEBUG, или из запущенного DEBUG командой N (Name). Существует два формата команды L.

1. Загрузка уже указанного файла: l [<адрес>]. Параметр адрес указывает, по какому адресу загрузить в память файл. Если адрес не указан, файл загружается, начиная с адреса CS:100H. Чтобы загрузить файл, не указанный при запуске DEBUG, его необходимо предварительно указать (смотрите команду N):

N <имя_файла> ;Указать файл .

L ;Загрузить указанный файл, начиная с адреса CS:100H

Чтобы повторно загрузить файл, просто задайте команду L вновь, не указывая адреса. DEBUG вновь считает файл с диска и соответственно проинициализирует регистры.

2. Загрузка данных из секторов диска:

L [<адрес> [<диск> <начало> <количество>]].

  • Адрес указывает адрес в памяти, начиная с которого будут размещаться прочитанные данные (по умолчанию это адрес CS: 100).

  • Диск указывает номер диска (0 – А, 1 – В и т.д.).

  • Начало указывает шестнадцатеричный номер первого сектора, который нужно прочитать (относительному сектору 0 соответствует цилиндр 1, дорожка 0,сектор 1).

  • Количество - это шестнадцатеричное число, указывающее, сколько следующих друг за другом секторов нужно прочитать.

Приведенный ниже пример загружает в память, начиная с адреса CS:100, 15Н секторов, начиная с сектора 20Н, с диска А:

L 100 0 20 15

Команда L возвращает в пару регистров ВХ:СХ число прочитанных байтов. Для файла типа .EXE DEBUG игнорирует любой указанный адрес и использует адрес загрузки из ЕХЕ-заголовка. Он также стирает из памяти заголовок; чтобы сохранить его, перед вызовом DEBUG переименуйте файл, присвоив ему другое расширение.

М (Move)

Перемещает (точнее, копирует) содержимое ячеек памяти. По умолчанию используется регистр DS. Команду можно использовать, указывая длину или диапазон.

1. М <началъный_адрес> L<длина> <адрес_назначения>.

Пример:

М DS:50 L100 DS:400 ;Перемещаем фрагмент длиной 100Н байтов

2. М <начальный_адрес> <конечный_адрес> <адрес_назначения>.

Пример:

М DS:50 150 DS:400 ;Перемещаем байты с DS:50H no DS:150H

Обе команды выполняют одни и те же действия – перемещают байты с адресами от DS:050H до DS:150H по адресу DS:400H.

N (Name)

Задает имя программы или файла, которые нужно прочитать с диска или записать на диск. Команда используется как n <имя_файла>, например

N С:\SAM.COM

Операция сохраняет введенное имя по адресу CS:80H в PSP. Первый байт (по адресу CS:80H) содержит длину (0АН), за ним следует пробел и имя файла. Для чтения файла используется команда L (Load), для записи – W (Write).

О (Output)

Посылает байт в порт, указанный в команде в виде о <адрес_порта> <байт>.

Р (Proceed)

Выполняет инструкцию CALL, LOOP, INT или повторяемую строковую инструкцию (с префиксами REPnn), переходя к следующей инструкции. Формат команды P [=<адрес] [<значение>], где = адрес –- необязательный адрес начала, а значение – необязательное количество инструкций, которые нужно выполнить. Если адрес не указывается, используется текущий адрес из пары CS:IP, а если не указано значение, выполняется одна инструкция. Например, если нужно выполнить обработчик прерывания INT 10H, введите Р, и он выполнится вплоть до следующей инструкции в вашей программе. Смотрите также команды G и Т.

Q(Quit)

Завершает сеанс работы DEBUG. Операция не сохраняет файлы; для этого необходимо применять команду W.

R (Register)

Выводит на дисплей содержимое регистров и следующую инструкцию. Формат команды r [<имя_регистра>]. Вот примеры ее использования.

R Вывести значения из всех регистров.

R DX Вывести значение DX; DEBUG предоставит вам возможность нажать <Enter>, чтобы оставить содержимое регистра неизменным, или ввести от одной до четырех шестнадцатеричных цифр, которые будут записаны в DX.

R IP Вывести значение IP; можно ввести другое значение с клавиатуры.

R F Вывести состояние флагов; в начале этого приложения приведена таблица, содержащая расшифровку сокращений.

S (Search)

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

1. S <начальный адрес <длина> '<данные>'.

Например:

S 300 L2000 'VIRUS'

Эта команда будет искать строку "VIRUS" в 2000Н байтах, начиная с адреса DS:300H.

2. S <начальный адрес> <конечный адрес> '<данные>'.

Например:

S CS:100 400 51

Эта команда ищет символ с ASCII-кодом 51Н в байтах от CS:100H до CS:400H.

Т (Trace)

Пошагово выполняет программу. Для выполнения обработчиков прерываний INT лучше пользоваться командой Р (Proceed). По умолчанию используется пара регистров CS:IP. Формат команды T [=<адрес>] [<значение>]. Необязательный операнд =adpec указывает DEBUG, откуда начинать пошаговое выполнение, а значение – количество команд, которые необходимо выполнить. Если операнды отсутствуют, DEBUG выполняет одну инструкцию и выводит на дисплей значения из регистров. Вот два примера использования этой команды:

Т ;Выполнить одну следующую инструкцию

Т 10 ;Выполнить следующие 10Н (16) инструкций

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

U (Unassemble)

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

U [<начальный_адрес>]

или

U [<начальный_адрес> <конечный_адрес>]

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

U 100 ;Дизассемблировать 32 байта, начиная с адреса CS:100

U ;Дизассемблировать 32 байта, начиная с адреса, на

;котором закончилась последняя команда U, если она была

U 100 140 ;Дизассемблировать команды из адресов от СS:100 до CS:140

DEBUG некорректно дизассемблирует некоторые инструкции условных переходов и инструкции, специфичные для процессоров 80286 и последующих, но они все равно выполняются корректно, хотя DEBUG и представляет их как выражения DB.

W (Write)

Записывает файл из DEBUG. Необходимо заранее задать имя файла (командой N), если он не был загружен. По умолчанию используется регистр CS. Формат команды

W [<адрес> [<диск> <начальный_сектор> <число_секторов>]]

Программы можно записывать только в виде файлов .СОМ. Чтобы изменить программу типа .ЕХЕ, необходимо временно изменить ее расширение. Записывать файлы из DEBUG можно в двух случаях.

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

• Загрузите программу на машинном языке в память под ее именем: DEBUG <имя файла>.

• С помощью команд D просмотрите программу, и с помощью команд Е внесите изменения.

• Командой W запишите на диск измененную программу.

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

  • Используя команды A (Assemble) и Е, введите требуемые инструкции.

  • Введите имя программы командой N <имя.сом>. Расширение файла обязательно должно быть .СОМ.

  • Поскольку только вам известна длина всей программы, введите длину в байтах в пару регистров ВХ:СХ.

Рассмотрим такой пример:

хххх:0100 MOV CL,42

хххх:0102 MOV DL,2A

хххх:0104 ADD CL,DL

хххх:0106 JMP 100

Хотя вводятся символьные инструкции, DEBUG преобразует их в машинный код, и именно машинный код будет записан в файл. Поскольку длина последней инструкции, JMP 100, составляет два байта, размер программы равен 8 байтам (от 100Н до 107Н включительно).

  • С помощью команды R ВХ просмотрите значение в ВХ и введите 0, чтобы очистить его.

  • Командой R СХ просмотрите содержимое СХ. DEBUG выведет значение СХ на дисплей и запросит новое. Введите размер программы, 8.

  • Введите команду W <Enter>, чтобы записать программу на диск.

DEBUG выведет сообщение "Writing 8 bytes." Если указано число 0, возможно, вы некорректно ввели длину программы – попытайтесь еще раз. Внимательно определяйте размер программы, поскольку значение должно быть шестнадцатеричным, и последняя инструкция может быть длиннее одного байта. Размер программы можно определить, вычтя 100Н из смещения, показанного DEBUG после ввода последней команды программы и нажатия <Enter>. Например, в рассматриваемом примере после инструкции JMP 100 DEBUG выведет адрес хххх:0108. Значит, размер программы равен 108Н - 100Н = 8 байт.

Приложение 2

Соседние файлы в предмете Системное программное обеспечение