Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Лабораторна робота № 1. Вивчення відлагоджувача debug





Вивчення відлагоджувача DEBUG

 

МЕТА РОБОТИ: Навчитися відлагоджувати програми за допомогою відлагоджувача DEBUG.

ТЕОРІЯ

Ключі до відлагоджувача DEBUG:

допомога?

ввід команд асемблера A[адреса ]

порівняти C діапазон адрес

отримати байт пам’яті D[діапазон ]

редагувати чарунки пам’яті E адреса [список байт ]

виконати зі вказаної адреси G[=адреса][адреса]

скопіювати М діапазон адрес

вихід Q

зміст регістрів R[регістр]

пошук S

трасування T[=адреса][число повторювань]

дізасемблер U [ діапазон адрес]

ЗАВДАННЯ

Самостійно вивчити відлагоджувач Debug.

Практично продемонструвати роботу з відлагоджувачем DEBUG викладачу.

 


ЛАБОРАТОРНА РОБОТА № 2

Вивчення режимів адресації і8086 та команд пересилання даних

 

МЕТА РОБОТИ: Вивчити режими адресації МП і 8086 та команди пересилання даних, а також навчитися застосовувати отримані знання при написанні програм на мові асемблер.

ТЕОРІЯ

Директива SEGMENT

Директива SEGMENT визначає початок сегменту. Мітка, яка вказується у даній директиві, визначає початок сегменту. Наприклад, директива:

Cseg SEGMENT

Визначає початок сегменту з ім’ям Cseg. Директива SEGMENT може також (необов’язково) визначати атрибути сегмента, включаючи вирівнювання у пам’яті на кордон байта, слова, подвійного слова, параграфа (16 байт) чи сторінки (256 байт). Інші атрибути включають в себе спосіб, за допомогою якого сегмент буде комбінуватися з іншими сегментами з тим же ім’ям та класом сегмента.

Директива ENDS

Директива ENDS визначає кінець сегменту. Наприклад:

 

Cseg ENDS

 

завершує сегмент з ім’ям Cseg, який починався по директиві SEGMENT. При використанні стандартних директив визначення сегментів, ви повинні явним чином завершити кожний сегмент.

Директива ASSUME

Директива ASSUME вказує Турбо Асемблеру, у значення якого сегменту встановлений даний сегментний регістр. Директиву ASSUME CS: потрібно указати у кожній програмі, в якої використовуються стандартні сегментні директиви, бо Турбо Асемблеру необхідно знати про сегмент коду для того, щоб встановити програму яка виконується. Крім того, звичайно використовуються директиви ASSUME DS: та ASSUME ES:, завдяки яким Турбо Асемблер знає до яких чарунок пам’яті ви можете адресуватись у даний момент. Директива ASSUME дозволяє Турбо Асемблеру перевірити допустимість кожного звернення до іменованої чарунки пам’яті з урахуванням значення поточного сегментного регістру. Роздивимось наступний приклад:

 

Data1 SEGMENT WORD ‘DATA’

Var1 DW 0

Data1 ENDS

Data2 SEGMENT WORD ‘DATA’

var2 DW 0

Data2 ENDS

Code SEGMENT WORD ‘CODE’

ASSUME CS:CODE

Program Start:

mov ax,Data1

mov ds,ax; установити DS у Data1

ASSUME DS:Data1

mov ax,[Var2]

; спроба завантажити Var2 у AX

; це призведе до помилки, бо

; Var2 недоступна у сегменті

; Data1

 

Турбо Асемблер відзначає у цій програмі помилку, бо у ній робиться спроба отримати доступ до змінної пам’яті Var2, коли регістр DS встановлений у значення сегменту Data1 (до Var2 неможливо адресуватись, допоки DS не буде встановлений у значення сегмента Data2).

Виділення даних

Тепер, коли відомо, як створювати сегменти, роздивимось, як можна заповнювати ці сегменти усвідомленими даними. Сегмент стеку проблему не являє: там знаходиться стек, а до стеку ви можете звертатися за допомогою інструкцій PUSH та POP та адресуватися через регістр ВР. Сегмент коду заповнюється інструкціями які генеруються згідно з мнемонікою інструкцій вашої програми, тому проблеми тут також немає. Залишається сегмент даних. У Турбо Асемблері передбачена множина способів визначення змінних у сегменті даних, як ініціалізуємих деяким значенням, так і неініціалізованих. Щоб зрозуміти які данні дозволяє вам визначити Турбо Асемблер, ми повинні спочатку трохи розповісти вам про головні типи даних Асемблеру.

Ініціалізовані дані

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

Директиви визначення даних DB, DW, DD, DF, DP, DQ та DT дозволяють нам визначити змінні у пам’яті різного розміру:

 

DB 1 байт

DW 2 байта=1 слово

DD 4 байта=1 подвійне слово

DF, DP 6 байт=1 показник дальнього типу (386)

DQ 8 байт=одне четвертне слово

DT 10 байт

 

Наприклад

 

ByteVar DB ‘Z’; 1 байт

WordVar DW 101b; 2 байта (1 слово)

DwordVar DD 2BFh; 4 байта (1 подвійне слово)

QwordVar DQ 307o;8 байт (одне четвертне слово)

TwordVar DT 100; 10 байт

Date: 2016-05-14; view: 406; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.012 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию