37014

Основи програмування на мові асемблер та знайомство з програмним забезпеченням для виконання лабораторних робіт

Лабораторная работа

Информатика, кибернетика и программирование

Таким чином відрізняють три головних сегмента програми яким відповідають сегментні регістри процесора типу INTEL 8086: CS code segment тобто сегмент інструкцій програми; DS dt segment тобто сегмент даних які визначені користувачем; SS stck segment тобто сегмент стеку. Регістривказівники РВ IP interrupt point – адреса за якою на даний час припинено виконання програми або лічильник команд. Цей регістр безпосередньо зв'язаний з арифметикологічним пристроєм АЛП мікропроцесора який реалізує виконання команд програми на...

Украинкский

2013-09-23

234 KB

8 чел.

Л а б о р а т о р н а    р о б о т а   №1

Основи програмування на мові асемблер та знайомство з програмним забезпеченням для виконання лабораторних робіт

Мета роботи: Знайомство з структурою персонального комп’ютера та основами програмування на мові асемблера. Студенту треба навчитися працювати з програмою-транслятором Turbo-Assembler (TASM) та з засобами для відлагодження асемблерних програм AFD та TD.

Необхідні знання та практичні навички: Знання структури мікропроцесорів сімейства Intel 80х86 [2,4,5,12] та основ програмування на мові асемблер [1,4]. Вміння працювати з інтерфейсом типу Turbo-Vision [7-9]. Студентам обов’язково треба відновити свої знання з таких розділів:

  •  “Поняття про системи числення.”
  •  “Арифметичні дії над числами при їх представлені у двійковій, вісімковій та шістнадцятирічній системах.”
  •  “Переведення чисел з однієї системи числення до іншої.”

  1.  Теоретичні відомості

1.1 Особливості архітектури мікропроцесора типу Intel 80х86

Найважливішою особливістю комп'ютерних систем на основі мікропроцесорів (МП) типу Intel 8086 є сегментна організація пам'яті. Сегментом називається область пам'яті, що починається з адреси, кратної 16, і містить дані однієї структури. Загалом це можуть бути:

інструкція для МП, або коди команд;

дані користувача;

адреси повернення з підпрограм.

Таким чином, відрізняють три головних сегмента програми, яким відповідають сегментні регістри процесора типу INTEL 8086:

CS (code segment, тобто сегмент інструкцій програми);

DS (data segment, тобто сегмент даних, які визначені користувачем);

SS (stack segment, тобто сегмент стеку).

Як вам відомо [1], стеком називається область пам'яті ЕОМ, яка відрізняється організацією доступу до даних, які поступають до стека за принципом «останній ввійшов – перший вийшов». Більш досконало про стекову організацію пам'яті та про програмування стека на апаратному рівні ви дізнаєтесь з теоретичних відомостей до лабораторної роботи №2.

У мікропроцесорі Intel 8086 існує також розширений сегмент ES (extend segment), який ефективно використовується при роботі з рядковими даними. Більш досконало про можливості використання цього сегменту при програмуванні ви дізнаєтесь з відповідного розділу теоретичних відомостей до лабораторної роботи №4.

В програмі, яку обробляє ЕОМ, всі адреси прив'язанні до початку сегмента. Таким чином, адреса осередку пам'яті, до якого звертається процесор, немов би складається з двох частин: старші розряди – адреса сегменту, молодші – адреса зміщення.

Головні регістри МП Intel 8086 та їх призначення

Сегментні регістри CS, DS, SS, ES.

Регістри-вказівники (РВ)

IP (interrupt point) – адреса, за якою на даний час припинено виконання програми, або лічильник команд. Таким чином, повна адреса, за якою розташований код команди, що виконується, може бути записана таким чином: CS:IP.

DI (data interrupt) – відносна адреса, за якою розташована змінна користувача, що використовується програмою на даний час. Таким чином, повна адреса, за якою розташовані дані користувача, може бути записана таким чином: DS:DI. Слід відзначити, що регістр DI використовується також в парі з сегментним регістром ES.

SP (stack pointer)– вказівник стека. Вказує на відносну адресу останньої змінної, що була завантажена до стека. При виконанні команди «вивантажити змінну зі стека» буде вивантажена саме ця змінна.

SI та DI – індексні регістри. Обидва цих регістра можуть бути використані для розширеної адресації та для реалізації арифметичних операцій складання та віднімання. Але головне їх призначення – робота з рядковими даними. При цьому індексний регістр DI пов'язаний з сегментним регістром DS, а індексний регістр SI - з сегментним регістром ES. Більш досконало про операції обробки рядкових даних у мові асемблера можна прочитати в описі лабораторної роботи №4.

Регістри загального призначення (РЗП) та їхні функції

Акумулятор (АХ) 

Акумулятор є головним з регістрів загального призначення. Навіть ті команди процесора, які можуть бути виконані за допомогою інших регістрів, при використанні акумулятора виконуються значно швидше. Цей регістр безпосередньо зв'язаний з арифметико-логічним пристроєм (АЛП) мікропроцесора, який реалізує виконання команд програми на апаратному рівні. Як і всі регістри процесора Intel 8086, акумулятор має 16 розрядів і звертатись до нього на програмному рівні можна через абревіатуру АХ. Можна також заносити числа лише до восьми молодших розрядів акумулятора, звертаючись до них через абревіатуру AL, або до восьми старших, звертаючись до них через абревіатуру АН. Таке ж саме правило діє при звертанні до інших регістрів загального призначення, які будуть розглядатися далі.

Головні функції, які виконуються за допомогою акумулятора у мікропроцесорній системі:

всі арифметичні операції;

всі логічні операції;

всі операції введення/виведення даних;

операції над рядками.

Базовий регістр (BX)

Регістр загального призначення BX є базовим регістром. Це єдиний регістр загального призначення, вміст якого може розглядатися як посилання на відповідну комірку пам'яті при розширеній адресації. Також може бути використаний разом з акумулятором для арифметичних та логічних операцій та проведення обчислень.

Регістр-лічильник (СХ)

Регістр загального призначення СХ – це регістр-лічильник, який є необхідним для керування числом повторень у циклах та при операціях зсування двійкових чисел. Також може бути використаний для арифметичних та логічних операцій та для проведення обчислень.

Регістр даних (DX)

Регістр загального призначення DX – це регістр даних, який застосовується для їх введення та виведення, для обчислень з подвійною точністю, або для операцій над великими числами при недостатній розрядності регістру АХ. Цей регістр також використовується як додатковий при множенні та діленні цілих чисел.

Регістр прапорів, або регістр стану (РС) Дев'ять з 16 біт регістра стану процесора Intel 8086 є активними та визначають стан процесора після виконання останньої команди. Більшість арифметичних та логічних команд, а також команди зрівняння даних змінюють значення прапорів регістра стану. Прапори регістра стану та їх призначення наведені у таблиці 1, а їх побітове розташування у комірках регістра – у таблиці 2:

Таблиця 1. Призначення прапорів регістра стану

Назва прапора

Умовне

п/п

Українською мовою

Англійською мовою

Позна-чення

Що визначає

1

Прапор пере-повнення

Overflow Flag

ОF

Наявність одиниці у цьому біті регістра стану вказує на переповнення старшого біта числа при виконанні арифметичних команд.

2

Вказівник напрямку при виконанні операцій над рядками

Direction Flag

DF

Визначає направлення пересилання або порівняння рядкових даних. При цьому направлення ліворуч відповідає збільшенню, а праворуч – зменшенню адрес комірок пам'яті. Значення 1 для прапора DF відповідає направленню праворуч.

3

Прапор переривань

Interrupt Flag

IF

Наявність одиниці у цьому біті регістра стану вказує на можливість виконання переривань від зовнішніх пристроїв, які маскуються.

4

Прапор знаку

Sign Flag

SF

Визначається знаком останньої арифметичної операції, яка була зроблена процесором (1 – від'ємне число, 0 – додатне число).

5

Прапор нуля

Zero Flag

ZF

Визначається результатом останньої арифметичної операції, яка була зроблена процесором. Нульовий результат обумовлює появу одиниці у цьому біті.

6

Режим трасування (покрокового виконання програми)

Trace Flag

TF

Наявність одиниці у цьому біті регістра стану забезпечує покрокове виконання завантаженої програми, що дозволяє програмісту аналізувати стан всіх регістрів процесора та комірок пам'яті після виконанні кожної асемблерної команди. Цей режим є  дуже важливим при відлагодженні програм, але безпосередньо у програмах загального призначення він практично не використається. Єдиним виключенням є програми-компілятори.

7

Зовнішнє перенесення

Auxiliary Flag

AF

Визначається результатом останньої арифметичної операції, яка була зроблена процесором. Одиниця у цьому біті свідчить про перенесення з 3-го до 4-го біту числа при виконання операцій над 8-бітовими числами. Використовується при виконанні особливих арифметичних перевірок.

8

Прапор перенесення

Carry Flag

CF

Визначається результатом останньої арифметичної операції, яка була зроблена процесором. Одиниця у цьому біті свідчить про перенесення зі старшого восьмого біта при виконанні арифметичних операцій. При виконанні операцій циклічного зсуву до прапора перенесення переходить останній біт числа.

9

Контроль парності числа

Parity Flag

PF

Вказує на парність перших 8 бітів отриманого результату (1-результат є парним, 0 – не парним). Парність у програмуванні та теорії інформації - це кількість одиниць у двійковому числі. Не плутайте цей параметр з визначенням парності у арифметиці! Не плутайте також прапор парності процесора з бітом парності, який використовується для контролю передавання чисельних даних у комп’ютерних системах та мережах.

Завдання для перевірки №1: Порівняйте поняття парності у звичайній та двійковій арифметиці. Наприклад, чи є парним число 3 з точки зору теорії інформації? Наведіть інші приклади парних та непарних чисел.  

Таблиця 2.            Розташування бітів регістра стану мікропроцесора Intel 8086

Номер біта

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Прапор

*

*

*

*

OF

DF

IF

TF

SF

ZF

*

AF

*

PF

*

CF

*  -  біт у процесорі Intel 8086 не задіяний.

1.2 Організація обчислень та узагальнена архітектура комп’ютера IBM PC
Загальна структура комп’ютера 
Як вам відомо, головні компоненти апаратних засобів комп’ютера – це системний блок, клавіатура, пристрій відображення інформації (електронно-променевий або рідинно-кришталевий монітор), дисководи, друкуючий пристрій (принтер), а також різномінітні засоби для асинхронного зв’язку з зовнішніми пристроями та керування програмами для іграшок. Сучасні комп’ютерні системи можуть містити також інші різноманітні периферійні пристрої.
В свою чергу, системний блок складається з системної плати, блока живлення комп’ютера та комірок (слотів) для розміщення додаткових інтерфейс них плат. На системній платі розташовані:
мікропроцесор;
мікросхеми постійної пам’ять (ПЗП), яка містить ядро для початкового завантаження операційної системи та інтерпретатор мови програмування BASIC;
мікросхеми оперативної пам’ять (ОЗП).
Комірки для розміщення додаткових інтерфейс них плат забезпечують підключення пристроїв відображення інформації (моніторів), дисководів всіх типів, каналов телекомунікацій (мережних плат або модемів), додаткової пам’яті та інших різноманітних пристроїв. Така конструкція комп’ютера була запропонована фірмою IBM та отримала назву “принципу відкритої архітектури”. Головною перевагою цього принципу є простота модернізації комп’ютера через підключення до нього нових пристроїв або через заміну застарілих пристроїв на сучасні.
Головною частиною комп’ютера є мікропроцесор, який безпосередньо виконує обробку команд та даних. Як видно з рис. 1, процесор типу Intel 8086 розділений на дві головні частини: операційний пристрій (ОП) та шинний інтерфейс (ШІ). Операційний пристрій безпосередньо виконує команди програми, у той час як шинний інтерфейс підготовлює дані та команди для виконання. Операційний пристрій складається з арифметико-логічного пристрою (АЛП), системи керування (СК) та десяти розглянутих вище регістрів (чотири регістра загального призначення, п’ять регістрів-вказівників та регістр стану). АЛП разом із СК називають виконуючим блоком (ВБ) процесора. Схеми АЛП безпосередньо забезпечують виконання арифметичних та логічних команд на апаратному рівні, в той час як СК, яка зв’язана з регістром стану та з лічильником команд, забезпечує слідкування за логікою виконання
програми при наявності у ній підпрограм або команд вітвлення та циклу. Більш досконало логіка та організація програми будуть розглянуті у лабораторній роботі №3.
Блок керування шиною (БКШ), черга команд та розглянуті нами раніше сегментні регістри складають шинний інтерфейс процесора та виконують три головних функції. По-перше, це передавання даних до ОП процесора, до зовнішніх пристроїв, або до комірок пам’яті ЕОМ. По-друге, як вже відмічалось раніше, через сегментні
регістри здійснюється керування  адресацією оперативної пам’яті комп’ютера.

Завдання для перевірки №2: Назвіть всі сегментні регістри процесора Intel 8086. За адресацію яких сегментів вони відповідають?

Третя функція ШІ – це вибирання команд з оперативної пам’яті комп’ютера. Як відомо, всі команди, які повинні бути виконані програмою, розташовані в оперативній пам’яті комп’ютера. Тому для прискорення роботи процесора вона організована таким чином: ОП та ШІ працюють одночасно, але ШІ попереджує роботу ОП на один крок. ОП “дає знати” ШІ, яка команда буде наступною та з якої комірки оперативної пам’яті треба її вибирати. Таким чином, доки ОП виконує арифметичні та логічні дії над числами, ШІ вибирає з оперативної пам’яті наступну команду або блок команд та завантажує його до верхньої частини черги команд, що значно прискорює роботу комп’ютера. Тому збільшення розміру черги команд – дуже ефективний шлях для підвищення швидкодії процесорної системи. Якщо процесор Intel 8086 мав чергу команд лише на чотири байти, то сучасні процесори мають окремі внутрішні області пам’яті як для збереження кодів команд, так і для збереження даних користувача. Такі осередки пам’яті називаються “кешами” і розмір їх може складати від 64 кБ до 512 кБ. Важливу роль також відіграє швидкість обміну даними між ОП та чергою команд або кешом процесора.
Організація пам’яті комп’ютера 
Загалом пам’ять персонального комп’ютера складається з двох частин: постійної пам’яті (ROM – Read Only Memory) та оперативної пам’яті (RAM – Random Accesses Memory). Пам’ять ROM – це спеціальна мікросхема, до якої занесена програма початкового завантаження операційної системи. Але на теперішній час для цього використовуються не мікросхеми постійних запам’ятовуючих пристроїв (ПЗП), а мікросхеми з електричним записуванням та зтиранням інформації (запам’ятовуючи пристрої, що перепрограмуються). Найбільш цікавою частиною постійної пам’яті з точки зору програмування є базова система введення та виведення даних, або BIOS (Base Input Output System). Ця система налагоджується при збиранні комп’ютера та при підключенні до нього зовнішніх пристроїв, але при необхідності користувач може переналагодити її.
Загалом оперативну пам’ять персонально комп’ютера можна умовно поділити на верхні адреси пам’яті, які використовуються системою BIOS та операційною системою MS-DOS, адреси відеопам’яті та нижні адреси пам’яті, де розташовуються драйвера зовнішніх  пристроїв  та  програми  користувача.    На  рис. 2  наведений  розподіл  адрес пам’яті для мегабайтного адресного простору комп’ютера IBM PC XT [3,4]. Всі адреси на рисунку вказані у десятковій та у шістнадцятирічній формі (шістнадцятирічні числа помічені літерою Н).  Для комп’ютера типа IBM PC AT на базі процесора Intel 80286 з 32-разрядною шиною є можливою адресація 16 Мб оперативної пам’яті, а у комп’ютерах на базі процесора Intel 80386 для режиму реальних адрес пам’яті можлива адресація простору до 4 Гб, а при використанні захищеного режиму роботи процесора - до 64 Гб [2,6]. Якщо розмір оперативної пам’яті комп’ютера є меншим, то процесор може використовувати для тимчасового збереження даних простір вінчестера як віртуальну пам’ять [2].  
1.3 Основи програмування на мові асемблер та її синтаксис. Позначки, коди команд, операнди та директиви

Формат запису команди асемблеру має такий вигляд [4,7-9]:

{позначка:} [асемблерний код команди] {операнди}; {коментарії}
Усі позначки у програмі повинні бути унікальними, і при цьому треба пам’ятати, що асемблер не відрізняє прописні та маленькі літери. При максимальній довжині рядка програми 132 символи (більшість програмістів використовують з них лише 80 відповідно до довжини екрану) максимальна довжина позначки - 31 символ. Позначка (якщо існує), асемблерний код команди та операнд відокремлюються один від одного принаймні одним проміжком або символом табуляції. Коментарі можуть стояти в любому місці асемблерної програми та повинні починатися з символу ; (крапка з комою). Всі символи в рядку асемблерної програми, що стоять праворуч від крапки з комою, вважаються за коментарі. Коментарі можуть містити будь-які друковані символи української або латинської абетки, цифрові та спеціальні символи, включаючи проміжок. Коментар може займати весь рядок або стояти праворуч від асемблерної команди, наприклад:

; Програма виводу даних на друк

ADD AX, BX; Додати два числа, що містяться в регістрах АX та BX   



Зрозуміло, що кількість коментарів ніяк не впливає на складність програми, оскільки вони не відносяться до машинних кодів.

Позначки в асемблері можуть містити такі символи:

1. Англійські літери

A...Z, a...z

2. Цифри

0...9 (не можуть бути першим символом позначки).

3.Спеціальні символи

Знак  питання (?);  

амперсанд(@);

підкреслення ( _ );

долар ($);

крапка (.) (тільки як перший символ позначки).

Також заборонено використовувати як позначки зарезервовані асемблером слова, до яких відносяться коди команд, директиви, імена регістрів тощо. У таблиці 3 наведені приклади вірних та невірних позначок.

Таблиця 3.      Приклади позначок

Приклади вірних позначок

Приклади невірних позначок

CoU

AX

$10

1A

Thislabelisverylongbutcorrect

It_is_a_label

_y_z

@2

.2

M2

Thislabelisverylongandnotcorrect

Це є позначка

It   is  a  label

ADD

Proc

2

2M

!2

2.

Асемблерний код команди вказує транслятору, яку дію треба виконати у даній операції. Це може бути пересилання даних між регістарми процесору, з регістру до пам’яті або навпаки (команда MOV), команди обробки даних, наприклад збільшення чи зменшення на 1 (INC, DEC), додавання (АDD), віднімання (SUB), множення (MUL) або ділення (DIV), команди організації логіки програми, команди переходу на підпрограму та багато інших.

Якщо передбачена робота з даними і кодом команди вони не визначаються, то асемблерна команда завжди містить операнд, який може містити:

  1.  Чисельне значення даних;
  2.  Регістри та комірки пам’яті, над якими буде виконуватись дія, що обумовлюється кодом команди

Приклади асемблерних команд:

CNT DB 10;  Визначити байт пам’яті з назвою CNT та занести до нього число 10.

MOV AL,CNT; Занести до регістру АL число з комірки CNT

ADD AL,12;  Збільшити число, що міститься  у регістрі AL на 12.

INC AL;  Збільшити число у регістрі, що міститься у регістрі AL на 1.

MOV BL,AL;  Переслати дані з регістру AL до регістру BL.

.  RET;   Команда повернення з підпрограми. Операндів не має.

Крім того, асемблер має велику кількість операторів, які дозволяють керувати процесом асемблювання та виведенням початкового тексту програми на друк. Ці оператори називаються псевдокомандами або директивами [4,7-9]. Вони використовуються тільки при асемблюванні програми та не генерують асемблерного коду. Головні з них наведені нижче.

Директива PAGE. Ця директива розміщується на початку програми та вказує на кількість рядків, що друкуються на сторінці, та кількість символів в одному рядку. Формат директиви:

 PAGE [кількість рядків], [кількість символів]

Наприклад, директива

PAGE 50,100

встановлює режим виведення даних на друк 50 рядків на лист при сотні символів в одному рядку. Кількість рядків може бути встановлена у межах 10-255, кількість символів від 60 до 132.

Директиви SEGMENT та ENDS. Як вам вже відомо, будь-яка асемблерна програма має принаймні один сегмент - сегмент коду програми. В більшості програм окремими сегментами виділяються чисельні дані користувача та стек. Сегмент описується за допомогою директиви SEGMENT таким чином:

NSEG  SEGMENT {параметри}

 . . .

 . . . ;    інструкції асемблера

 . . .

NSEG  ENDS

Ім’я сегменту є обов’язковим, мусить бути унікальним та відповідати узгодженням про імена позначок, які наводилися вище. Директива ENDS з тією ж позначкою відповідає кінцю сегмента.

Директива ORG. Ця директива використовується для зміни вмісту лічильника адреси без допомоги асемблерних команд умовного чи безумовного переходу. Найчастіше вживається для встановлення адреси завантаження програми на її початку. Наприклад, директива

ORG  100H  

встановлює лічильник адреси на зміщення 100H (шістнадцятирічне число 100) відносно початку сегменту кода, а директива

ORG  $+10H

збільшує адресу, яка завантажена у лічильник команд, на 10H (шістнадцятирічне число 10).

Директиви PROC та ENDP, команди CALL та RET. Сегмент коду може крім кодів основної програми містити одну чи декілька процедур, які визначаються директивою PROC. В кінці процедури повинні стояти команда RET та директива ENDP. Директива ENDP ставиться для того, щоб транслятор асемблера розпізнав початок та кінець процедури та її обсяг. Виклик процедури здійснюється за допомогою команди CALL. Формат команди:

CALL [ім’я процедури]

При виклику процедури числа, що знаходяться у всіх регістрах процесора, завантажуються до стека, а до лічильника команд завантажується адреса початку процедури. На кінці процедури перед директивою ENDP ставиться команда RET. Результатом її виконання є завантаження вмісту верхніх комірок стеку до регістрів процесора та перехід на точку переривання головної програми. Команда RET може ставитися і в середині процедури, якщо це передбачено логікою програми. Крім того, цією командою здійснюється вихід з асемблерної програми до командного режиму MS-DOS. Таким чином, асемблерна програма, яка містить процедуру, буде мати такий вигляд:

NSEG  SEGMENT;  опис сегменту

NPROC PROC;  опис процедури

   . . .

                         . . .

                         . . .

 RET;    повернення до основної програми

 ENDP;   кінець процедури

  . . .

                        . . .

                        . . .

 CALL  NPROC;

  . . .

                        . . .

 RET;    повернення до MS-DOS

 ENDS;

Директива END. Ставиться останнею у програмі та завершує її. Якщо програма писалася як процедура, директива END містить ім’я процедури як параметр (END {[ім’я процедури]}). Якщо це com-програма і виконується в одному сегменті, параметр не використовується.

1.4. Перетворення програми з тексту на мові асемблера у виконуваний модуль

Для того, щоб програма, написана на мові асемблера, могла бути виконана процесором, вона, як і програма на будь-якій іншій мові, окрім машинної, має бути трансльована (за допомогою асемблера) та скомпонована (за допомогою редактора зв’язків).

Для виконання лабораторних робіт у визначеному нижче вигляді можна застосовувати будь-який асемблер, що використовує синтаксис Intel. Можна використовувати асемблер з іншим синтаксисом, наприклад синтаксисом AT&T, але для цього буде потрібно внести відповідні зміни у наведені нижче приклади та зразки.

Тут ми розберемо послідовність дій, необхідну для трансляції і компонування програм за допомогою транслятора MASM.

Трансляція виконується командою

MASM ім’я_файлу

Інші параметри команди можна подивитися за загальним правилом за допомогою команди

MASM /?

Компонування EXE-програми здійснюється за допомогою команди

LINK об’єктний_модуль

Для компонування COM-програми необхідно додати ключ /TINY:

LINK /TINY об’єктний_модуль

Інші параметри команди можна подивитися за загальним правилом за допомогою команди

LINK /?

Довідку з ассемблера MASM та його мови можна отримати за допомогою команди

QH

1.5. Основи роботи з програмою AFD

Програма AFD дозволяє відлагоджувати програми, які написані на мові асемблеру процесорів Intel 8086 та Intel 80286.

Основні можливості програми AFD:

  1.  Занесення до пам’яті ЕОМ виконуємих модулей та їх дізасемблювання (переведення тексту програми із двійкових машинних кодів на мову асемблера).
  2.  Виконання всієї занесеної програми або її частини.
  3.  Виконання окремих інструкцій програми у покроковому режимі.
  4.   Аналіз стану всіх регістрів процесора та комірок пам’яті прямого доступу.
  5.  Внесення програмістом змін до всіх реєстрів процесора та комірок пам’яті ЕОМ прямого доступу.

Головне меню відладчика AFD (рис. 3) являє собою систему з шести вікон та  командної строки. За допомогою клавіш керування курсором та маркер строки переміщується по вікну програми-дізасемблера, а інші функції виконуються за допомогою  функціональних клавіш  F1...F10 (таблиця 6) та системи команд (таблиця 7).

Головна перевага відладчика AFD - його відносна простота та зручність багатовіконного інтерфейсу. Ці переваги особливо відчутні при відлагодженні невеликих com-модулей. Недоліки цієї програми - неможливість проглядання робочого екрана програми, що виконується, та неможливість одночасного проглядання двох або більшої кількості програм.

Таблиця 6.    Призначення функціональних клавіш системи AFD

Клавіша

Функція  програми

Що виконує

F1

Step

Виконання однієї інструкції програми, відміченої маркером у вікні дізасемблера.

F2

Step Proc

Повне виконання одного рядка програми. Наприклад, якщо це є викликання підпрограми, то вона буде виконана одразу повністю як одна інструкція.

F3

Retrieve

Повторення введених команд командної строки. Можна повторити до шести команд.

F4

Help

Виклик файлу допомоги.

F5

Set BRK

Встановлення точок зупинення.

F6

-

Клавіша незадіяна.

F7

Up

Перенесення маркера догори.

F8

Dn

Перенесення маркера донизу.

F9

Le

Перенесення маркера ліворуч.

F10

Ri

Перенесення маркера праворуч.

Таблиця 7.   Набір головних команд, які підтримуються відладчиком AFD

 Команда

Призначення

1. L ім’я файла {адреса}

Ввести файл до пам’яті ЕОМ. Адреса розміщення може бути вказана явно, але це не обов’язково. По замовченню адреса розташування програми буде CS:0100H.

Число прочитаних байтів після завершення програми вказуєтьсся парою реєстрів BX:CX.

2. W ім’я файла, адреса, довжина

Записати дані до файлу. Початкова адреса повинна знаходитися у сегменті даних DS. Довжина файлу повинна бути у межах чотирьох шістнадцятирічних цифр. Всі параметри команди є обов’язковими.

3. D адреса

Показати коди команд, починаючи з вказаної адреси. Сегмент пам’яті визначається реєстром CS. З цієї ж адреси можна і виконувати програму.

4. R реєстр = значення

Занести число до регістра процесора. Наприклад,          R А=100H - команда заносить до реєстру А число 100H. Якщо набрати R FL=значення - можна завантажити весь реєстр стану як один шістнадцятирічний реєстр. Але є можливим і окремий доступ до бітів реєстру стану через імена OF, DF, IF, SF, ZF, AF, PF, CF.

5. Mn – адреса

Показати перше або друге вікно стану пам’яті (значення параметру n 1 або 2), починаючи з вказаної адреси.

6. G {стартова адреса}, {адреса зупинки}

Виконати програму від стартової адреси до адреси зупинки. Якщо не вказана стартова адреса, то виконання програми почнеться з адреси, на який вона була припинена. Якщо не вказана адреса зупинки, то програма буде виконуватись до першої точки припинення або до кінця. Крім того, можна припинити виконання програми через натиснення клавіш Ctrl+Esc.

7. QUIT {R}

Повернення до DOS. Опція R робить програму afd резидентною.  В цьому випадку її ініциалізація проводиться через натиснення клавіш Ctrl+Esc.

1.6. Основи роботи з програмою TD

Програма TD (turbo-debugger) дозволяє відлагоджувати програми, які написані на мові асемблера мікропроцесорів Intel 8086 - Intel 80486 [8,9]. Ця програма є розробкою фірми «Borland International» та входить до складу пакетів програмування Borland Pascal та Borland C++. Тому інтерфейс програми реалізовано у стандарті Turbo-Vision та відповідає загальному вигляду інтерфейсу цих середовищ, що значно спрощує його вивчення.

Основні можливості програми TD:

1. Занесення до пам’яті ЕОМ виконуємого модуля та його дізасемблювання.

2. Виконання всієї занесеної програми або її частини. Кількість точок перевивань необмежена.

3. Виконання окремих інструкцій програми у покроковому режимі.

4. Аналіз стану всіх реєстрів процесора та комірок пам’яті, до яких є прямий доступ.

5. Внесення програмістом змін до всіх регістрів процесора та комірок пам’яті ЕОМ, до яких є прямий доступ.

6. Проведення одночасного огляду даних, що знаходяться у комірках пам’яті ЕОМ з різними адресами (за допомогою опції меню Add Watch або комбінації клавіш Ctrl+F7).

7. Поглядання робочого екрану програми, що виконується, якщо в ній передбачене

виведення даних на монітор (за допомогою опції меню User Screen або комбінації клавіш Alt+F5).

Головні вікна відладчика TD розташовані на його робочій панелі. Їх розмір може бути зміняний за допомогою миши, якщо це необхідно. Кількість вікон необмежена. Кожне вікно, в якому завантажена програма, розбито на 5 робочих областей. На рис.4 наведена структура вікна. Порядок розташування вікон може бути зміняний за допомогою опцій меню Window або функціональних клавіш, зазначених у таблиці 8.


Таблиця 8.     Опції пункту меню Window системи TD

Опція

Клавіша

Що виконує

Zoom (Z)

F5

Збільшує розмір активного вікна до розміру всієї робочої панелі.

Next (N)

F6

Перехід до наступного вікна.

Next pane (X)

Tab

Перехід до іншої панелі у тому ж робочому вікні.

Size/move (S)

Ctrl+F5

Зміна розмірів вікна та його переміщення.

Close (C)

Alt+F3

Закрити активне вікно

Undo close

Alt+F6

Знову відкрити вікно, яке щойно було закрите

Для аналізу точок припинень зручно користатись пунктом меню Breakpoints,  головні опції якого зазначені у таблиці 9.

Для видалення окремих точок припинень програми треба послідовно виконати такі дії:

1. Звернутися до опції Breakpoints пункту меню View.

2. Коли всі точки припинень будуть висвітлені у окремому вікні, вибрати точку, яку треба видалити, за допомогою клавіш переміщення курсора та .

3. Натиснути клавішу Delete.

4. Повернутися до активного вікна через опцію меню Window або за допомогою миши.

Взагалі функції меню View дозволяють проглянути у повноекранному режимі будь-яку з панелей активного вікна (регістри процесора, сегментні регістри), а також шістнадцятирічні коди інших виконуємих модулей (опція File), таблицю змінних завантаженої програми (опція Variables), зміст програмного буферу (опція Clipboard) тощо. Програмний буфер може бути завантажений через стандартні функції меню Edit Copy та Paste.

Таблиця 9.   Опції пункту меню Breakpoints для системи TD

Опція

Клавіша

Що виконує

Toggle (T)

F2

Зробити точку припинення там, де у даний момент припинено виконання програми.

At

Alt+F2

Задати чисельну адресу точки припинення у шістнадцятирічній формі у форматі CS:IP.

Delete All

-

Видалити всі точки переривань.

Iconize/restore

-

Використання цієї опції меню приводить до звертання вікна. Повторне її використання знову відкриває вікно.

Пункт головного меню Data призначений для безпосередньої роботи з даними користувача та з комірками пам’яті та іменами змінних. Він містить функції, зазначені у таблиці 10. Призначення усіх функціональних клавіш у програмі TD наведене у таблиці 11.

Таблиця 10.    Опції пункту меню Data для системи TD

Опція

Клавіша

Що виконує

Inspect

-

Поглядання значення заданої змінної або комірки пам’яті

Evalute/modify

Ctrl+F4

Обчислення значення виразу

Add Watch

Ctrl+F7

Поглядання значень змінних у окремому вікні

Function return

-

Адреси повернення функцій та процедур

Таблиця 11.   Призначення функціональних клавіш у  програмі TD

Клавіша

Призначення

F1

Допомога.

F2

Зробити точку зупинки там, де у даний момент припинено виконання програми.

F3

Поглядання початкового коду завантаженої програми.

F4

Перехід до рядка, на якому програма була припинена.

F5

Збільшення розміру активного вікна до розміру всієї робочої панелі.

F6

Перехід до наступного вікна.

F7

Покрокове виконання програми. При переході на процедуру буде покроково виконана кожна команда процедури.

F8

Покрокове виконання програми. Команда виклику процедури виконується як одна команда.

F9

Запуск програми на розрахування.

F10

Перехід до верхнього рядка меню.

2. Порядок виконання роботи

1. Знайти транслятор і файли afd.exe та td.exe.

  1.  Проаналізувати текст програми lab1.asm, зрозуміти зміст кожної з асемблерних команд. З’ясувати, як будуть змінюватися дані всіх регістрів процесору при виконанні кожної з них. Текст програми повинен мати такий вигляд:


text SEGMENT

ORG 100h

begin: MOV ax,20

MOV bx,30

ADD ax,bx

MOV cx,ax

ADD ch,16

RET

text ENDS

END begin

  1.  Сформувати лістинг, об’єктний та виконуваний код для програми lab1.asm; останній записати у файл lab1.com.
  2.  Запустити програму lab1.com на обробку. Переконайтеся в тому, що вона коректно виконується (комп’ютер не «підвісає»).
  3.  Завантажити програму lab1.com до відладчика AFD та крок за кроком виконати всі її команди. Після виконання кожної команди аналізувати стан кожного з регістрів процесора.
  4.  Завантажити програму lab1.com до відладчика TD та крок за кроком виконати всі її команди. Після виконання кожної команди аналізувати стан кожного з регістрів процесора.

3. Зміст звіту

1. Послідовність дій, які потрібно виконати для компіляції асемблерної програми. Розглянути два випадка: компіляцію com-програми та компіляцію exe-програми.

2. Таблиця з трьох колонок. До першої занести початковий код асемблерної програми файлу lab1.asm, до другої - її машинні коди, а до третьої - стан усіх регістрів процесору після її виконання.

3. Висновки за роботою.

4. Контрольні питання:

  1.  Узагальнена структура мікропроцесора Intel 8086 та персонального комп’ютера IBM PC.
  2.  Що таке початкова та об’єктна програма?
  3.  Структурна схема гіпотетичного мікропроцесора, призначення всіх його регістрів.
  4.  Основні регістри процесору типа Intel 8086, їх призначення.
  5.  Сегментація програми. Сегменти коду, даних та стеку. Їх розташування в пам’яті ЕОМ. Директиви мови асемблера SEGMENT та ENDS.
  6.  Організація стекової пам’яті та її призначення.
  7.  Регістр стану процесора. Його призначення. Біти регістра стану у процесорі Intel 8086.
  8.  Режим трасування програми. Як він встановлюється і для чого використовується?
  9.  Поясніть приклади позначок та приклади асемблерних команд, які наведені у теоретичній частині цієї роботи. Наведіть свої приклади.

10. Чи потрібно аналізувати регістр стану при виконанні команд програми lab1.asm? Чому?


РЗП

ОП

AH

L

BH

BL

CH

CL

DH

DL

РВ

SP

BP

SI

DI

ВБ

АЛП

СК

РС

IP

Керування програмами

CS

DS

SS

ES

Керування

шиною

Черга команд

1

2

3

4

Рис.1 Узагальнена схема мікропроцесора Intel 80х86.

ШІ

984 кб

F6000H

800 кб

C8000H

768 кб

С0000Н

Відеопамять кольорового монітора у текстовому режимі

736 кб

В8000Н

Відеопамять монохром-ного монітора у текстовому режимі

704 кб

B0000H

640 кб

А0000Н

Файли даних, які задіяні програмою користувача

Резидентні програми

Програма користувача

Префікс програмного

сегменту (PSP)

Область даних BIOS

Драйвера пристроїв MS-DOS

Мегабайтний простір адрес

Память, яка адреується операційною системою MS-DOS

0000

1 кб

00400H

Таблиця векторів переривань

Незавантажена область памяті

Графічна відеопамять

монітора  EGA

BIOS відеоадаптера

ПЗП фіксованого диска

Бейсик-интерпретатор ПЗП

BIOS ПЗП

Рис. 2 Розподіл памяті компютера IBM PC XT

Рис. 3. Загальний вигляд інтерфейсу програми AFD.

Регістри загального призначення, вказівники та сегментні регістри 

Стек

Регістр стану процесору

Командна строка

Асемблерний код завантаженої програми

Перше вікно памяті

Друге вікно памяті

Верхній рядок меню

Нижній рядок меню (призначення клавіш F1-F10)

Робоча панель

Панель 1

Асемблерний код завантаженої програми

Панель 2

Регістри загального призначення

 

Вказівники та сегментні регістри

Панель3

Регістр стану процесора

Панель 4

Комірки пам’яті, що відповідають сегменту даних

Панель 5

Комірки пам’яті, що від-повідають сегменту стека

Активне вікно

Рис 4. Загальний вигляд інтерфейсу програми TD.


 

А также другие работы, которые могут Вас заинтересовать

9283. Асептика. Основные принципы асептики. Хирургическая инфекция 15.67 KB
  Лекция №2 Асептика. Основные принципы асептики. Хирургическая инфекция. Впервые термин асептика ввел английский военный хирург Роберт Прингл в 1750г. Асептика - это комплекс мероприятий, Основные меры профилактики развития инфекционного проце...
9284. Антисептика 21.68 KB
  Лекция №3 Антисептика Термин был предложен 1750 г. Английским хирургом Дж. Принглом Антисептика - противогнилостный метод работы Еще в древности медики эмпирически пришли к выводу о необходимости обеззараживания ран Применяли прижига...
9285. Местная анестезия 17.05 KB
  Лекция №4 Местная анестезия В 1855 году австриец привез листья коки, его жевали и получали удовольствие. Кокаин – родоначальник местной анестезии. Египет –- мрамор+уксус. Сдавливание нервов. Дхлаждение кожи. Эфир. Баллон Ричардсона...
9286. Понятие боли. Общее обезболивание. Подготовка больных к наркозу 19.24 KB
  Лекция №5 Понятие боли. Общее обезболивание. Подготовка больных к наркозу. Боль - сторожевой пес здоровья. Ноцицепция: ноцирецепторы - рецепторы - воспринимают болевые ощущения. Раздражители: механические, термические, химические. При...
9287. Техника проведения наркоза. Осложнения наркоза 20.07 KB
  Лекция № 6 Техника проведения наркоза. Осложнения наркоза. Общая анестезия. Подготовка. Полное обследование Оценка общего состояния (риск операции и наркоза) Психологическая Медикаментозная Подготовка ЖКТ Премедик...
9288. Терминальные состояния 20.8 KB
  Лекция № 7 Терминальные состояния Реаниматология - наука о закономерностях угасания жизни, оживления организма, профилактике и лечении терминальных состояний. Интенсивная терапия - это лечение больного, находящегося в терминальном состояни...
9289. Методы сердечно-легочной реанимации 24.76 KB
  Лекция № 8 Методы сердечно-легочной реанимации Актуальность: Эффективность сердечно-легочной реанимации зависит от своевременности оказания медицинской помощи При начале реанимационных мероприятий после наступления клинической смерти. Для констатац...
9290. Кровотечение. Реакция организма на кровопотерю 21.25 KB
  Лекция №9 Кровотечение. Реакция организма на кровопотерю. Петехия - небольшое кровоизлияние в кожу. Пурпуре – кровоизлияние в слизистые оболочки. Экхимозы - обширное кровотечение в кожу или слизистые. Гематома - ограничивание кро...
9291. Переливание крови и ее компонентов 21.79 KB
  Лекция №10 Переливание крови и ее компонентов Трансфузиология - это раздел клинической медицины, изучающий вопросы переливания у человека крови и ее препаратов, а также крове- и плазмозамещающих жидкостей с лечебной целью. Кровь - одна из...