Гребнев В.В. - Микроконтроллеры семейства AVR фирмы Atmel (1044208), страница 18
Текст из файла (страница 18)
П7.1. Таблица П7.1 Формула для определения значения переменной С в зависимости от значений переменных а, Ь и Я имеет вид; С Яа,Ь,Я) аЬЯч аЬЯч аЬЯ ч аЬЯ аЯч аЬч ЬЯ. При выполнении операции вычитания с числами без знака единичное значение переменной С в старшем разряде свидетельствует о получении неверного результата, поскольку в разрядной сетке отсутствует разряд, из которого требуется занять единицу. Числа со знаком представляются в дополнительном двоичном коде. При этом старший разряд (и) имеет вес (-2"), а соседний младший разряд — вес +2" .
Единица займа из старшего разряда должна иметь вес+2"-2 2" . Операция вычитания в старшем разряде выполняется по общему для всех разрядов правилу (табл. П?,1). Результат, который должен быть получен в старшем разряде при выполнении операции а-Ь-с с учетом весов разрядов дополнительного кода при разных комбинациях значений переменных а, Ь и с, указан в табл. П7.2. 108 Приложения Табли цо П7.2 Результат, получаемый в третьей и шестой строках табл.
П7.2, не может быть представлен в данной разрядной сетке. В этом случае признак переполнения разрядной сетки при выполнении операций с числами со знаком (ч) должен иметь единичное значение. Формула для определения значения переменной Г в зависимости от значений переменных а, Ь и Я имеет вид: Ъ'=~(а, Ь, Я) = аЬЙ ч аЬК П8. Разработка программы на языке АУЯ Ассемблера фирмы А1те! П8.1. Программа на языке ассемблера представляется в виде одного или нескольких текстовых файлов.
Файл состоит из одного или нескольких сегментов. Программа может иметь в своем составе сегменты трех типов — СЯЕС, ЕНЕС и РЯЕ( . Сегмент типа СЯЕС является обязательным. Запись программы выполняется построчно. Строка может содержать до 120 символов (буквы, цифры, знаки, пробелы). Строка может быть пустой.
В строке выделяются три поля. Слева находится поле для записи метки. Метка представляет собой последовательность из букв, цифр и некоторых знаков и начинается с буквы. Запись метки заканчивается знаком ":". Поле метки может быть пустым. Справа от поля метки находится поле для записи мнемокодов команд и директив ассемблера.
Поле может быть пустым. Далее находится поле для записи комментария. Запись комментария начинается со знака ";". Поле комментария может быть пустым. 109 Разработка программы на языке АУк Ассемблера фирмы Аале! В процессе ассемблирования мнемокоды команд преобразуются в машинные коды команд, директивы ассемблера и метки используются при формировании программы в машинных кодах. Комментарии игнорируются. Они используются программистами в качестве пояснений к программе. Мнемокоды команд рассмотрены при описании системы команд (см.
главу 2) и приведены в табл. 2.1 — 2.14. Директивы ассемблера выполняют следующие функции: ° определяют тип сегмента (директивы .СБЕЙ, .ЕНЕС, .РАДЕС); ° распределяют память микроконтроллера (директивы .ОКО, .РВ, .РЖ, .ВУТЕ); ° присваивают имена и значения (директивы .РЕЕ, .ЕЯ(3, 5ЕТ); ° управляют процессом ассемблирования (директивы . РЕЧ1СЕ, .1ХСШРЕ, .ЕХ1Т, .МАСКО, .ЕХРМАСКО); ° управляют формированием листинга (директивы .1ч01.1БТ,,1.1ЯТ, .1.1БТМАС). П8.2. Сегмент тип СБЕЙ начинается с директивы .СЯЕС. Если запись программы начинается с сегмента этого типа, директива может отсутствовать. В сегменте типа СЕКЕС записываются мнемокоды команд и могут записываться все директивы ассемблера, кроме директивы .РТЕ.
Метка является символическим адресом в адресном пространстве НазЬЙОМ. Реальный адрес вычисляется в процессе ассемблирования. Исходное значение задается с помощью директивы .ОИ, записанной в начале сегмента после директивы СБЕЙ. В программе могут находиться несколько сегментов типа СБЕС. При отсутствии директивы .ОКО в первом из них в качестве исходного принимается нулевой адрес в НазЬВ.ОМ. В сегменте типа СЯЕС директива .РВ определяет байт или группу байтов, которые должны быть записаны в На~ЬКОМ в качестве констант, начиная с адреса, обозначенного меткой перед директивой.
Пример 1. . СВЕВ .ОВВ $140 МИМ;,08 $12, $34, $56, $78 Байт $12 записывается в НазИОМ по адресу 1ч0М = $140 в младшую половину ячейки, байт $34 — по этому же адресу в старшую половину ячейки, байт $56— по адресу 1чОМ+1 $141 в младшую половину ячейки, байт $78 — по адресу 1ч0М+! в старшую половину ячейки. Запись выполняется при программировании микроконтроллера.
Директива .РЖ определяет слово или группу слов, которые должны быть записаны в НазЫОМ в качестве констант, начиная с адреса, обозначенного меткой перед директивой. 110 Приложения Пример 2. ЙБМЯ.',ОИ $1234, $5678, $9АВС Слово $1234 записывается в Р)азИОМ по адресу МОМЯ, слово $5678 — по адресу МОМЯ+1, слово $9АВС вЂ” по адресу МОМЯ+2. Реальные адреса вычисляются в процессе ассемблирования. Запись в Р)азпкОМ выполняется при программировании микроконтроллера.
Кроме символических адресов, указанных в сегменте СВЕС в поле метки и используемых в мнемокодах команд безусловного и условногс перехода, при записи программы на языке ассемблера могут вводиться символические имена для регистров общего назначения и отдельных разрядов в них, для регистров ввода-вывода и отдельных разрядов в них, для переменной К в мнемокодах команд в табл.
2.2 и 2.3 и для переменной г) в мнемокодах команд в табл. 2.5. Директива .БЕЕ присваивает символическое имя регистру общего назначения. Это имя может указываться в мнемокодах команд вместо стандартного обозначения (Я6, Я„). Пример 3. . ОЕГ ТЕМР Н16 Е01 ТЕМР, $ГО В регистр общего назначения к16 заносится байт $РО. Директивы .ЕЯ11 и 5ЕТ присваивают значение имени, введенному программистом.
Пример Я. . ЕОО ООНС1М1Т $38 !01 ТЕМР, ООНС1М1Т ООТ $14. ТЕМР Коду, который должен быть занесен в регистр 00кС (Мв $14), программист присвоил имя 00НС!М1Т. При выполнении программы в регистр 00НС будет занесен двоичный код 00111011, который определяет направление передачи через выводы порта С.
Пример 5. .ОЕР МАЯТЕЯТ Н20 .ЕОО КТЕЯТ = 6 ЯВНС МАЯТЕЯТ, КТЕЯТ Выполнение команды, условного перехода (команда Мв111) зависит от состояния шестого разряда в регистре общего назначения к20. Разработка программы на языке А тк Ассемблера фирмы Аяпе! Пример 6. . ЕОО БТАСК1М1Т = $025Г Коду, предназначенному для занесения в регистр-указатель стека, программист присвоил имя и задал значение. Значение, присвоенное директивой .ЕЯУ, остается неизменным для всей программы. Значение, присвоенное директивой .ЯЕТ, может быть изменено в другом месте программы. Регистры ввода-вывода и отдельные разряды в некоторых из них имеют штатные символические имена.
Штатные имена регистров ввода- вывода у микроконтроллеров разных типов приведены в приложении П4. Штатные имена разрядов регистров ввода-вывода приведены в тексте книги при описании работы устройств, в которых эти регистры используются, и указаны в приложении П5. С использованием штатного имени мнемокод второй команды в примере 4 принимает вид: ООТ ООНС, ТЕМР Директива .ВЕЧ1СЕ определяет тип микроконтроллера, для которого составляется программа.
По этой директиве в ассемблере выбирается служебный файл, в котором присвоены имена регистрам ввода-вывода и их разрядам, указана емкость запоминающих устройств и отмечены другие особенности микроконтроллера используемого типа. Пример записи директивы: . РЕЧ1СЕ АТ9058515 Директива .1ХСШРЕ указывает имя дополнительного файла, который должен быть использован в процессе ассемблирования. Пример записи директивы: . 1МСЫОЕ "ОАНТ. АВМ", где УАКТ.АЯМ вЂ” имя дополнительного файла. Директива .ЕХ1Т указывает конец используемой при ассемблировании части файла, если не требуется использовать весь файл. Директивы .МАСКО и .ЕХРМАСКО обрамляют участок программы ~макроопределение), который должен ассемблироваться каждый раз, когда в поле для мнемокодов команд и директив ассемблера появляется имя, заданное директивой .МАСКО.
Пример У. .МАСНО ЕЕИН 881 ЕЕСН, 2 881 ЕЕСН, 1 . ЕМОМАСНО 112 Приложения При появлении в программе на языке ассемблера в среднем поле имени ЕЕЮР (макровызов) ассемблируются мнемокоды 5В! ЕЕСР, 2 и БВ! ЕЕСР, 1 и в программу на машинном языке вставляются машинные коды этих команд. В макроопределении вместо конкретных имен и значений могут вводиться обобщенные обозначения параметров ФО, Ф1, ..., Р9.
В макровызове после имени указываются значения параметров для данного макровызова в порядке их номеров. Пример УА. .МАСНО А0016 АОО ФО, У1 АООС е2, еЗ .ЕМОМАСНО .СБЕО А0016 Н4, Н10. Н5, Н11 При ассемблировании данного макровызова будут ассемблироваться команды с мнемокодом АОО Н4, Н10 АООС Н5, Н11 В процессе ассемблирования формируется файл для выдачи листинга. С использованием директив .МОНЕТ и .ПЯТ выделяется участок программы, который не требуется выводить на листинг. Директива 11БТ МАС, записанная перед именем, которое было указано в директиве .МАСКО, включает в листинг команды, обрамленные директивами МАСВО и ЕХОМАСКО, и помечает их знаком "+". П8.3. Сегмент типа ЕБЕНУ начинается с директивы .ЕНЕС.
В сегменте записываются директивы .РВ, .ИЪ' и .ОКС. Метка является символическим адресом в адресном пространстве ЕЕРКОМ. Реальный адрес вычисляется в процессе ассемблирования. Исходное значение задается с помощью директивы .ОКС, заданной в начале сегмента после директивы .ЕНЕС. В программе могут быть несколько сегментов этого типа, При отсутствии директивы .ОКО в первом из них в качестве исходного принимается нулевой адрес в ЕЕРКОМ. Директива .РВ определяет байт или группу байтов, которые должны быть записаны в ячейки ЕЕРКОМ, начиная с адреса, обозначенного меткой перед директивой .РВ.