Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод вказів лаборат роб Опер сист.doc
Скачиваний:
11
Добавлен:
08.02.2016
Размер:
1.41 Mб
Скачать
    1. Лабораторна робота n 3. Визначення даних.

Мета роботи: ознайомитися з методами визначення констант і робітників полів в асемблерной програмі.

КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ

У лабораторній роботі N 1_1 ми задавали необхідні нам дані безпосередньо в команді. Наприклад, ми писали

MOV AX,25

У цьому випадку число 25 стає частиною машинного об'єктного коду.

Такий спосіб представлення даних дометаний, якщо задане число (у нашому випадку 25) зустрічається у Вашій програмі один раз. Якщо ж задане число зустрічається в програмі багаторазово, то повторне завдання його в різних командах приведе до невиправданої витрати оперативної пам'яті. Пам'ять під Ваше число буде виділятися щораз , коли Ви його указывете. Більш дометаним є запис числа в осередок оперативної пам'яті, присвоєння цьому осередку мнемонічного імені, і потім звертання до заданого числа вже по імені. У цьому випадку пам'ять під число буде виділятися один раз.

У тій же лабораторній роботі N 1_1 ми використовували для збереження результатів обчислень (проміжних і остаточних) регістри загального призначення. Такий спосіб є найбільш швидкодіючим. Однак, у регістрах можна зберігати

дуже обмежений обсяг інформації.

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

В Асемблері для опису вихідних даних і робітників областей в оперативній пам'яті служать директиви ВИЗНАЧЕННЯ ДАНИХ.

За допомогою цих директив Ви можете задавати КОНСТАНТИ (числа, значення яких визначаються у вихідному тексті Вашої програми) і ПЕРЕМІННІ (робітники області визначеної довжини, значення яких може змінюватися в процесі роботи Вашої програми).

Основний формат визначення даних

[ім'я] Dn вираження

Ім'я елемента даних не обов'язково, однак, якщо Ви хочете в програмі звертатися до цього елемента, Ви повинні це ім'я вказати. Ім'я задаєте Ви самі за правилами відповідним правилам написання міток (див. лаб. раб. N1_1).

Директиви визначення даних (Dn) можуть використовуватися наступні: DB (байт), DW (слово), DD (подвійне слово), DQ (учетверенное слово) і DT (десять байт).

У поле 'вираження' може знаходитися:

1. Константа.

Наприклад:

ABC DB 25

2. Послідовність констант.

Наприклад:

BCD DB 1,2,3,4,5

Константи в послідовності повинні розділятися комами. Кількість констант у послідовності обмежується довжиною рядка. Ім'я (у нашому приклад BCD) указує на першу константу з послідовності (у нашому прикладі - 1). До другої константи (2) можна звертатися по імені BCD+1, до третин - BCD+2 і так далі.

3. Як вираження може стояти знак питання (?) для невизначеного значення перемееной:

CDE DB (?)

У цьому випадку значення перемінної CDE не привласнюється.

4. Вираження допускає повторення чи константи перемінної в наступному виді

[ім'я] Dn число_повторень DUP (вираження)

наприклад,

DEF DB 10 DUP(?)

Опертор повторення (DUP) може бути вкладеним, наприклад:

EFH DB 10 DUP(4 DUP(2))

У цьому випадку будуть сгенерированы спочатку 4 копії константи 2, а потім це значення повториться 10 разів. У результаті буде сформована послідовність із сорока двійок.

Константа, що задається в поле 'вираження' може являти собою символьний чи рядок числову константу.

СИМВОЛЬНИЙ РЯДОК використовується для представлення тексту. Вона полягає в чи апострофи лапк, наприклад 'Лабораторна робота N 5' чи "Лабораторна робота N 5'

Асемблер переводить кожен символ символьного рядка у відповідний ASCіі-код. Символьний рядок визначається директивою DB, у якій указується більш двох символів у нормальній послідовності ліворуч праворуч.

NAME1 DB 'Лаборатороная робота N 5'

ЧИСЛОВІ КОНСТАНТИ застосовуються для арифметичних значень і для адрес пам'яті. Числова константа вказується в директиві визначення даних безпосередньо, без чи лапк апострофів. Асемблер перетворить усі числові константи в двоичные і записує їх як послідовність байтів у зворотній послідовності - праворуч ліворуч.

Числові константи можуть задаватися в наступних форматах.

ДЕСЯТКОВИЙ ФОРМАТ приймається по допускає десяткові цифри від 0 до 9 і позначається останньою буквою D. Десятковий формат приймається за замовчуванням, тобто якщо ніяка буква після числа не зазначена, те це десятковий формат. Десятковий формат перетвориться Асемблером у двоичный, котрий у листинге записується в шістьнадцятковому форматі.

Наприклад,

NAME2 DB 12D

чи

NAME2 DB 12

ШІСТЬНАДЦЯТКОВИЙ ФОРМАТ допускає цифри від 0 до F і бозначается наприкінці буквою H. Тому що Асемблер думає, що з букви починаються імена, то першою цифрою шістьнадцяткової константи повинна бути цифра від 0 до 9. Якщо Вам потрібно, наприклад, задати константу A0C1H, то можна записати її у вигляді0A0C1H.

NAME3 DB 0CH

ДВІЙКОВИЙ ФОРМАТ допускає цифри 0 і 1 і позначається наприкінці буквою B.

NAME4 DB 11001010B

ВІСІМКОВИЙ ФОРМАТ допускає цифри від 0 до 7 і позначається останньою буквою Q чи O. В даний час вісімковий формат використовується рідко.

NAME5 DB 10Q

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

При завданні символьних рядків і числових констант варто пам'ятати, що, наприклад, '14' і 14 являють собою дві різні константи. Перша перетвориться в два байти ASCіі-кода, що відповідають символам 1 і 4. Друга перетвориться в двійкове число 1110, у шестнадцатиричном представленні 0E.

ДИРЕКТИВА ВИЗНАЧЕННЯ БАЙТА (DB) - визначити байт.Символьне вираження в диретиве DB може містити символьний рядок будь-якої довжини (обмежується тільки довжиною асемблерной рядка). Числова константа в диретиве DB може містити одну чи більш однобайтовых констант. Один байт у листинге представляється двома шістьнадцятковими цифрами. Найбільше позитивне шістьнадцяткове число в одному байті - 7F, усі великі числа від 80 до FF представляють негативні значення. У десятковому форматі ці межі виражаються числами +127 і -128.

Приклади використання директиви визначення байта:

NAME6 DB ?

NAME7 DB 'Завдання N 5'

NAME8 DB 12H

NAME9 DB 112

NAME10 DB 01101100B

NAME11 DB 10,11,12,13,14

NAME12 DB 2 DUP(10)

ДИРЕКТИВА ВИЗНАЧЕННЯ СЛОВА (DW) визначає константи і переменыые имеющие довжину в одне слово - два байти. Символьне вираження в DW обмежено двома символами, що Асемблер переставляє в зворотному порядку. Числове вираження в DW може містити одну чи більш двухбайтовых констант. Два байти представляються чотирма шестнадцатиричными цифрами. Найбільше позитивне шестнадцатиричное число в двох байтах - 7FFF, числа від 8000 до FFFF представляють негативні значення. У десятковому коді ці межі виражаються числами +32767 і -32768. У поле 'вираження' директиви DW може бути підставлене ім'я чи константи перменной, визначеної раніше, наприклад

NAME13 DW NAME8

У цьому випадку під ім'ям NAME13 буде буде сгенерирована константа, рівна адресі (смещнгию) константи NAME8.

Для директив DW, DD, DQ Асемблер перетворить константи в шестнадцатиричный об'єктний код, але записує їх у зворотному порядку проходження байтів. Таким чином, десяткове значення 12345 перетвориться в 3039H, але записується в об'єктному коді як 3930.

Приклади використання директиви визначення слова:

NAME14 DW ?

NAME15 DW 23,64

NAME16 DW '12'

NAME17 DW NAME15

NAME18 DW 0110111100001010B

NAME19 DW 1F0BH

ДИРЕКТИВА ВИЗНАЧЕННЯ ПОДВІЙНОГО СЛОВА (DD) визначає

елементи, що мають у довжину два слова - чотири байти. Розмір числових констант, використовуваних у вираженні не повинний перевищувати чотирьох байт (вісім шестнадцатиричных цифр). Найбільше позитивне шестнадцатиричное число, що може бути використане в директиві DD, - 7FFFFFFF. Діапазон негативних чисел - від 80000000 до FFFFFFFF. У десятковому коді діапазон припустимих чисел у цій директиві - від +2147483647 до -2147483648. Асемблер перетворить усі числові константи в шестнадцатиричное представлення, але записує об'єктний код у зворотній послідовності. Десяткове значення 12345 перетвориться в 00003039H, але записується в об'єктному коді як 39300000. Символьне вираження в директиві DD обмежено двома символами. Асемблер перетворить їх у ASCіі-код і вирівнює їх ліворуч як показано в приведеній нижче рядку листинга

0010 33 32 00 00 NAME20 DD '23'

Приклади використання директиви визначення подвійного слова:

NAME21 DD 1F00FFFFH

NAME22 DD 'AB'

NAME23 DD ?

NAME24 DD 45,47,49

NAME25 DD NAME23-NAME21

ДИРЕКТИВА ВИЗНАЧЕННЯ УЧЕТВЕРЕННОГО СЛОВА (DQ) визначає елементи, що мають довжину чотири слова (вісім байт). Використовувані в директиві числові константи не повинні перевищувати розмір вісім байт. Асемблер перетворить усі числові константи в шестнадцатиричное вираження, але записує їх в об'єктний код у зворотній послідовності. Обробка Асемблером символьних рядків у директиві DQ аналогічна обробці в директивах DW і DD.

Приклади використання директиви визначення учетверен-

ного слова:

NAME26 DQ 245H

NAME27 DQ 100

ДИРЕКТИВА ВИЗНАЧЕННЯ ДЕСЯТИ БАЙТ (DT) визначає елементи даних, що мають довжину десять байт. Призначена в основному для визначення так званих "упакованих десяткових" числових значень. Генерируемый об'єктний код залежить

від версії Асемблера.

Приклади використання директиви визначення десяти байт:

NAME28 DT ?

NAME29 DT '23'

БЕЗПОСЕРЕДНІ ОПЕРАНДЫ.

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

MOV AL, XX

безпосередній операнд, що ми позначили як ХХ, повинний мати довжину один байт, так регістр AL є однобайтовым регістром.

У команді

MOV AX, XX

безпосередній операнд може мати довжину слово (два байти).

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