Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
___МЕТОДИЧКИ_2013 / __1_DEBUG_Копытов.doc
Скачиваний:
30
Добавлен:
15.03.2016
Размер:
161.79 Кб
Скачать

2 Задание к лабораторной работе

2.1 Определение даты bios компьютера.

Используем команду отображения данных D.

Загрузить программу DEBUG. После загрузки программы появится знак "-", что означает приглашение к работе. Индицировать содержимое ПЗУ BIOS по адресу FFFF5h (дата BIOS вашего компьютера)

d ffff : 5 <enter>.

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

2.2 Определение количества последовательных и параллельных портов и их базовых адресов.

Загрузить программу DEBUG. После загрузки программы появится знак "-", что означает приглашение к работе. Индицировать область оперативной памяти BIOS:

d 40:0 <enter>.

На экране появится информация о содержимом памяти, начиная с адреса 40:0. Поскольку адреса портов двухбайтовые и принято размещать числа в памяти начиная с младшего байта, то базовый адрес, например, порта СОM2 будет 02F8. Результаты занести в приведенную таблицу.

Адрес памяти

Порт

Базовый адрес порта

40:0

СOM1

40:2

СОM2

02F8

40:4

СOM3

40:6

СOM4

40:8

LPT1

40:A

LPT2

40:C

LPT3

2.3 Определение типа дискового накопителя.

Используем команду загрузки L. Выполним команду в режиме загрузки указанных секторов диска.

Загрузить программу DEBUG. После загрузки программы появится знак "-", что означает приглашение к работе. Прочитать первый байт FAT. Для этого загрузим первый сектор второго диска (С) по свободному адресу в памяти 4000:0:

L 4000:0 2 1 1 <enter>.

Если на компьютере установлена операционная система на базе Windows NT, то на экране может появиться предупреждение «Приложение произвело попытку прямого доступа к жесткому диску, что недопустимо. При работе приложения возможны ошибки». Для завершения работы приложения нажмите кнопку «Закрыть»». В этом случае к внешним устройствам следует обращаться через драйверы самой операционной системы. Также можно использовать специальные программы, например, UserPort, которые позволят другим программам, например, DEBUG, напрямую обращаться к портам.

В случае успешного выполнения команды L просмотреть содержимое памяти по данному адресу с помощью команды:

D 4000:0 <enter>.

Если в ячейке памяти находится значение FF, то дисковод 2-х сторонний, использует 8 секторов; FE - односторонний, 8 секторов; FD - 2- сторонний, 9 секторов;

FC - односторонний, 9 секторов;

F9 - 2-сторонний, 15 секторов;

F8 - жесткий диск.

2.4 Занесение программы в память.

Используем команду ассемблирования A.

Загрузить программу DEBUG. После загрузки программы появится знак "-", что означает приглашение к работе. Открыть ячейку памяти с помощью команды:

A <enter>.

На экране появится текущий адрес. Убедитесь, что смещение равно 100. Если смещение другое, выполните еще раз команду A 100. Введите инструкции следующей программы, подтверждая их ввод нажатием «Enter».

mov ах,0005 int 10 mov dl,0 mov ah,2 int 21 inc dl jnz 0109 jmp 10f

Чтобы выйти из команды A в отладчик, еще раз нажмите «Enter».

2.5 Запись программы в виде файла на диск.

Используем команду записи на диск W и команду просмотра и установки регистров R.

После набора программы в задании 2.4 и появления командной строки отладчика необходимо в регистры ВХ:СХ занести размер программы в байтах. Поскольку программа имеет размер всего 1216=1810 байт, заносим в СХ число 12, а в ВХ число 0.

R CX <enter>.

На экране появится имя регистра, а курсор будет указывать место, куда необходимо поместить число 12. Аналогично в регистр ВХ поместить число 0. Имя программы указывается с помощью команды N. Необходимо помнить, что программы, разработанные под DOS, работают с именами, содержащими до восьми символов из латинских букв и цифр.

N tst.com <enter>.

Затем осуществляется запись программы:

W <enter>.

Выйдите из отладчика и убедитесь в наличии файла tst.com в текущей директории, посмотрите его размер.

2.6 Загрузка программы с диска в память и просмотр текста программы на ассемблере

Для просмотра текста программы на ассемблере используем команду

дизассемблирования U.

Загрузить программу DEBUG. После загрузки программы появится знак "-", что означает приглашение к работе. Указать имя программы, записанной на диск в предыдущем задании (tst.com) с помощью команды

N tst.соm <enter>.

Загрузить программу в память отладчика с помощью команды

L <enter>.

Просмотреть содержимое регистров по команде

R <enter>.

В регистрах ВХ:СХ будет указано количество загруженных байт программы tst.com, а в регистрах СS: IР стартовый адрес. Просмотреть текст программы с помощью команды:

U <enter>.

2.7 Загрузка и выполнение загруженной программы в режиме трассировки.

Используем команду выполнения программы G. Загрузить программу в отладчик можно используя команды N и L (см. пункт 2.6), либо одновременно с запуском отладчика из командной строки:

dеbug tst.com <enter>.

Командную строку удобно вызывать с помощью ярлыка B32TOOLS из папки BIN программного пакета TASM. После загрузки программы появится знак "-", что означает приглашение к работе под управлением отладчика. Просмотреть содержимое регистров по команде

R <enter>.

В регистрах ВХ:СХ будет указано количество загруженных байт программы tst.com, а в регистрах СS:IР стартовый адрес.

-R

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

DS=149D ES=149D SS=149D CS=149D IP=0100 NV UP EI PL NZ NA PO NC

149D:0100 B82301 MOV AX,0005

-

Перечислим программно доступные регистры виртуального процессора I8086. Сначала расположены шестнадцатиразрядные регистры общего назначения (РОН) - AX, BX, CX, DX. Далее идут специализированные адресные регистры: указатель стека SP, указатель базы BP, индекс источника SI, индекс приемника DI. Завершают таблицу сегментные регистры данных DS, дополнительного сегмента ES, сегмента стека SS, сегмента кода CS и указатель текущей команды IP. Одинаковые значения сегментных регистров в данном примере характерны для крошечной модели распределения памяти, используемой для программ с расширением .com.

Регистр флагов представлен мнемониками значений отдельных флагов. Например, выше приведены значения флагов перепол­нения, направления, прерывания, знака, нуля, дополнительного переноса, четности и переноса:

NV UP EI PL NZ NA PO NC.

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

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

Выяснить отличия в использовании двух команд трассировки T и P.

2.7.1 Выполнить несколько шагов программы в режиме трассировки с помощью повторного набора команды

T <enter>.

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

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

G <enter>.

2.7.2 Заново загрузить в отладчик программу tst.com.

Просмотреть содержимое регистров по команде

R <enter>.

Выполнить несколько шагов программы в режиме трассировки основной программы с помощью повторного набора команды

P <enter>.

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

G <enter>.

2.8 Чтение и запись в порт В (с адресом 0061) программируемого периферийного адаптера (ППА) I8255.

Хотя уже давно программируемые контроллеры, которые использовались в первых компьютерах IBMPCв виде отдельных микросхем, интегрированы в состав БИС чипсета, для пользователя адреса их портов остались первоначальными.

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

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

I 61.

Последовательно записать в порт 61 значения 30 и 33 с помощью команд

O 61 30,

O 61 33.

Результат будет услышан: включится динамик. Для его выключения необходимо выполнить команду

O61 30.

Дело в том, что порт ППА с адресом 61 разрешает прохождение сигнала звуковой частоты на динамик.

2.9 Создать подпрограмму, которая заставит динамик ПК издать звуковой сигнал.

2.9.1 C помощью команды a ассемблировать следующую подпрограмму, осуществляющую вызов соответствующего прерывания DOS:

mov ah,2 ; функция 02 вывода символа

mov dl,7 ; управляющий код - гудок

int 21 ; вызов прерывания DOS 2116

ret ; возврат в основную программу

      1. Занести размер получившегося кода в регистры BX:CX с

помощью команды R.

R bx

0

R cx

7

2.9.3 Задать имя программы BEEP.COM с помощью команды N:

N beep.com.

2.9.4 Записать программу в файл текущей директории с помощью команды w.

2.10 Создать подпрограмму записи двенадцати символов A (ASCII-код 4116) в позицию курсора. Подпрограмма использует функцию 0Ah прерывания BIOS INT 1016. Текст программы:

mov ah,0a ; функции 0a – запись символа в позицию курсора

mov al,41 ; 4116 - ASCII-код буквы А

mov bh,0 ; номер страницы

mov cx,0c ; число повторений

int 10 ; вызов прерывания 1016 BIOS

ret ; возврат в основную программу

2.11 Вывести на экран строку “Veni, vidi, vici.”

2.11.1 Очистить диапазон ячеек оперативной памяти 100..17F:

F 100 17F 0

Просмотреть очищенный диапазон ячеек.

2.11.2 C помощью команды a ассемблировать следующую программу:

mov dx,110 ; адрес строки находится за программой

mov ah,09 ; функция 09 вывода строки

int 21 ; вызов прерывания DOS 2116

int 20 ; корректное завершение программы

2.11.3 Ввести строку с предусмотренного программой адреса 110 командой E:

E 110 “Veni, vidi, vici.$”

2.11.4 Просмотреть диапазон ячеек, заполненных кодами программы командой D:

D 100

2.11.5 Запустить программу на исполнение командой G:

G=100

2.12 Скопировать программу BIOS, расположенную по адресам C000:0…FFFF:F, в файл и сохранить файл для последующего анализа.

Изменение или копирование кода BIOS может нарушить авторское право производителя BIOS. BIOS можно копировать или модифицировать только для целей индивидуального пользования, но не для распространения. Типичная процедура копирования BIOS с помощью программы DEBUG приведена ниже. Эта процедура сохранит в файле весь сегмент в 64 Кбайт с адреса F000:0000h поF0000:FFFFh.

-N biosSave.rom ; имя файла образа BIOS

-R BX ; изменить регистр BX

BX 0000 ; текущее значение 0

:1 ; установить 1 (BX:CX=0001:0000 указывает ; файл размером 64 КБ)

-M F000:0 FFFF CS:0 ; пересылка содержимого BIOS размером

; FFFF начиная с адреса F000:0 по адресу ; CS:0 для последующей записи в файл

-W 0 ; запись файла со смещения 0 размером

; 1000016=64 КБ

-Q ; выход из программы DEBUG

Соседние файлы в папке ___МЕТОДИЧКИ_2013