Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekz._6.doc
Скачиваний:
6
Добавлен:
11.08.2019
Размер:
180.74 Кб
Скачать

Директива assume

Процесор використовує регістр SS для адресації стека, регістр DS для адресації сегмента даних і регістр CS для адресації cегмента коду.

ASSUME SS: ім’я_стека, DS: ім’я_с_данних, CS: ім’я_с_кода

Асемблеру необхідно повідомити про призначення кожного сегмента. Для цієї мети служить директива ASSUME, яка кодується в сегменті коду таким чином:

Наприклад, SS: імя_стека вказує, що асемблер повинен асоціювати ім'я сегмента стеку з регістром SS. Операнди можуть записуватися в будь-якій послідовності. Регістр ES також може бути присутнім в числі операндів. У випадку, якщо програма не використовує регістр ES, то його можна опустити або вказати ES:NOTHING.

Директива END

END [ ім'я _процедури]

Директива ENDS завершує сегмент, а директива ENDP завершує процедуру. Директива END у свою чергу повністю завершує всю програму:

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

Директиви визначення даних

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

Іншим способом визначення константи є безпосереднє значення, тобто, вказане прямо в асемблерній команді, наприклад: MOV AL, 20H.

У цьому випадку шістнадцяткове число 20 стає частиною машинного об'єктного коду. Безпосереднє значення обмежено oдним байтом або одним словом, але там, де воно може бути застосоване, воно є більш ефективним, ніж використання конcтанти.

[ім'я] Dn вираз

Асемблер забезпечує два способи визначення даних: по-перше, через зазначення довжини даних і, по-друге, за їхнім змістом. Розглянемо основний формат визначення даних:

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

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

Вираз може містити константу, наприклад: FLD1 DB 25 або знак питання для невизначеного значення, наприклад: FLDB DB ?

Вираз може містити кілька констант, розділених комами і обмеженими тільки довжиною рядка: FLD3 DB 11, 12, 13, 14, 15, 16, ...

Асемблер визначає ці константи у вигляді послідовності cуміжних байт.

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

Посилання на ім'я FLD3 вказує на першу константу, 11, на FLD3+1 - на другу, 12. (FLD3 можна представити як FLD3+0). Наприклад команда MOV AL,FLD3+3 завантажує в регістр AL значення 14 (0EH). Вираз допускає також повторення константи в такому форматі:

Наступні три приклади ілюструють повторення:

DW 10 DUP(?) ; Десять невизначених слів

DB 5 DUP (14) ; П'ять байт, що містять шіст.14

DB 3 DUP(4 DUP(8)) ; Дванадцять вісімок

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

Вираз може містити символьний рядок або числову константу.

Символьні рядки

Символьний рядок використовується для опису даних, таких як, наприклад, імена людей або заголовки сторінок. Вміст рядка відмічається одиночними лапками, наприклад, 'PC' або подвійними лапками - "PC".

Асемблер переводить символьні рядки в об'єктний код в звичайному форматі ASCII.

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

Числові константи

Числові константи використовуються для арифметичних величин і для aдрес пам'яті. Для опису константи лапки не ставляться. Асемблер перетворює всі числові константи в шістнадцяткові і записує байти в об'єктному коді у зворотній послідовності - справа наліво. Нижче показані різні числові формати.

Десятковий формат. Десятковий формат допускає десяткові цифри від 0 до 9 і позначається останньою буквою D, яку можна не вказувати, наприклад, 125 або 125D. Незважаючи на те, що асемблер дозволяє кодування в десятковому форматі, він перетворює ці значення в шістнадцятковий об'єктний код.Наприклад, десяткове число 125 перетвориться в шіст.7D.

Шістнадцятковий формат. Шістнадцятковий формат допускає шіст. цифри від 0 до F і позначається останньою буквою H.

Оскільки асемблер вважає, що на літеру починаються ідентифікатори, то першою цифрою шіст. константи повинна бути цифра від 0 до 9. Наприклад, 2EH або 0FFFH, які асемблер перетворює відповідно в 2E і FF0F (байти в другому прикладі записуються в об'єктний код у зворотній послідовності).

Двійковий формат. Двійковий формат допускає двійкові цифри 0 та 1 і позначається останньою літерою B. Двійковий формат звичайно використовується для більш чіткого уявлення бітових значень в логічних командах AND, OR, XOR і TEST. Десяткове 12, шіст. C і двійкове 1100B всі генерують один і той же код: 0CH або двійковий 0000 1100 залежно від того, як ви розглядаєте вміст байта.

Вісімковий формат. Вісімковий формат допускає вісімкові цифри від 0 до 7 і позначається останньою буквою Q або O, наприклад, 253Q. На сьогодні вісімковій формат використовується дуже рідко.

Десятковий формат з плаваючою точкою. Цей формат підтримується тільки асемблером МASM.

Під час запису символьних і числових констант слід пам'ятати, що, наприклад, символьна константа, визначена як DB '12 ', представляє символи ASCII і генерує 3132Н, а числова константа, визначена як DB 12, представляє двійкове число і генерує 0CН.

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