Синтаксис выражений и операций

8.1 Введение

В главе описываются форматы выражений, синтаксис и операторы MPASM.

8.2 Основные части раздела

Текстовые строки

Числовые константы и системы счисления

Арифметические операции

High/Low/Upper операции

Операции инкремента/декремента

8.3 Текстовые строки

Текстовые строки (длиной не более 255 символов) могут состоять из знаков ASCII (в диапазоне от 0 до 127). Если найден символ окончания строки, то определение строки считается завершено. Если символ окончания текстовой строки не найден, то окончание строки считается в конце линии.

Увеличить длину символьной строки можно дополнительным использованием директивы DW.

Директива DW сохраняет текстовую строку в последовательности слов памяти программ. Если текстовая строка имеет нечетное количество символов, то для директив DW и DATA последний байт будет равняться ООП.

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

Пример сохранения текстовой строки.

7465 7374 696Е dw "testing output string one\n"

6720 6F75 7470

7574 2073 7472

696Е 6720 6F6E

650A

ftdefine str "testing output string two" BO 61 movlw 'a' 7465 7374 696Е data "testing first output string" 6720 6669 7273 7420 6F75 7470 7574 2073 7472 696Е 6700

MPASM принимает некоторые ANSI 'С' последовательности для формирования некоторых характерных знаков.

Последовательность символов   Описание   HEX значение  
\а   Предупреждение    
\Ь   Возврат на один символ    
\f   Формат   ОС  
\n   Новая строка   ОА  
\r   Перевод каретки   OD  
\t   Горизонтальная табуляция    
\v   Вертикальная табуляция   0В  
\\   Наклонная черта влево   5С  
\?   Вопрос   3F  
V   Апостроф    
\"   Кавычки    
\000   Восьмеричное значение      
\хНН   Шестнадцатеричное значение      

 


8.4 Числовые константы и системы счисления

MPASM поддерживает числа следующих систем счисления:

шестнадцатеричные;

десятичные;

восьмеричные;

двоичные;

символы ASCII.

Если система счисления явно не определена, то при компиляции исходного текста программы по умолчанию используется шестнадцатеричная система счисления.

При определении константы, ей можно присвоить положительное или отрицательное значение (добавив знак + или - соответственно). По умолчанию считается, что значение константы положительное число.

Примечание. MPASM работает с промежуточными значениями в выражениях как с 32-разрядными числами. В случае превышения указанного предела будет сформировано соответствующее предупреждение.

В таблице представлен синтаксис числовых значений в различных системах счисления

 

Тип   Синтаксис   Пример  
Шестнадцатеричный Десятичный   H'<hex digits>' Ox<hexdigits> D'<digits>'   H'9f Ox9f D'100'  
Восьмеричный   0'<octal digits>'   0'777'  
Двоичный   B'<binary digits>'   B'00111001'  
ASCII   '<character>' A' <character>'   'C" A'C'  

 


8.5 Арифметические операции

Список арифметических операций

Символ   Описание   Пример  
$   Изменение счетчика программы PC   goto $ + 3  
(   Левая скобка   1 + (d * 4)  
)   Правая скобка   (Length + 1) * 256  
    НЕ с логическим дополнением   if 1 (a == b)  
-   Отрицание с дополнением двух   -1 * Length  
~   Дополнение   flags = -flags  
High   Возвращает старший байт   movlw high CTR Table  
Low   Возвращает младший байт   movlw low CTR Table  
Upper   Возвращает верхний байт   movlw upper CTR Table  
*   Умножение   a = b * с  
/   Деление   a = b / с  
%   Модуль   entry len = tot len % 16  
+   Сложение   tot len = entry len * 8 + 1  
-   Вычитание   entrylen = (tot - 1) / 8  
“   Сдвинуть влево   flags = flags “ 1  
”   Сдвинуть вправо   flags = flags ” 1  
>=   Больше или равно   if entry idx >= num entries  
>   Больше   if entry idx > num entries  
<   Меньше   if entry idx < num entries  
<=   Меньше или равно   if entry idx <= num entries  
==   Равно   if entry idx == num entries  
=   Не равно   if entry idx 1= num entries  
&   Побитовое И   flags = flags & ERRORBIT  
Л   Побитовое исключающее ИЛИ   flags = flags ^ ERROR BIT  
    Побитовое ИЛИ   flags = flags ERRORBIT  
&&   Логическое И   if (len == 512) && (b == c)  
  Логическое ИЛИ   if (len == 512) (b == c)  
=   Присвоить значение   entry index = 0  
+=   Сложить и присвоить значение Вычесть и присвоить значение   entry index += 1 entry index -= 1  
*   Умножить и присвоить значение   entry index *= entry length  
/=   Разделить и присвоить значение   entry total /= entry length  
%=   Взять модуль и присвоить значение   entry index %= 8  
“=   Сдвинуть влево и присвоить значение   flags “= 3  
”=   Сдвинуть вправо и присвоить значение   flags ”= 3  
&=   Выполнить И и присвоить значение   flags &= ERROR FLAG  
=   Выполнить ИЛИ и присвоить значение   flags = ERRORFLAG  
Л^   Выполнить исключающее ИЛИ и присвоить значение   flags ^= ERROR FLAG  
++   Инкремент   l ++  
-   Декремент   l --  

 

8.6 High/Low/Upper операции

8.6.1. Синтаксис

high <operand> low <operand> upper <operand>

8.6.2 Описание

Данные операнды возвращают указанный байт из многобайтной переменной. Они предназначены для динамического вычисления указателя и выполнения инструкций табличного чтения/записи.

8.6.3 Пример

movlw low size

movpf wreg, low size lo

movlw high size

movpf wreg, high size_hi


8.7 Операции инкремента/декремента

8.7.1 Синтаксис

<variable>++ <variable>--

8.7.2 Описание

Выполняют инкремент/декремент значения переменной. Данные операнды должны использоваться на отдельной строке и не могут быть включены в выражения.

8.7.3 Пример

Loop Count = 4

while LoopCount > 0

rif Reg, f LoopCount - -

endw


Приложение А. Формат HEX файлов. А.1 Введение

В данном разделе будут рассмотрены форматы генерируемых MPASM HEX файлов.

А.2 Основные части раздела

Intel HEX формат INHX8M (для стандартных программаторов)

Intel Split HEX формат INHX8S (для ODD/EVEN ROM программаторов)

Intel HEX формат INHX32 (для 16-битных программаторов)