Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л.р.1-12.СПРГ-1(40, укр).doc
Скачиваний:
5
Добавлен:
27.08.2019
Размер:
2.33 Mб
Скачать

3.1 Команди пересилання даних.

Мікропроцесори Intel допускають різні способи адресації. Основним інструментом ініціалізації і зміни значення в регістрах і комірках пам'яті служить команда mov, що має наступний формат:

mov <destination, source>

де destination - приймач даних; source - джерело даних.

Як приймач і джерела можуть виступати регістри МП (reg) і комірки ОЗП (mеm). Припустимі комбінації:

mov reg, reg;

mov reg, [mem];

mov [mem], reg.

Комбінація mov [mem], [mem] заборонена.

Якщо операнд - це дані в пам'яті, адресу цих даних (також будь-якого числового вираження, але воно може містити регістри) повинний бути укладений у квадратні дужки або випереджений оператором “ptr”.

Наприклад:

- інструкція “mov еах,3” помістить число 3 у регістр еах;

- інструкція “mov еах,[7]” помістить 32-бітне значення з адреси 7 в еах;

- інструкція “mov byte [7],3” помістить число 3 у байт за адресою 7, це можна записати ще так: “mov byte ptr 7,3”.

Для того, щоб установити, який сегментний регістр буде використовуватися для адресації, потрібно поставити його назву з двокрапкою перед адресою усередині квадратних дужок або після оператора “ptr” (таблиця 3).

Обмін умісту комірки пам'яті або регістра з регістром:

xchg <destination, source>

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

3.1.1 Опис даних. Дані в пам'яті зберігаються побайтно, адресою змінної буде адреса самого молодшого її байта, т. зв. зворотний порядок або little indian. У програмі під дані необхідно визначити сегмент даних.

Щоб описати дані або зарезервувати для них місце в пам'яті, використовуйте одну з директив, перерахованих у таблиці 3. За директивою опису даних повинне іти одне або кілька числових значень, розділених комами. Ці вирази визначають значення для найпростіших елементів даних, розмір яких залежить від того, яка директива використовується. Наприклад, db 1,2,3 описує три байти зі значеннями 1, 2 і 3 відповідно.

Таблиця 3. Синтаксис директиви визначення даних

Розмір,

байт

Модифікатор

Визначення

даних

Резервування

даних

1

byte

db, file

rb

2

word

dw, du

rw

4

dword

dd

rd

6

fword, pword

dp, df

rp, rf

8

qword

dq

rq

10

tbyte, word

dt

rt

16

dqword

Директиви du і db описують рядки будь-якої довжини, укладені в лапки, що будуть конвертовані в послідовність байтів, якщо використано директиву db, або в послідовність слів з нульовим верхнім байтом, якщо використано директиву du.

Наприклад,

db abc визначає три байти зі значеннями 61, 62 і 63,

db ’1,2,3’ визначає масив із трьох байт зі значеннями 1, 2 і 3.

Директива dp або її синонім df допускають, щоб значення складалися з двох числових виразів, розділених двокрапкою, де перше значення - це верхнє слово, а друге - це нижнє подвійне слово значення далекого вказівника. Директива dd допускає такі покажчики, що складаються з двох слів, розділених двокрапкою, і dt допускає слово і четверне слово, розділені двокрапкою, четверне слово запам'ятовується першим. Директива dt з одним параметром допускає тільки значення з крапкою, що плаває, і створює дані в FPU-форматі подвійної розширеної точності.

Усі перераховані вище директиви підтримують використання спеціального оператора dup для створення копій даних значень. Кількість дублікатів повинна стояти перед цим оператором, а їхнє значення повинне стояти після - це може бути навіть ланцюжок значень, розділених комами, але цей ланцюжок повинний бути укладений у дужки, наприклад, db 5 dup (1,2) визначає п'ять копій даної послідовності з двох байтів.

file - це спеціальна директива і її синтаксис може бути різним. Ця директива включає ланцюг байтів з файлу. Як параметр за нею повинно йти в лапках ім'я файлу, далі, опціонально, двокрапка і числовий вираз, що вказує початок ланцюжка байтів, далі, також опціонально, кома і числовий вираз, що визначає кількість байтів у цьому ланцюжку (якщо цей параметр не визначений, то будуть включені всі дані до кінця файлу). Наприклад, file ’data. bin’ уключить весь файл як двійкові дані, a file ’data. bin’: 10h,4 уключить тільки чотири байти, починаючи зі зсуву 10h.

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

Усі директиви опису даних також підтримують значення “?", що виходить, що цій комірці не повинне бути привласнене якесь значення. Ефект від цієї директиви такий же, як від директиви резервування даних. Неініціалізовані дані не можуть бути включені у файл виводу, і, таким чином, їхні значення завжди будуть вважатися невідомими.

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

Визначення константи складається з імені константи, знака “=” і числового виразу, що після обчислення стає значенням константи. Це значення завжди обчислюється в той же час, що і визначення константи.

Наприклад, за допомогою директиви count =17 ви можете визначити константу count і після використовувати неї в інструкціях асемблера, таких як mov cx, count - яка перетвориться в mov cx,17 під час процесу компіляції.

3.1.3 Мітки. Існують різні способи визначення міток. Найпростіший з них - двокрапка після назви мітки. За цією директивою на тім же рядку навіть може іти інша інструкція. Вона визначає мітку, значення якої дорівнює зсувові точки, у якій вона визначена. Цей метод звичайно використовується, щоб позначити місця в коді. Наприклад, start:, endloop:.

Інший спосіб - це проходження за ім'ям мітки (без двокрапки) якої-небудь директиви опису даних. Мітці привласнюється значення адреси початку визначених у директиві даних і запам'ятовується компілятором як мітка для даних з розміром комірки. Наприклад, bigdata dd 32.

Самий гнучкий спосіб завдання міток - це використання директиви label. За цією директивою повинне іти ім'я влучні, далі, опціонально, розмір оператора (може випереджатися двокрапкою), і далі, також опціонально, оператор at і числовий вираз, що визначає адресу, на який дана мітка повинна посилатися.

Наприклад, label wchar word at char, визначає нову мітку для 16-бітних даних за адресою char. Тепер інструкція mov ах,[wchar] після компіляції буде виглядати так само, як mov ax, word [char]. Якщо адреса не зазначена, директива label буде посилатися на поточну адресу. Таким чином, mov [wchar],57568 скопіює два байти, тоді як mov [char],224 скопіює один байт на ту ж адресу.

Мітка, ім'я якої починається з точки (.), обробляється як локальна, і її ім'я прикріплюється до імені останньої глобальної мітки (з назвою, що починається з чого завгодно, крім точки) для створення повного імені цієї мітки. Так, ви можете використовувати коротке ім'я (що починається з точки) де завгодно перед наступною глобальною міткою, а в інших місцях вам доведеться користуватися повним ім'ям.

Мітки, що починаються з двох точок (..) – виключення, вони мають властивості глобальних, але не створюють новий префікс для локальних міток.

@@ позначає анонімну мітку, ви можете визначити її безліч разів. Символ @b (або еквівалент @r) посилається на найближчу попередню анонімну мітку, а символ @f посилається на найближчу після неї анонімну мітку. Ці спеціальні символи нечуттєві до регістра.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]