Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка.doc
Скачиваний:
20
Добавлен:
08.11.2018
Размер:
1.15 Mб
Скачать

2.11 Лабораторна робота 3

Тема: "Утиліта налагоджувача DEBUG: дамп пам'яті"

Ціль: 1. Одержати початкові зведення про можливості програми DEBUG.

2. Вивчити методику застосування деяких основних команд DEBUG.

Порядок виконання:

1. Ознайомитися з можливостями, наданими програмою DEBUG.

2. Вивчити структуру наступних команд DEBUG:

а) початок роботи з DEBUG;

б) перегляд дампа пам'яті;

в) зчитування даних з диска в пам'ять;

г) запис даних з пам'яті на диск;

д) завдання імені програми;

е) пошук;

ж) безпосередні зміни в пам'яті;

з) закінчення роботи.

3. Зміст завдання:

а) Скопіювати на робочий диск у свій каталог файл EXAMPLE.COM і запустити його;

б) Запустити програму DEBUG і потім загрузити EXAMPLE.COM з

диска в пам'ять;

в) Використовуючи команду пошуку визначити перші три адреси осередків пам'яті в яких виявлений символ із заданим кодом (Заданий код дорівнює: Ваш номер за журналом в шістнадцятковому представленні плюс 41h). Визначити фізичні адреси цих осередків. Використовуючи команду перегляду змісту пам'яті визначити якому символу відповідає цей код;

г) Використовуючи команду пошуку визначити адреси осередків пам'яті, в яких виявлена послідовність символів (ця послідовність для кожного варіанта зазначена у таблиці 2.2)

д) Визначити фізичні адреси цих осередків;

е) Змінити зміст пам'яті по цих адресах на будь-яку іншу послідовність символів за своїм вибором;

ж) Записати виправлену програму з пам'яті на диск;

з) Вийти з DEBUG. Запустити EXAMPLE.COM і переконатися в результатах своєї роботи;

и) Видалити виправлений EXAMPLE.COM зі свого каталогу з диска

Зміст звіту.

1. Тема і ціль лабораторної роботи.

2. По кожному пункту завдання відбити:

а) структуру команд, використаних у процесі виконання цього пункту завдання;

б) результати виконання кожної команди;

в) проведені вручну розрахунки, якщо вони необхідні в цьому пункті завдання.

Утиліта налагоджувача debug.

У перекладі з англійського "Bugs" - комахи. Дослівний переклад терміна "debugging" – знищення комах. Цей термін з'явився, коли в комп'ютері Гарвардського університету Марко-1 знайшли моль, що потрапила між контактами реле. Моль була вилучена, а в журнал були занесені зведення про процес "Debugging".

Debug - це інструментальна команда DOS. Застосовується для перегляду і редагування двійкових програмних файлів (файлів машинних команд, що виконуються). Звичайно вона присутня у виді програми DEBUG.COM у каталозі DOS і призначена для професійних програмістів.

Всі операції в DEBUG виконуються в шістнадцятковій арифметиці. Кожна шістнадцяткова цифра являє собою 4 біти в двійковому представленні. Дві шістнадцяткові цифри представляють один байт. Команда працює тільки зі словами!!!

Числа можуть мати довжину від 0 до FFFF.

Для того, щоб ввести чергову команду DEBUG натисніть клавішу "Enter"(Введення).

Короткий перелік основних команд утиліти налагоджувача DEBUG

1) Початок роботи: Введіть ім'я програми DEBUG

Наприклад: D:\TASM\DEBUG ( У команді зазначений шлях до файлу, що виконується, DEBUG.COM)

На екрані з'являється запрошення до введення команд відладчика -

2) Припинення роботи DEBUG - Q (від Quit - припинити)

3) Команда для додавання і віднімання шістнадцяткових чисел.

- H число1 число2 (від Hexarithmetic - шістнадцяткова арифметика) Результатом виконання даної команди буде 2 шістнадцяткових числа

число1+число2 число1-число2

Приклад1: - H 3 2

0005 0001

Приклад2: - H D000 C000

9000 1000 (D000h+C000h=19000h, однак при переповненні

зберігаються лише 4 праві цифри відповіді)

Приклад3: - H 2 3

0005 FFFF

Для представлення негативних чисел м/п 8086 використовує додатковий код.

0000 0000 0000 0011 число 3 у прямому коді

1111 1111 1111 1100 інвертуємо біти - зворотний код числа 3

+ 1 додаємо 1

1111 1111 1111 1101 додатковий код числа 3

0000 0000 0000 0010 число 2

+ 1111 1111 1111 1101 додатковий код числа 3

1111 1111 1111 1111 (FFFF)

у відповіді вийшло негативне число в додатковому коді

0000 0000 0000 0000 інвертуємо всі біти

+ 1 і додаємо 1

0000 0000 0000 0001 модуль негативного числа дорівнює 1 (2-3=-1)

М/п може розглядати числа як зі знаком, так і без знака. Якщо розглядаються числа без знака, то переповнення - це помилка. Якщо розглядаються числа зі знаком, то помилки немає. При цьому числа від 8000h до FFFFh поводяться як негативні числа.

Позитивні 0000h 0000 0000 0000 0000b 0

... ... ...

7FFFh 0111 1111 1111 1111b +32767

Негативні 8000h 1000 0000 0000 0000b -32768

... ... ...

FFFFh 1111 1111 1111 1111b -1

Для представлення числа в зворотному коді немає необхідності попередньо переводити його в двійкову систему числення (таблиця 2.1).

Приклад 4: Знайти модуль негативного числа, додатковий код якого FFB4h

004Bh - зворотний код числа FFB4h

+ 1h

004Ch - модуль негативного числа

Таблиця 2.1. Коди чисел

Прямий код

Зворотний код

Прямий код

Зворотний код

0000b

0h

1111b

Fh

1000b

8h

0111b

7h

0001b

1h

1110b

Eh

1001b

9h

0110b

6h

0010b

2h

1101b

Dh

1010b

Ah

0101b

5h

0011b

3h

1100b

Ch

1011b

Bh

0100b

4h

0100b

4h

1011b

Bh

1100b

Ch

0011b

3h

0101b

5h

1010b

Ah

1101b

Dh

0010b

2h

0110b

6h

1001b

9h

1110b

Eh

0001b

1h

0111b

7h

1000b

8h

1111b

Fh

0000b

0h

4) Зчитування даних з диска в пам'ять і запис з пам'яті на диск

DEBUG дає засіб представлення на екрані і зміни даних у пам'яті. А нам потрібно переглядати і змінювати дані, збережені на дисках. Зчитати дані в пам'ять з диска можна двома способами:

а) DEBUG E:\MY\FILE.EXT

Якщо робота з DEBUG починається в такий спосіб ( зазначені шлях і ім'я файлу), то утиліта зчитує файл у пам'ять.

б) - N E:\MY\FILE.EXT

DEBUG одержує повідомлення про ім'я файлу для зчитування. (від Name - ім'я)

- L

Файл зчитується в пам'ять (від Load - завантажити).

Після внесення змін у пам'ять запис на диск копії вмісту пам'яті виробляється під зазначеним заздалегідь ім'ям командою - W (від Write - записати)

Для того, щоб записати фрагмент програми на диск треба:

а) указати довжину фрагмента шістнадцятирічним числом у регістрі CX

- R CX

CX 0000

:0004

б) вказати ім'я файлу, в який буде записана програма

- N my.com

в) зробити запис файлу

- W

5) Команда перегляду вмісту пам'яті. - D (від Diplay - показати).

Звертання до осередків пам'яті відбувається по адресах. Для м/п типу Intel 8086 довжина адреси 5 шістнадцяткових розрядів.

Адреса представляється двома чотирьох розрядними числами (словами):

сегментна частина - розглядається як зміщена на одну позицію вліво, тобто *10h і зсув - відносна частина, додається до значення сегмента.

Приклад: запис адреси 1234 : 5678

сегмент зсув

Повна фізична адреса утвориться так: сегмент*10h + зсув

12340

5678

179B8 повна адреса

Сегменти нумеруються з 0000h. Мінімальний розмір сегмента - 16 байт, максимальний - 64ДО. Початкова адреса сегмента завжди кратний 16.

У команді D необхідно вказати, яку частину пам'яті ми хочемо переглянути: починаючи з якої адреси і скільки ячийок пам'яті.

Приклади: - D F000:6000

починаючи з адреси F000:6000 показується 128 байт за замовчуванням.

- D F000:6000 6800

показується вміст комірок пам'яті з адреси F000:6000 по адресу F000:6800.

- D F000:6000 L 100

починаючи з адреси F000:6000 показується задане число байт ( у даному прикладі 100h) (від Length - довжина)

Ці три способи завдання області пам'яті називаються завданням діапазону.

Уміст пам'яті - дамп пам'яті представляється одночасно в шістнадцятковій формі й у символьному форматі. (У символьному форматі відображається тільки 96 символів з 256)

25B4:0100 8A FF F3 0A 1B AE 47 1F-8B C3 48 12 B1 04 50 50 ......G...H...PP

Тут вміст осередку з адресою 25B4:0100 - 8A 25B4:0101 - FF

25B4:0102 - F3 ....

6) Безпосередні зміни в пам'яті можна зробити за допомогою команди - E (від Enter - увести).

а)Пряме введення даних

- Е 2F32:1007 A4 B7 62 71

Зазначено починаючи з якої адреси будуть заповнюватися осередки пам'яті (0F32:1007) і шістнадцятирічні числа, що будуть записані в ці осередки.

У результаті вміст осередків з адресами 2F32:1007 A4 2F32:1009 62

2F32:1008 B7 2F32:100A 71

Існує ще одна форма прямого введення даних

- E 2F32:1007 "My name"

Рядок символів знаходиться в подвійних лапках. Починаючи з адреси 0F32:1007 у 7 осередків пам'яті будуть занесені ASCII-коди зазначених символів.

б)Уведення з попереднім переглядом

- E 2F32:1007

На екрані з'являється вміст зазначеного осередка пам'яті:

0F32:1007 EB._

Після крапки можна ввести нове шістнадцяткове число або натиснувши пробіл, залишити колишнє. Процес уведення припиняється натисканням клавіші Enter. Цю команду можна використовувати для безпосереднього введення в пам'ять команд машинною мовою.

Наприклад: - E CS:100

Команди будуть заноситися за зсувом 100h від початку сегмента кодів CS.

7) Для пошуку даних у пам'яті використовується команда - S (від Search - шукати).

- S діапазон список

Діапазон вказує область пам'яті, в якій варто робити пошук. Список показує, що варто шукати в цій області. Список задається або в шістнадцятковому виді, або рядком символів.

Приклади:

- S 0 L FFFF "AB"

пошук у найближчому сегменті починаючи зі зсуву 0000 на максимальну довжину FFFF (якщо відомо точну довжину файлу в шістнадцятковому коді, можна замінити нею число FFFF).

- S 0100 0110 41

пошук всіх адрес, по яких розташований байт 41, починаючи зі зсуву 0100 по 0110.

Результат може мати вигляд:

04BA:0104

04BA:0107

Якщо виконується пошук списку більш, ніж з одного символу, то повідомляється адреса початку областей пам'яті, де виявлений цей список.

Таблиця 2.2. Завдання на лабораторну роботу 3

Варіант

Послідовність символів

Варіант

Послідовність символів

1

losing

16

Except

2

blaming

17

build

3

after

18

every

4

yourself

19

broken

5

heap

20

distance

6

winnings

21

watch

7

pitch

22

seconds

8

heart

23

neither

9

doubt

24

knaves

10

allowance

25

common

11

waiting

26

impostors

12

wise

27

virtue

13

hated

28

thoughts

14

nerve

29

crowds

15

sinew

30

master