Главная » Bascom-8051, Basic, Железо » Правила оформления ассемблерных вставокв тексте программ для компилятора «Bascom-8051»

0

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

#. Имена остальных прямо адресуемых регистров можно использовать только в том случае, если они определены, действующим в момент компиляции файлом (type.dat), устанавливающим тип микроконтроллера. Общепринятые имена битов можно применять только, если они определены как переменные Бейсика.

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

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

T_asd:

$asm

Db #&hfd , 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     Имена переменных или констант, определенных в Бейсике, тем или иным способом, и используемые как прямо  адресуемые  регистры  или  непосредственные  данные,  следует  записывать  в  фигурных  скобках  {  }. Внимание!  Разный  тип  скобок,  например  {  ),  иногда  вызывает  «зависание»  компилятора.  Имена  регистров микроконтроллера, определенные в файле type.dat, не нужно помещать в фигурные скобки.

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 , #&h0d , Ints3

Orl A , direct

Addc A , #&B00010001

В командах, использующих прямо адресуемый регистр, нужно указывать имя аккумулятора только как Acc.

Push Acc Setb Acc.2

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

Mov A , R0    или        Mov Acc , R0

Mov A , direct или       Mov Acc , direct

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

а) поставить в начало редактируемой строки символ « : »;

б) увести курсор на другую строку – произойдет переход к стилю Бейсика;

в) забить символ « : » и убрать лишние пробелы в редактируемой строке.

10      В последних версиях (2.хх) ассемблерные команды могут просто вставляться в  текст программыбез команд $Asm и $End Asm. Но делать этого не рекомендуется.

Источник: М.Л.Кулиш, СПРАВОЧНИК ПО ПРОГРАММИРОВАНИЮ BASCOM-8051, Краснодар 2001

По теме:

  • Комментарии