ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Адресні і числові вирази в мові Асемблер

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

Числовим називається вираз, у результаті обчислення якого утворюється число. Приклад числового виразу в команді пересилання:

MOV AX, 35*2+4

Кожен вираз складається з операторів і операндів.

У виразі допускаються бінарні арифметичні оператори додавання (+), віднімання (-), множення (*), ділення (/), а також унарні оператори плюс і мінус. Крім того існують “буквені” оператори:

MOD – обчислює остачу від ділення лівого операнда на правий;

SHL – здійснює зсув вліво лівого операнда на число біт, що дорівнюють значенню правого операнда;

SHR – здійснює зсув вправо правого операнда на число біт, що дорівнюють значенню лівого операнда.

Арифметичні оператори повинні відокремлюватись від своїх операндів хоча б одним пропуском.

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

- абсолютне число завжди можна додавати або віднімати від змінної, мітки, абсолютного чи переміщуваного числа; коли число додається до змінної (мітки), результатом буде змінна (мітка);

- віднімання змінних і міток дозволяється тільки в тому випадку, якщо вони знаходяться в одному сегменті;

- додавання змінних і міток не дозволяється;

- дозволяється додавання одного базового й одного індексного регістрів, наприклад, [BX+SI]; абсолютні чи переміщувані числа можна додавати або віднімати від регістрів чи виразів, але регістри не можна віднімати від чисел.

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

В Асемблері існують також логічні оператори (табл. 1) і оператори відношення (табл. 2), призначення яких таке ж, як в інших мовах програмування. Особливе призначення має оператор SHORT, який повідомляє транслятору про те, що для збереження остаточного значення виразу буде досить 1 байта.

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

Розглянуті вище оператори в порядку зростання старшинства упорядковуються таким чином:

- оператор SHORT;

- логічні оператори OR і XOR;

- логічний оператор AND;

- логічний оператор NOT;

- оператори відношення;

- оператори додавання і віднімання;

- оператори множення, ділення, обчислення остачі і зміщення.

 

Таблиця 1 - Логічні оператори

 

Оператори Призначення
NOT Повертає результат логічного заперечення заданого значення
AND Повертає результат логічного множення двох заданих значень
OR Повертає результат логічного додавання двох заданих значень
XOR Повертає результат логічної операції виключного АБО над двома заданими значеннями

 

 

Таблиця 2 - Оператори відношення

Оператор Призначення
EQ Повертає 1, якщо два заданих значення дорівнюють одне одному
NE Повертає 1, якщо два заданих значення не дорівнюють одне одному
LT Повертає 1, якщо перше значення менше другого
LE Повертає 1, якщо перше значення не більше другого
GT Повертає 1, якщо перше значення більше другого
GE Повертає 1, якщо перше значення не менше другого

 

 

В Асемблері існують також оператори, що повертають значення (табл. 3) і оператори присвоєння атрибута (табл. 4), призначення яких буде розглянуто пізніше.

 

 

Таблиця 3 - Оператори, які повертають значення

 

Оператор Функція
$ Повертає значення лічильника поточної комірки
SEG Повертає номер блоку адреси змінної або мітки
OFFSET Повертає зміщення адреси змінної або мітки
LENGTH Повертає довжину в одиницях визначення (байтах або словах) будь-якої змінної, при визначені якої була використана директива
TYPE Для змінної оператор TYPE повертає 1, якщо вона має тип BYTE, або 2 (WORD), 4 (DOUBLE WORD). Для міток вона повертає –1 (атрибут NEAR) або –2 (атрибут FAR)
SIZE Повертає добуток LENGTH і TYPE

 

Таблиця 4 - Оператори присвоєння атрибута

 

Оператор Функція
PTR Змінює атрибут типу (BYTE або WORD) або атрибут дистанції (NEAR або FAR) адресного операнда
DS: ES: SS: CS: Змінює атрибут сегмента мітки, змінної або адресного виразу
SHORT Змінює атрибут NEAR мітки команди JMP і вказує, що перехід здійснюється в діапазоні від –128 до 127 байт від наступної команди.
THIS Утворює адресний операнд з атрибутом дистанції (NEAR або FAR), або з атрибутом типу (BYTE або WORD) зі зміщенням, що дорівнює поточному значенню лічильника адреси, і атрибутом поточного сегмента
HIGH Повертає старший байт 16-бітового числового значення або адресного виразу
LOW Повертає молодший байт 16-бітового числового значення або адресного виразу

Директиви Асемблера

Директиви Асемблера керують роботою транслятора, а не мікропроцесора, і, тому, на відміну від команд, більшість директив Асемблера не генерує об'єктного коду.

Коротко розглянемо призначення найпоширеніших директив, що необхідні для написання найпростішої програми на Асемблері.

Як вже відзначалося, програма на Асемблері складається з декількох логічних сегментів. Кожний з них повинний починатися з директиви SEGMENT і закінчуватися директивою ENDS.

В першому рядку програми пишеться директива NAME, що присвоює внутрішнє ім'я об'єктному модулю, який формується в результаті трансляції вихідного модуля програми. Внутрішнє ім'я не пов'язане зі зовнішнім ім'ям файла, що містить програму.

Щоб правильно генерувати машинні команди зі звертаннями до пам'яті, транслятору потрібна інформація про базові значення, завантажені у сегментні регістри. Інформація вмісту сегментних регістрів повідомляється в директиві ASSUME (припустити).

Програми на Асемблері мають великі розміри, тому, її доцільно розбивати на невеликі модулі, що називаються процедурами. Процедура – це послідовність команд, що виконує якусь закінчену дію, наприклад, введення або виведення даних. Процедури в Асемблері за призначенням аналогічні процедурам у Паскалі чи функціям у Сі.

За допомогою директиви PROС відзначається місце входження в процедуру, а директивою ENDP відзначається закінчення процедури. Існує два типи процедур: NEAR і FAR. Якщо зазначений тип NEAR (цей тип приймається за замовчуванням), процедура знаходиться в тому ж сегменті коду, в якому знаходяться всі команди, що викликають дану процедуру. Команда виклику процедури CALL містить мітку однієї з команд процедури; звичайно нею є перша команда процедури, але це необов'язково. Процедура обов'язково містить команду повернення RET, що передає керування в місце виклику процедури. Наприкінці всієї програми обов'язково повинна знаходиться директива END.

 

Режими адресації в мові Асемблера

 

При виконанні будь-якої програми процесор звертається до пам'яті, в якій зберігаються команди і дані. У командах перетворення даних визначаються адреси команд, які вказують місцезнаходження необхідних даних, а в командах передачі керування визначаються адреси команд, яким передається керування, тобто адреси переходів. Спосіб, або метод визначення в команді адреси операнда чи адреси переходу, називається режимом адресації або просто адресацією.

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

- регістрова адресація,

- безпосередня адресація,

- пряма адресація,

- непряма регістрова адресація,

- пряма адресація з базуванням,

- пряма адресація з індексуванням,

- пряма адресація з індексуванням і базуванням.

 

Система команд мікропроцесора Intel 8086

Систему команд мікропроцесора Intel 8086 утворюють більше 100 базових символічних команд. Оскільки багато команд допускають використання різноманітних режимів адресації, загальна кількість генерованих транслятором машинних команд може досягати кількох тисяч.

Всі команди Асемблера зручно розбити на групи: пересилання даних, арифметичні, логічні, зсуву, передачі керування, переривання, керування мікропроцесором.

 

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти