Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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

Поиск

Формат запису команди асемблеру має такий вигляд [4,7-9]:

{позначка:} [асемблерний код команди] {операнди}; {коментарії}

Усі позначки у програмі повинні бути унікальними, і при цьому треба пам’ятати, що асемблер не відрізняє прописні та маленькі літери. При максимальній довжині рядка програми 132 символи (більшість програмістів використовують з них лише 80 відповідно до довжини екрану) максимальна довжина позначки - 31 символ. Позначка (якщо існує), асемблерний код команди та операнд відокремлюються один від одного принаймні одним проміжком або символом табуляції. Коментарі можуть стояти в любому місці асемблерної програми та повинні починатися з символу; (крапка з комою). Всі символи в рядку асемблерної програми, що стоять праворуч від крапки з комою, вважаються за коментарі. Коментарі можуть містити будь-які друковані символи української або латинської абетки, цифрові та спеціальні символи, включаючи проміжок. Коментар може займати весь рядок або стояти праворуч від асемблерної команди, наприклад:

; Програма виводу даних на друк

ADD AX, BX; Додати два числа, що містяться в регістрах АX та BX



Зрозуміло, що кількість коментарів ніяк не впливає на складність програми, оскільки вони не відносяться до машинних кодів.

Позначки в асемблері можуть містити такі символи:

1. Англійські літери A...Z, a...z
2. Цифри 0...9 (не можуть бути першим символом позначки).
3.Спеціальні символи Знак питання (?); амперсанд(@); підкреслення (_); долар ($); крапка (.) (тільки як перший символ позначки).

Також заборонено використовувати як позначки зарезервовані асемблером слова, до яких відносяться коди команд, директиви, імена регістрів тощо. У таблиці 3 наведені приклади вірних та невірних позначок.

Таблиця 3. Приклади позначок

Приклади вірних позначок Приклади невірних позначок
CoU AX
$10 1A
Thislabelisverylongbutcorrect It_is_a_label _y_z @2 .2 M2 Thislabelisverylongandnotcorrect Це є позначка It is a label ADD Proc 2M !2 2.  

Асемблерний код команди вказує транслятору, яку дію треба виконати у даній операції. Це може бути пересилання даних між регістарми процесору, з регістру до пам’яті або навпаки (команда MOV), команди обробки даних, наприклад збільшення чи зменшення на 1 (INC, DEC), додавання (АDD), віднімання (SUB), множення (MUL) або ділення (DIV), команди організації логіки програми, команди переходу на підпрограму та багато інших.

Якщо передбачена робота з даними і кодом команди вони не визначаються, то асемблерна команда завжди містить операнд, який може містити:

1. Чисельне значення даних;

2. Регістри та комірки пам’яті, над якими буде виконуватись дія, що обумовлюється кодом команди

Приклади асемблерних команд:

CNT DB 10; Визначити байт пам’яті з назвою CNT та занести до нього число 10.

MOV AL,CNT; Занести до регістру АL число з комірки CNT

ADD AL,12; Збільшити число, що міститься у регістрі AL на 12.

INC AL; Збільшити число у регістрі, що міститься у регістрі AL на 1.

MOV BL,AL; Переслати дані з регістру AL до регістру BL.

. RET; Команда повернення з підпрограми. Операндів не має.

Крім того, асемблер має велику кількість операторів, які дозволяють керувати процесом асемблювання та виведенням початкового тексту програми на друк. Ці оператори називаються псевдокомандами або директивами [4,7-9].Вони використовуються тільки при асемблюванні програми та не генерують асемблерного коду. Головні з них наведені нижче.

Директива PAGE. Ця директива розміщується на початку програми та вказує на кількість рядків, що друкуються на сторінці, та кількість символів в одному рядку. Формат директиви:

PAGE [кількість рядків], [кількість символів]

Наприклад, директива

PAGE 50,100

встановлює режим виведення даних на друк 50 рядків на лист при сотні символів в одному рядку. Кількість рядків може бути встановлена у межах 10-255, кількість символів від 60 до 132.

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

NSEG SEGMENT {параметри}

...

...; інструкції асемблера

...

NSEG ENDS

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

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

ORG 100H

встановлює лічильник адреси на зміщення 100H (шістнадцятирічне число 100) відносно початку сегменту кода, а директива

ORG $+10H

збільшує адресу, яка завантажена у лічильник команд, на 10H (шістнадцятирічне число 10).

Директиви PROC та ENDP, команди CALL та RET. Сегмент коду може крім кодів основної програми містити одну чи декілька процедур, які визначаються директивою PROC. В кінці процедури повинні стояти команда RET та директива ENDP. Директива ENDP ставиться для того, щоб транслятор асемблера розпізнав початок та кінець процедури та її обсяг. Виклик процедури здійснюється за допомогою команди CALL. Формат команди:

CALL [ім’я процедури]

При виклику процедури числа, що знаходяться у всіх регістрах процесора, завантажуються до стека, а до лічильника команд завантажується адреса початку процедури. На кінці процедури перед директивою ENDP ставиться команда RET. Результатом їївиконання є завантаження вмісту верхніх комірок стеку до регістрів процесора та перехід на точку переривання головної програми. Команда RET може ставитися і в середині процедури, якщо це передбачено логікою програми. Крім того, цією командою здійснюється вихід з асемблерної програми до командного режиму MS-DOS. Таким чином, асемблерна програма, яка містить процедуру, буде мати такий вигляд:

NSEG SEGMENT; опис сегменту

NPROC PROC; опис процедури

...

...

...

RET; повернення до основної програми

ENDP; кінець процедури

...

...

...

CALL NPROC;

...

...

RET; повернення до MS-DOS

ENDS;

Директива END. Ставиться останнею у програмі та завершує її. Якщо програма писалася як процедура, директива END містить ім’я процедури як параметр (END {[ім’я процедури]}). Якщо це com-програма і виконується в одному сегменті, параметр не використовується.



Поделиться:


Последнее изменение этой страницы: 2016-04-26; просмотров: 444; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.156.170 (0.008 с.)