Лекция: Директивы языка АССЕМБЛЕР

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

Директива BYTE. Это директива резервирует байты ОЗУ (в области Data). Все директивы начинаются с символа «точка».

Директива .DSEQ. Определяет, что нижеследующие строки относятся к области Data ОЗУ. Эта директива не имеет операндов.

Директива .BYTE. Имеет один обязательный операнд, указывающий количество выделенных байтов.

Если необходимо чтобы обращение к выделенным байтам происходило по имени, то вводится метка (в данном случае это метка Var 1).

Директива .CSEQ. Указывает компилятору, что последующие строчки программы должны компилироваться и располагаться в области ПЗУ.

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

Директива .DEVICE. Определяет устройство, для которого компилируется программа. Использование данной директивы позволяет компилятору выдать предупреждение, если появится команда, не поддерживаемая данным контроллером.

Директива .EQU.Позволяет определить константу путем задания ее меткой. Формат этой директивы:.EQU метка=выражение

Директива .include. Означает вложение другого файла (содержимое файла включается в программу при компиляции).

Встретив .include компилятор открывает указанный в этой директиве файл, компилирует его до конца (т.е. переводит в машинные коды) или до директивы .EXIT. После этого продолжается компиляция начального файла со строки, следующей за директивой include. Вложенный файл тоже может содержать директиву include.

Директива .ORG устанавливает счетчик в положение равным заданной величине, которая входит как параметр в эту директиву. Для сегмента данных она устанавливает счетчик положения ОЗУ, для сегмента программ или памяти программ она устанавливает содержимое РС (программного счетчика), а для сегмента Eeprom устанавливает положение в области Eeprom.

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

Перед началом компиляции РС и счетчик Eeprom нулю, а счетчик ОЗУ=32.

Для ОЗУ и Eeprom используются побайтные счетчики, а для программного сегмента пословные.

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

 

29) Выражения языка Assembler: операнды

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

Операнды могут быть следующих видов:

1. Метки, определенные пользователем, которые определяют численные значения адреса либо ячейки ОЗУ, либо программы команды.

2. Переменная, определенная директивой .SET .SET io1=0×23 (io1 – можем изменять далее в программе)

3. Константы, определенные директивой .EQU.EQU io_offset=0×23 (io_offset – не можем изменять)

4. Операндами могут быть числа, заданные в разных форматах:

а) десятичный, который использует лишь десятичные символы 10, 20,….(начинаются не с 0)(15==0х0F)

б) 16-ричный использует 2 варианта записи: 0хОА и $ОА

в) двоичный начинается с символов 0в и использует лишь нули и 1: 0b00001111.

г) восьмеричный начинается обязательно с 0 и использует младшие 8 десятичных цифр.(0-7). (015==0х0D)

5.Имя РС, текущие значения программного счетчика.

Компилятор поддерживает ряд операторов в выражениях, которые перечислены ниже согласно их приоритету. Изменения приоритета того или иного оператора при вычислении выражения добиваются использованием круглых скобок.

30) Выражения языка Assembler: операторы

Логические операторы – (1) над числом, (2) над битами

1. Оператор «Логическое отрицание» (над всем числом) записывается символом «!». Этот оператор возвращает единицу, если его операнд равен нулю и возвращает ноль, если операнд отличен от нуля

2. Оператор «Побитное отрицание» (над каждым битом в отдельности) записывается символом ~ (тильда). Этот оператор возвращает операнд, в котором все биты проинвертированы

3. Оператор «минус» “ — ” возвращает арифметическое отрицание исходного операнда.

4. Оператор умножения обозначается знаком “ * ”

5. Оператор деления записывается символом “ / ”, возвращает целую часть деления (частное) левого выражения на правое.

6. Оператор суммирования обозначается “ + ” и возвращает сумму двух выражений.

7. Оператор вычитания обозначается символом “ — ” и возвращает результат вычитания из левого операнда правого операнда.

8. Оператор «сдвиг влево» записывается символом “ << ” и возвращает левое выражение сдвинутое влево на число бит указанное справа.

9. Оператор «Сдвиг вправо» записывается символом “ >> ” и возвращает выражение, сдвинутое вправо на число бит, указанное справа.

10. Логический Оператор “ меньше чем ” записывается символом “ < ” и возвращает 1, если левое выражение меньше чем правое (в скобках учитывается знак) и возвращает 0 в противном случае.

11. Логический Оператор «меньше или равно» “ <= ”, возвращает 1, если левое выражение <= чем правое и 0 в противном случае.

12. Логический Оператор «больше или равно» “ >= ” вводится аналогично.

13. Логический Оператор «равно» записывается в виде “ = = ” возвращает 1, если левое выражение равно правому и 0 в противном случае.

14. Логический Оператор «не равно» записывается в виде “ != ” возвращает 1, если левое выражение не равно правому и 0 в противном случае.

15. Логический Оператор “ побитное И ” записывается символом “ & ” возвращает результат побитного логического умножения двух выражений.

16. Логический Оператор “ побитное исключающее ИЛИ ” записывается символом “ ^ ” возвращает результат побитного логического сложения двух выражений по модулю два.

17. Логический Оператор “ побитное ИЛИ ” записывается символом “ | ” возвращает результат побитного логического сложения двух выражений.

18. Оператор “ логическое И ” (над числами) записывается символом “&&” и возвращает 1, если оба выражения не равны 0 и 0 в противном случае.

19. Оператор “ логическое ИЛИ ” (над числами) записывается символом “ | | ” возвращает 1, если хотя бы одно выражение не было равно 0 и 0 в противном случае

31) Выражения языка Assembler: функции

В языке Assembler определены следующие функции:

LOW (выражение) эта функция возвращает младший байт выражения.

HIGH (выражение) эта функция возвращает второй байт выражения.

BYTE 2 (выражение) эта функция возвращает второй байт выражения.

BYTE 3 (выражение) эта функция возвращает третий байт выражения.

BYTE 4 (выражение) эта функция возвращает четвертый байт выражения.

LWRD (выражение) эта функция возвращает биты с 0 по 15.

HWRD (выражение) эта функция возвращает биты с 16 по 31.

PAGE (выражение) эта функция возвращает биты с 16 по 21 от выражения.

EXP 2 (выражение) возвращает 2 в степени выражения.

LOG 2 (выражение) возвращает целую часть логарифма с основанием 2 от выражения.

еще рефераты
Еще работы по информатике