![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Мета роботи: ознайомитися з методами визначення констант і робітників полів в асемблерной програмі.
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
У лабораторній роботі 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
безпосередній операнд може мати довжину слово (два байти).
При недотриманні цього правила транслятор згенерує повідомлення про помилку.
Дата публикования: 2014-11-04; Прочитано: 681 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!