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

Директива визначення байта (db)

З різних директив, що визначають елементи даних, найбільш корисною є DB (визначити байт). Символьний вираз в диpективі DB може містити рядок символів будь-якої довжини, аж до кінця рядка. Об'єктний код показує символи коду ASCII для кожного байта. Наприклад, 20Н представляє символ пробілу.

Числовий вираз в директиві DB може містити одну або більше однобайтових констант. Один байт виражається двома шіст. цифрами.

Найбільше позитивне шест. число в одному байті це 7F,всі «великі» числа від 80 до FF представляють негативні значення.У десятковому численні ці межі виражаються числами +127 і -128.

Директива визначення слова (dw)

Директива DW визначає елементи, які мають довжину в одне слово (два байти). Символьний вираз в DW обмежений двома символами, котрі асемблер представляє в об'єктному коді так, що, наприклад, 'PC' стає 'CP'. Для визначення символьних рядків директива DW має обмежене застосування.

Числовий вираз в DW може містити одну або більше багатобайтових констант. Два байти представляються чотирма шіст. цифрами. Найбільше додатне шіст. число в двох байтах це 7FFF; всі «великі» числа від 8000 до FFFF представляють від’ємні значення. У десятковому численні ці межі виражаються числами 32767 і -32768. Для форматів директив DW, DD і DQ асемблер перетворить константи в шіст. об'єктний код, але записує його в зворотній послідовності. Таким чином десяткове значення 12345 перетвориться в шіст. 3039, але записується в об'єктному коді як 3930.

Директива визначення подвійного слова (dd)

Директива DD визначає елементи, які мають довжину в два cлова (чотири байти). Числовий вираз може містити одну або більше констант, кожна з яких має максимум чотири байти (вісім шіст. цифр).

Найбільше додатне шіст. число в чотирьох байтах це 7FFFFFFF; всі «великі» числа від 80000000 до FFFFFFFF представляють від’ємні значення.

У десятковому численні ці межі виражаються числами +2147483647 і -2147483648.

Асемблер перетворює всі числові константи в директиві DD в шіст. подання, але записує об'єктний код у зворотній послідовності.

Таким чином десяткове значення 12345 перетвориться в шіст. 00003039, але записується в oб'єктному коді як 39300000.

Символьний вираз директиви DD обмежено двома символами.Асемблер перетворює символи і вирівнює їх зліва в чотирьоххбайтовому подвійному слові, як показано в полі FLD2 DD в об'єктних коді.

Директива визначення четвірного слова (dq)

Директива DQ визначає елементи, що мають довжину чотири слова (вісім байт). Числовий вираз може містити одну або більше констант, кожна з яких має максимум вісім байт або 16 шіст. цифр. Найбільше додатне шіст. число - це сімка і 15 цифр F. Для отримання уявлення про величину цього числа покажемо, що шіст. одиниця і 15 нулів еквівалентні наступному десятковому числу: 1152921504606846976.

Асемблер перетворює всі числові константи в директиві DQ в шіст. подання, але записує об'єктний код у зворотній послідовності, як і в директивах DD і DW.

Обробка асемблером символьних рядків у директиві DQ aналогічна директивам DD и DW.

Директива визначення десяти байт (DT)

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

Призначення цієї директиви пов'язане з «упакованими» десятковими числовими величинами.

Згідно з директивою DT генеруються різні константи, залежно від версії асемблера.

Директива EQU

Директива EQU не визначає елемент даних, але визначає значення, яке може бути використане для постановки в інших командах. Припустимо, що в сегменті даних закодована наступна директива EQU:

TIMES EQU 10

Ім'я, в даному випадку TIMES, може бути представлене будь-яким припустимим в асемблері ім'ям. Тепер, в якій би команді або директиві не використовувалося слово TIMES, асемблер підставить значення 10. Наприклад, асемблер перетворить директиву

FIELDA DB TIMES DUP (?) в FIELDA DB 10 DUP (?).

Ім'я, пов'язане з деяким значенням з допомогою директиви EQU, може використовуватися в командах, наприклад:

COUNTR EQU 05 ...

MOV CX, COUNTR

Асемблер замінює ім'я COUNTR в команді MOV на значення 05, будуючи операнд з безпосереднім значенням, якби було б закодовано:

MOV CX, 05 ;асемблер підставляє 05.

Тут перевага директиви EQU полягає в тому, що багато команд можуть використовувати значення, визначене на ім'я COUNTR. У випадку, якщо це значення має бути змінено, то зміні підлягає лише одна директива EQU. Природно, що використання директиви EQU розумно лише там, де підстановка має сенс для асемблера. В директиві EQU можна використовувати символічні імена:

1. TP EQU TOTALPAY

2. MPY EQU MUL

Перший приклад припускає, що в сегменті даних програми визначено ім'я TOTALPAY. Для будь-якої команди, яка містить операнд TP, асемблер замінить його на адресу TOTALPAY. Другий приклад показує можливість використання в програмі слова MPY замість звичайного мнемокода MUL.

4. Структура системи команд

Команди поділяються на такі групи:

º арифметичні;

º логічні;

º передачі даних;

º переходу;

º пропуску;

º виклику підпрограми;

º повернення з підпрограми;

º змішані.

Типи операндів для кожного типу команд обговорюються у відповідному порядку:

º байт;

º слово;

º десятковий операнд;

º розряд;

º число;

º складовий операнд.

Арифметичні команди

До цієї групи включені наступні команди:

• додавання;

• додавання з прапором перенесення;

• віднімання;

• віднімання при перестановці операндів;

• віднімання з прапором переносу (позики);

• збільшення на 1 (інкремент);

• зменшення на 1 (декремент);

• множення;

• ділення;

• порівняння;

• отримання доповнення до двох (від’ємного числа);

• розширення.

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

Логічні команди

Ця група включає наступні команди:

• логічне І

• логічне АБО

• логічне виключаюче АБО

• логічне НЕ (доповнення)

• зсув

• циклічний зсув

• перевірку.

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

Команди передачі даних

Ця група включає команди:

• завантаження;

• запам'ятовування;

• пересилання;

• обміну;

• вводу;

• виводу;

• очищення;

• установки.

Крім того, вона включає арифметичні команди (такі як віднімання акумулятора з самого себе), які заносять певне значення або вміст будь-якого регістра в акумулятор або інший регістр призначення, не змінюючи при цьому даних.

Команди переходу

Ця група включає наступні види переходів:

Команди безумовного переходу

  • Перейти опосередковано;

  • Перейти по індексу, припускаючи, що базова адреса таблиці адрес знаходиться в регістрах Н і L, а індекс в акумуляторі;

  • Перейти і зв'язати, тобто, передати управління за адресою DEST, зберігши поточний стан лічильника команд в регістрах Н і L.

Команди умовного переходу

• Перейти при рівності нулю;

• Перейти при нерівності нулю;

• Перейти, якщо значення рівні;

• Перейти, якщо значення не рівні;

• Перейти, якщо значення додатне;

• Перейти, якщо значення від’ємне;

• Переходи з урахуванням знаку;

• Перейти, якщо більше (без урахування знаку), тобто, якщо операнди не рівні і при порівнянні не потрібно позики;

• Перейти, якщо значення не більше (без урахування знаку), тобто, якщо порівнювані операнди рівні або при їх порівнянні потрібно позику;

• Перейти, якщо значення менше (без урахування знаку), тобто, якщо порівняння без знака вимагає позики;

• Перейти, якщо значення не менше (без урахування знаку), тобто, якщо порівняння без знака не вимагає позики.

Команди пропуску

Команда пропуску може бути виконана за допомогою команди переходу з відповідною адресою призначення. Ця адреса призначення повинна вказувати на команду, наступну після тієї, яка стоїть безпосередньо за командою переходу. Дійсне число байтів, що пропускаються, буде змінюватися, оскільки команди можуть мати довжину 1-3 байти.

Команди виклику підпрограм і повернення з підпрограм

Команда безумовного виклику. Непрямий виклик може бути виконаний за допомогою звернення до проміжної підпрограми, яка опосередковано переходить на підпрограму, що викликається.

Команда умовного виклику.

Умовний виклик підпрограми може бути виконаний за допомогою послідовностей команд для умовного переходу.

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

Команди повернення з підпрограм поділяються на:

• Команди безумовного повернення

• Команди умовного повернення

• Команди повернення з пропуском

• Команди повернення після переривання

Змішані команди. До цієї категорії входять наступні команди:

• немає операції

• запис у стек

• отримання зі стека

• останов

• очікування

• захоплення (програмне переривання)

• інші, що не потрапили в опис раніше, категорії команд.

------------------------------------------------------------------------------------------------------------------------

Ключові моменти

  • Коментар в рядку починається з символу крапки з комою.

  • Є два типи ідентифікаторів: ім'я, що має посилання на адресу елемента даних, і мітка, що посилається на адресу інструкції.

  • Імена - це адреси комірок пам'яті. Під час трансляції асемблер перетворює імена в адреси.

  • Імена елементів даних повинні бути унікальними в межах програми і осмисленими.

  • Директиви (або псевдокоманди) діють тільки в процесі асемблювання і не генерують машинних кодів.

  • Програма складається з одного або більше сегментів, кожен з яких зазвичай починається на межі napaграфа (параметр вирівнювання PARA директиви SEGMENT).

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

  • Директива ASSUME пов'язує сегментні регістри CS, DS та SS з відповідними іменами сегментів.

  • DB (або BYTE) - зручний формат для зберігання символьних рядків, оскільки він дозволяє зберігати рядки довжиною більше двох символів і перетворює їх на нормальну послідовність зліва направо.

  • Десяткові і двійкові (шістнадцяткові) константи генерують різні значення. Порівняйте результати додати десяткового числа 25 та шістнадцяткового 25: ADD CX,25 ; Додаємо 25

ADD CX,25H ; Додаємо 37

  • Для DW, DD і DQ асемблер зберігає байти в об'єктному коді у зворотній послідовності.

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