Читайте также: |
|
Ця частина описує директиви Асемблера, які дозволяють керувати процесом компіляції. Повний перелік директив Асемблера займає 65 сторінок, тому в даному розділі наводяться найбільш уживані й необхідні директиви.
ORG VALUE
Установлює адресу програми. Якщо директива не виконана, адреса за замовчуванням установлюється в 0000.
END VALUE
Ця директива відзначає кінець програми або підключеного файлу. Вираз, що є наступним за END – додатковий, і якщо існує, то зазначає стартову адресу програми. Вона заноситься у вихідний файл, якщо у вихідному форматі існує тип запису стартової адреси.
LABEL: DB VALUE
Асемблер поміщає величини в послідовні комірки пам'яті. Якщо після директиви не випливає вираз, один байт резервується й обнуляється. Мітка є необов'язковою.
LABEL: DW VALUE
Ця директива поміщає 16-бітні величини у пам’ять. Кілька слів можуть бути задані, якщо записати кілька виразів через кому. Якщо виразу немає, резервується й обнуляється одне слово. Мітка не є обов'язковою.
LABEL: LONG VALUE
Ця директива поміщає 32-бітні величини у пам’ять. Кілька слів можуть бути задані, якщо записати кілька виразів через кому. Якщо виразу немає, резервується й обнуляється одне слово. Мітка не є обов'язковою.
LABEL: DS SIZE,VALUE
Ця директива резервує фіксоване число байтів, обумовлене величиною
SIZE. Ніякі величини не запам'ятовуються в резервованій області. LABEL: EQU VALUE
Привласнює імені LABEL значення VALUE. VALUE може бути іншим символом або дозволеним математичним виразом.
LABEL: VAR VALUE
Привласнює імені LABEL значення VALUE, але значення може змінюватися за текстом програми. Ім'я, певно як VAR, не слід перевизначати директивою EQU.
|
використовується за замовчуванням) режиму (тобто з основою системи числення 10); при цьому мається на увазі, що всі інші системи числення будуть позначатися за допомогою літер B, Q, D або H після константи. Слід зазначити, що при завданні основи системи числення 16 не існує способу опису десяткового або двійкового числа, оскільки як літера D, так і літера B є припустимими шістнадцятковими цифрами.
INCLUDE <ім'я-файлу>.
Указує асемблеру включити даний файл у процес асемблювання. Імена файлів можуть містити в собі маршрутні імена. Розширення імен повинні задаватися повністю. Вкладене включення файлів не допускається.
6.4. Обчислення під час транслювання
Поданий далі список містить перелік обчислювальних операцій, припустимих у період асемблювання. Зазначені також рівні їх пріоритетів. Операції, які мають рівень пріоритетів 7, повинні бути виконані в першу чергу. Для зміни порядку виконання обчислювальних операцій можуть використовуватися круглі дужки. Обчислення здійснюються за допомогою 80-і розрядних цілих чисел за винятком операцій піднесення у степінь, в яких використовується 8-і розрядне значення показника степеня. Максимальна кількість незавершених операцій дорівнює 16.
Таблиця 6.1
Перелік обчислювальний операцій при асемблюванні програм
Операція | Пріоритет | Опис |
Унарний + | Може задавати позитивний операнд | |
Унарний - | Змінює знак наступного виразу | |
\ або.NOT. | Інвертує (доповнює) наступний вираз | |
Унарний > | Зберігає старший байт наступної адреси. Повинна використовуватися для отримання значень адрес байтів, що переміщаються |
Закінчення табл. 6.1
Унарний < | Зберігає молодший байт наступної адреси. Повинна використовуватися для отримання значень адрес байтів, що переміщаються | |
** | Беззнакове піднесення у степінь | |
* | Беззнакове перемножування | |
/ | Беззнакове ділення | |
.MOD. | Обчислення залишку | |
.SHR. | Зрушення попереднього виразу праворуч (із заповненням нулями) на кількість позицій, заданих наступним виразом | |
.SHL. | Зрушення попереднього виразу ліворуч (із заповненням нулями) на кількість позицій, заданих наступним виразом | |
+ | Додавання | |
- | Віднімання | |
&або.AND. | Логічне І | |
або.OR. | Логічне АБО | |
.XOR. | Логічне, що виключає АБО |
6.5. Порівняння під час транслювання
У поданому далі списку наводяться операції порівняння періоду асемблювання, що повертають значення «всі одиниці» (якщо висловлення є істинним) або «всі нулі» (якщо висловлення є неправильним).
Операції порівняння періоду асемблювання програм
Таблиця 6.2
Операція | Опис | |
= або | .EQ. | Дорівнює |
> або | .GT. | Більше ніж |
< або | .LT. | Менше ніж |
.UGT. | Беззнакове більше ніж | |
.ULT. | Беззнакове менше ніж |
6.6. Повідомлення про помилки асемблювання
SYNTAX ERROR. (Синтаксична помилка). Звичайно ця помилка виникає через пропущену кому або круглу дужку.
CAN'T RESOLVE OPERAND. (Неможлива ідентифікація звертання до операнду). Незрозуміло, що в цьому випадку передбачалося програмістом.
ILLEGAL ADDRESSING MODE. (Неправильний режим адресації). Адресація операнда з використанням даної форми адресації неприпустима.
ILLEGAL ARGUMENT. (Неправильний аргумент). У даному контексті операнд не може бути використаний.
MULTIPLY DEFINED SYMBOL. (Символ уже описаний). Даний символ уже описаний раніше (не включаючи '.VAR').
ILLEGAL MNEMONIC. (Неправильне мнемонічне позначення). Дане мнемонічне позначення не існує і не було використано для завдання макросу.
# TOO LARGE. (Число занадто велике). Результат занадто великий для даного операнда.
ILLEGAL ASCII DESIGNATOR. (Неправильний код таблиці ASCII).
Неправильний символ пунктуації або код таблиці Ascii.
HEX # AND SYMBOL ARE IDENTICAL. (Шістнадцяткове число й символ є ідентичними). Існує деяка мітка, яка в точності ідентична шістнадцятковому числу, використовуваному в якості операнда. Для того, щоб виникла ця помилка, навіть індикатор шістнадцяткового числа повинен бути на тій самій позиції.
UNDEFINED SYMBOL. (Символ не визначено). Символ не був описаний у період виконання першого проходу асемблера.
RELATIVE JUMP TOO LARGE. (Занадто далекий відносний перехід). Результуюча адреса переходу перебуває на іншій сторінці.
EXTRA CHARACTERS AT END OF OPERAND. (Наприкінці операнда присутні зайві символи). Звичайне виникнення цього повідомлення пов'язано з наявністю синтаксичної помилки або помилки формату.
Примітка: дана помилка виникає при останній перевірці якої-небудь команди перед тим, як Асемблер переходить до наступного рядка, і вона позначає, що після припустимого символу завершення операнда знаходяться зайві символи.
LABEL VALUE CHANGED BETWEEN PASSES. (Значення мітки змінилося між проходами Асемблера). Значення символу (ідентифікатора), декодоване в період виконання проходу 1, не дорівнюється виявленому при виконанні проходу 2.
Примітка: ця помилка звичайно виникає в тому випадку, коли Асемблер обробляє інші частини програми при виконанні проходу 1 у порівнянні із проходом 2 через зміну значень аргументів директив умовної компіляції. Для виявлення подібних типів помилок може виявитися корисною директива PASS1 ON/OFF.
ATTEMPTED DIVISION BY ZERO. (Почата спроба ділення на нуль). При виконанні ділення дільник дорівнює 0.
ILLEGAL EXTERNAL REFERENCE. (Неправильне зовнішнє посилання). У даному контексті зовнішнє посилання використовуватися не може.
NESTED CONDITIONAL ASSEMBLY UNBALANCE DETECTED. (Виявлено
дисбаланс при аналізі вкладених структур асемблера). Виявлено яку-небудь директиву класу '.IF', котрий не відповідає парна директива '.ENDIF'.
ILLEGAL REGISTER. (Неприпустимо використання регістру). Для даної команди неприпустимо використання зазначеного регістру.
CANT RECOGNIZE NUMBER BASE. (Неможливо визначити основу системи числення числа). Задана основа системи числення числа не допускається асемблером.
NOT ENOUGH PARAMETERS. (Не вистачає параметрів). У макросі число аргументів перевищує число параметрів.
ILLEGAL LABEL 1ST CHARACTER. (Неправильний перший символ мітки). Мітка повинна починатися з алфавітного символу.
MAXIMUM EXTERNAL SYMBOL COUNT EXCEEDED. (Перевищено
максимальне число зовнішніх символів). У модулі було задано занадто велике число зовнішніх символів (ідентифікаторів).
Примітка: у модулі припустимо приблизно 500 зовнішніх символів
(ідентифікаторів).
MUST BE IN SAME SECTION. (Повинен перебувати в тій самій секції). Операнд команди перебуває в іншій секції.
NON-EXISTENT INCLUDE FILE. (файл, що включається, не існує). Файл не може бути знайдений.
ILLEGAL NESTED INCLUDE. (Неправильно вкладене увімкнення файлів). Один файл, що увімкнено, містить директиву.INCLUDE. Дане повідомлення про помилку може також зазначати на відсутність оператора END у якому- небудь файлі, що увімкнено.
NESTED SECTION UNBALANCE. (Дисбаланс вкладених секцій). В описі вкладеної секції відсутня ENDS.
MISSING DELIMITERS ON MACRO CALL LINE. (У рядку виклику макросу пропущені обмежники). Виявлена розбіжність обмежників під час виклику макросу.
MULTIPLE EXTERNALS IN THE SAME OPERAND. (У одному й тому самому операнді виявлена множина зовнішніх символів (ідентифікаторів). У одному й тому самому операнді існує більш одного зовнішнього символу (ідентифікатора)).
A LABEL IS ILLEGAL ON THIS INSTRUCTION. (Мітка не може бути застосована до даної команди). Дане повідомлення про помилку використовується для того, щоб позначити мітки, що не одержують переміщуваного значення, такі як ENDM або MACEND. Використання цих міток неприпустимо для даної команди.
MACRO STACK OVERFLOW. (Переповнення стека макросів). Використано занадто великий ступінь вкладення макросів.
Примітка: дана помилка може бути викликана занадто великою кількістю рекурсивних викликів макросів. Стек допускає використання приблизне 700 вкладених або рекурсивних викликів макросів. На кількість макросів впливає число аргументів, які використовуються в макросі.
MISSING LABEL. (Пропущена мітка). У даній команді потрібна присутність мітки.
OPERAND MUST BE DEFINED AS AN 8 BIT RELOCATABLE VALUE.
(Операнд може бути описаний як 8-бітове переміщуване значення). Це повідомлення про помилку виникає, коли 16-бітова адреса використовується в команді, що допускає 8-бітовий операнд. Для того щоб зробити це значення переміщуваним, необхідно використовувати знак <або>.
MISSING RIGHT ANGLE BRACKET. (Пропущена права кутова дужка). Права кутова дужка є обов'язковою.
MACRO NAME MUST APPEAR ON SAME LINE AS MACRO DEFINITION.
(Ім'я макросу повинно з'являтися на тому самому рядку, що й опис макросу).
ILLEGAL LOCAL LABELS. (Неприпустиме використання локальних міток). Мітки не можуть бути описані як локальні. Наприклад,.VAR.
MISSING MODULE DIRECTIVE. (Пропущена директива опису модуля
MODULE).
MISSING ENDMOD DIRECTIVE. (Пропущена директива ENDMOD (задання кінця модуля)).
'Module' CAN'T BE IN 'Include' FILE. (Директива 'Module' не може перебувати у
'приєднувальному' файлі).
'Endmod' CAN'T BE IN 'Include' FILE. (Директива 'Endmod' не може перебувати у 'приєднувальному' файлі).
6.7. Методика роботи з компілятором x8051
Компілятор X8051 може працювати в діалоговому режимі та режимі командного рядка.
6.7.1. Діалоговий режим
Для виклику Асемблера необхідно завантажити x8051.exe. Асемблер у відповідь запросить:
Listing Destination?(N,T,D,E,L,<CR>=N).
Де абревіатури означають наступне: N друку немає;
T термінал;
P принтер;
D диск;
E тільки помилки;
L друкування увімкн./вимкн.
Потім Асемблер запросить ім'я файлу, що містить вихідні коди: Input filename:
При вводі імені файлу можна вилучити розширення, якщо воно asm. Далі Асемблер запросить ім'я вихідного файлу:
Output filename:
Якщо користувач відповість поверненням каретки, ім'я вихідного файлу буде утворено з імені вхідного з розширенням obj. Якщо ім'я файлу у відповіді не буде містити розширення, то воно дорівнює obj.
Якщо видача лістингу йде під керуванням директиви асемблера LIST ON/OFF, то виникає додатковий запит:
LIST ON/OFF Listing Destination (T,P,D,<CR>=T):
Скорочення відповідають попереднім.
Дата добавления: 2015-07-08; просмотров: 187 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Синтаксис мови асемблера | | | Режим командного рядка |