Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




Правила программирования на языке Assembler

Основные битовые команды AVR-контроллера

КОМАНДЫ РАБОТЫ С БИТАМИ
SBI P,b Установить бит b в рег. ввода/вывода P I/O(P,b)<1 None  
CBI P,b Сбросить бит в рег. ввода/вывода I/O(P,b)<0 None  
LSL Rd Логический сдвиг влево Rd(n+1)<Rd(n), Rd(0)<0 Z,C,N,V  
LSR Rd Логич.сдвиг вправо Rd(n)<Rd(n+1), Rd(7)<0 Z,C,N,V  
ROL Rd сдвиг влево через C Rd(0)<C, Rd(n+1)<Rd(n), C<Rd(7) Z,C,N,V  
ROR Rd сдвиг вправо через C Rd(7)<C, Rd(n)<Rd(n+1), C<Rd(0) Z,C,N,V  
ASR Rd Арифметический сдвиг вправо Rd(n)<Rd(n+1), n=0..6 Z,C,N,V  
SWAP Rd Обмен нибблов (тетрад) Rd(3-0)<Rd(7-4) Rd(7-4)<Rd(3-0) None  
BSET s Установить флаг SREG(s)<1 SREG(s)  
BCLR s Сбросить флаг SREG(s)<0 SREG(s)  
BST Rr,b Запомнить бит в T T<Rr(b) T  
BLD Rd, b Прочитать бит из T Rd(b)<T None  
SEC   Установить перенос C<1 C  
CLC   Сбросить перенос C<0 C  
SEN   Установить флаг N N<1 N  
CLN   Сбросить флаг N N<0 N  
SEZ   Установить флаг Z Z<1 Z  
CLZ   Сбросить флаг Z Z<0 Z  
SEI   Разрешить прерывания I<1 I  
CLI   Запретить прерывания I<0 I  
SES   Установить флаг S S<1 S  
CLS   Сбросить флаг S S<0 S  
SEV   Установить флаг V V<1 V  
CLV   Сбросить флаг V V<0 V  
SET   Установить флаг T T<1 T  
CLT   Сбросить флаг T T<0 T  
SEH   Установить флаг H H<1 H  
CLH   Сбросить флаг H H<0 H  
NOP   Нет операции   None  
SLEEP   Останов   None  
WDR   Сброс сторожевого таймера   None  

Компилятор языка Assembler преобразует текст из программы, написанной на языке Assembler в машинные коды, которые в последующем записываются в область ПЗУ процессора.

Программа на языке Assembler содержит команды, метки и директивы. Команды и директивы, как правило, имеют один или несколько операндов.

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

Метки используются для определения места, в которое передается управление при переходах, реализуемых командами передачи управления (ветвления). Метки используются также для задания имен переменных.

Строка программы на языке Assembler может иметь одну из 4-х форм:

1. [метка] _ директива _ [операнды] _ [комментарий]

2. [метка] _ команда _ [операнды] _ [комментарий]

3. комментарий

4. пустая строка

Комментарии имеют форму, состоящую из 2-х элементов:

; [текст]

Позиции в [ ] являются не обязательными.

Текст после “; “ до конца строки игнорируется компилятором. Длина строки не должна превышать 120 символов.

 

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

Директива 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 от выражения.




Поделиться с друзьями:


Дата добавления: 2015-04-24; Просмотров: 1106; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.038 сек.