Правила оформлення асемблерних вставокв тексті програм для компілятора «Bascom-8051»

1 Текст асемблерних вставок повинен містити тільки стандартні команди мікроконтролера 8051 Виняток становить командва SWAP, що збігається з схожою командою Bascom Ассемблерного команду SWAP необхідно застосовувати з префіксом «» (Таким чином – Swap) У мнемоніку команд без додаткових визначень входять: регістри R0-R7, @ R0, @ R1, A, DPTR біт C символ вказівки безпосередніх даних –

# Імена інших прямо адресуються регістрів можна використовувати тільки в тому випадку, якщо вони визначені, які у час компіляції файлом (typedat), що встановлює тип мікроконтролера Загальноприйняті імена бітів можна застосовувати тільки, якщо вони визначені як змінні Бейсика

2 Числові значення повинні бути записані способом, передбаченим Бейсиком, а не так, як робиться в стандартному асемблері

3 Не допускається застосування директив стандартного асемблера, в тому числі резервування областей оперативної памяті (директивою DS) і визначення полів даних (директивою DW) Винятком є ​​директива DB, яка може застосовуватися всередині ассемблерного блоку:

T_asd:

$asm

Db #&amphfd , 23 , 5 , 6

$end Asm

4 Краще не допускати включення коментарів Bascom між командами $ Asm і $ End Asm Хоча іноді компілятор пропускає це У будь-якому випадку компілятор вказує на цю помилку Між командами $ Asm і

$ End Asm можна застосовувати стандартні асемблерні коментарі Коментарі не повинні розташовуватися в рядку з міткою У рядку з командами $ Asm і $ End Asm також не можна поміщати коментарі

‘Обробка переривання таймера 0 Timer_0_int:

$asm

Mov Tl0, # & hfd d8fdh – це неправильно

Mov Th0, # & hd8 вуст періоду прерів 10 мс – це правильно

$end Asm Return

5 У ассемблерного тексті допускається застосування міток Вони мають бути оформлені також як і Бейсике (вимоги збігаються зі стандартним асемблером) Не допускається розміщення команди асемблера і тим більше коментарів у рядку з міткою

‘Обробка переривання послідовного інтерфейсу

Ser_int:

$asm

Intsr:

Intst:

$end Asm

Jbc {Ri} , Intsr Jbc {Ti} , Intst Reti

Mov  {rbuf} , Sbuf

Setb {B_enrx} переривання приймача

Reti

Setb {B_entx} переривання передавача

Reti

міток:

Якщо в ассемблерной вставці застосовується посилання на позначку, то існує два варіанти оформлення таких

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

спосіб (дивися приклад вище)

б) якщо застосована посилання на позначку визначену в іншому місці програми, то перед цією міткою необхідно поставити знак «» і тоді вона стане доступною Причому, така мітка не повинна знаходиться всередині іншого ассемблерного блоку Нижче представлений приклад програми з мітками поза ассемблерного тексту:

‘Обробка переривання послідовного інтерфейсу

Ser_int:

$asm

$end Asm

Jbc {Ri} , Intsr Jbc {Ti} , Intst

Goto Ser_Ret

!Intsr:

Rbuf = Sbuf: Set B_enrx: Goto Ser_Ret переривання приймача

!Intst:

Set B_entx: переривання передавача

Ser_Ret:

Return ! повинен бути тільки один вихід

6 Імена змінних або констант, визначених у Бейсике, тим чи іншим способом, і використовувані як прямо адресуються регістри або безпосередні дані, слід записувати в фігурних дужках {} Увага Різний тип дужок, наприклад {), іноді викликає «зависання» компілятора Імена регістрів мікроконтролера, визначені в файлі typedat, не потрібно поміщати у фігурні дужки

Mov {R_ch} , Sbuf Setb {B_kl}

Запис частин змінних робити наступним чином

Mov {R_ch+3} , Sbuf

Компілятор перевіряє тип змінної Змінна типу Integer не може застосовуватися в ассемблерной вставці Принаймні, в перших версіях так було Перевіряйте самі

7 Не допускається розміщення пробілу між знаком безпосередніх даних (#) і даними Помилка в цьому випадку не показується, а полі даних записується нуль

Mov {R_cch}, # {R_lin} – правильно

Mov {R_cch}, # {R_lin} – неприпустимо

8 У командах, що виконують операції з акумулятором з безпосередньою адресацією, необхідно вказувати його імя як «A»

Cjne A , #&amph0d , Ints3

Orl A , direct

Addc A , #&ampB00010001

У командах, які використовують прямо адресується регістр, потрібно вказувати імя акумулятора тільки як Acc

Push Acc Setb Acc2

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

Mov A, R0 або Mov Acc, R0

Mov A, direct або Mov Acc, direct

9 Стиль виконання тексту будь-який – великі чи маленькі літери Краще дотримуватися такого як в Бейсике – перша велика і прогалини між операторами Для переходу в цей стиль застосовувати таку операцію:

а) поставити в початок рядка, що редагується символ «:»

б) відвести курсор на інший рядок – відбудеться перехід до стилю Бейсика

в) забити символ «:» і прибрати зайві пробіли в редагованої рядку

10 В останніх версіях (2хх) асемблерні команди можуть просто вставлятися в текст программибез команд $ Asm і $ End Asm Але робити цього не рекомендується

Джерело: МЛКуліш, ДОВІДНИК З ПРОГРАМУВАННЯ BASCOM-8051, Краснодар 2001

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*