"DVDXpert" - компас в мире Hi-Fi и High End техники и другой stereo и home cinema аппаратуры.
ЦИФРОВЫЕ КОНСТАНТЫ И СИСТЕМЫ СЧИСЛЕНИЯ☛IT & hi-tech ✎ |
MPASM поддерживает следующие форматы представления значений: шестнадцатеричный, десятичный, восьмеричный, двоичный и ASCII. По умолчанию установлен шестнадцатеричный формат. Формат по умолчанию означает, что если для переменных и присоединенных к ним значений явно не указан формат, то при генерации исполняемого кода они воспринимаются в формате по умолчанию. Константы могут иметь знак плюс или минус. Отсутствие знака означает положительное число.
В тексте программы константы записываются следующим образом:
Десятичные 0'<цифры>'или .<цифры> D'lOO' .100
Шестнадцатеричные Н'<цифры>' или 0х<цифры> H'9f 0x9f
Восьмеричные 0'<цифры>' 0777'
Двоичные В'<цифры>' В'ООШООГ
Строковые ASCII А'символ' или 'символ' А'С' 'С'
ДИРЕКТИВЫ АССЕМБЛЕРА
Ниже приводится полный перечень директив ассемблера MPASM. Тому, кто впервые сталкивается с программами на языке ассемблера и программами для ассемблера следует четко понимать разницу между инструкциями микроконтроллера, которые ассемблер преобразует в исполняемый код микроконтроллера, с директивами самого ассемблера При помощи директив ассемблера может быть написана целая программа, с циклами, функциями и условными переходами, но это будет программа, которая руководит работой самого ассемблера: управляет внешним видом листинга, принудительно формирует некоторые фрагменты исполняемого кода и т.д. В исходном тексте программы наряду с инструкциями микроконтроллера всегда присутствуют хотя бы несколько директив ассемблера. Начинающему программисту достаточно знать только некоторые из них. Некоторые директивы применяются только для управления листингом, который часто рассматривают как официальный документ законченного проекта. Но при подготовке объектных кодов, при создании сложных приложений, которые могут ассемблироваться в нескольких различных версиях, потребуется более глубокое знание директив и макроязыка.
_ _BADRAM
Идентификатор недоступной области памяти
badram
Директивы BADRAM и MAXRAM совместно закрывают доступ к неиспользуемым ячейкам памяти. Директива BADRAM оп
ределяет расположение недоступных ячеек памяти. Эта директива
разработана для применения совместно с директивой MAXRAM
Каждое значение <ехрг> должно быть меньше или равно значению,
указанному для MAXRAM. Когда применяется директива
MAXRAM и проверка выделенного адреса ОЗУ включена, использование карты памяти определяется директивой BADRAM Чтобы
определить диапазон неприменимых ячеек, используется синтаксис
Пример см пример для директивы MAXRAM
См также MAXRAM
BANKISEL
Генерация кода косвенного выбора банка bankisel
Используется при генерации объектного файла Эта директива является инструкцией для компоновщика, генерирующего соответствующий код выбора банка для косвенного доступа и адресу, определяемому меткой
Пример
movlw Varl
movwf FSR
bankisel Varl
movwf INDF
См также BANKSEL, PAGESEL BANKSEL
Генерация кода выбора банка banksel
Используется при генерации объектного файла Эта директива является инструкцией компоновщику для генерации кода выбора банка, чтобы установить банк, в котором находится
MOVLB Если контроллер содержит только один банк памяти, никакие инструкции не генерируются Пример
banksel Varl movwf Varl
См также BANKISEL, PAGESEL CBLOCK
Определение блока констант cblock
Определяет список именованных констант Каждая метка
Установка битов конфигурации процессора config <ехрг> или _config
Устанавливает биты конфигурации процессора в значения, описываемые выражением <ехрг>. Для семейства PIC18CXXX также должен быть указан адрес
быть объявлен в командной строке ассемблера, либо директивой LIST, либо директивой PROCESSOR. Если используется процессор семейства PIC17CXX, то в командной строке или в директиве LIST должен быть установлен формат выходного файла INHX32.
Пример:
list р=17с42, f=INHX32 config H’FFFF'
См. также IDLOCS, LIST, PROCESSOR
CONSTANT
Объявляет символьную константу
constant
Создает символы для использования в выражениях MPASM. Константы, будучи единожды объявленными, не могут быть переустановлены и выражения должны быть полностью разрешимыми в момент их создания. Это является принципиальным различием между симво лами, объявленными директивой CONSTANT и директивой VARIABLE или созданными директивой SET. Во всем остальном константы и переменные могут использоваться в выражениях на равных условиях.
Инициализирует одно или более слов, содержащих данные, в программной памяти. Данные могут иметь форму константы, перемещаемой или внешней метки или выражения идущих по одному или подряд. Данные могут состоять также из текстовой строки ASCII, заключенной в одиночные кавычки для одиночной буквы и двойные кавычки для строки. Одиночный символ помещается в младший байт слова, символы из строки пакуются по два в слово Если число символов в строке нечетное, то завершающим байтом является ноль. Для всех семейств микроконтроллеров, исключая PIC18CXXX, первая буква является старшим значащим байтом слова У PIC18CXXX первая буква является младшим байтом спова Когда генерируется объектный файл, эта директива может быть использована для объявления инициализированных значений блока данных. Для более подробного изучения этого вопроса обратитесь к описанию директивы IDATA.
Резервирует в программной памяти слово со сжатым 8битным значением. Множество значений <ехрг> продолжает заполнение байтов последовательно до тех пор, пока не закончится список значений. Если число значений нечетное, то последний байт получит нулевое значение. Когда генерируется объектный файл, эта директива может быть использована для объявления инициализированных значений блока данных. Для более подробного изучения этого вопроса обратитесь к описанию директивы IDATA.
Резервирует слово в памяти под 8битные данные. Каждое значение <ехрг> должно выражаться 8битным числом. Старшие биты программного слова равняются нулю. Каждая буква текстовой строки сохраняется в отдельном слове. Несмотря на то, что директива разработана специально для инициализации данных в EEPROM контроллера PIC16C8X, она может быть использована для любого размещения данных в любом процессоре.
Определяет метку подстановочной строки #define
Директива определяет текст подстановочной строки. Где бы ни находилось в ассемблируемом коде имя
Резервирует слова программной памяти для данных, заполняя их описанными в директиве значениями. Для контроллеров PIC18CXXX инструкция DW предпочтительнее, чем DB. Значения сохраняются в последовательных ячейках памяти и счетчик каждый раз увеличивается на единицу. Выражение <ехрг> может быть текстовой строкой, которая сохраняется в соответствии с описанием для директивы DATA. Когда генерируется объектный файл, эта директива может быть использована для объявления инициализированных значений блока данных. Для более подробного изучения этого вопроса обратитесь к описанию директивы IDATA.
Окончание цикла no директиве WHILE
Эта директива завершает цикл, начатый по директиве WHILE. До тех пор, пока условие, специфицированное директивой WHILE будет оставаться истинным, исходный код между директивами WHILE и ENDW будет продолжать повторно вставляться в ассемблируемый поток исходного текста. Директива может быть использована внутри обычного программного блока или макроса.
MESSG ERRORLEVEL
Устанавливает уровень вывода сообщений
errorlevel {0|l|2|+
Директива устанавливает типы сообщений, которые печатаются в файле листинга и файле ошибок.
0Печатаются сообщения, предупреждения и ошибки.
1Печатаются предупреждения и ошибки.
2Печатаются только ошибки.
Пример:
errorlevel 1,202 См. также LIST EXITM
Выход из макроса exitm
Немедленный выход из процедуры обработки макроса во время ассемблирования. В отличие от директивы ENDM, которая всегда ставится в конце макроса, директива EXITM может стоять в произвольной строке макроса и применяется для немедленного выхода по условию Пример:
test macro filereg
if filereg == 1 ; check for valid file exitm else
error "bad file assignment" endif endm
См. также ENDM, MACRO EXPAND
Разворачивает макросы в листинге
expand
Разворачивает все макросы в файле листинга. Эта директива приблизительно похожа на опцию /т в командной строке MPASM, но может быть отключена следующей за ней в исходном тексте директивой NOEXPAND. Если разворачивание включено, то каждый раз, когда вызывается макрос, в текст листинга вставляется его полное содержание. Вставка полного текста макроса может обчегчить отладку и анализ программы, но если макрос вызывается рекурсивно, листинг в этом месте становится почти нечитаемым и значительно удлиняется В таких случаях макрорасширение отключают директивой NOEXPAND Включать и отключать вывод макрорасширений можно сколь угодно много раз.
EXTERN
Объявляет внешнюю метку extern
Применяется при генерации объектных файлов. Объявляет символьное имя некой процедуры, которая может быть использована в текущем модуле, но описана как глобальная в другом модуле. Директива EXTERN должна быть помещена в исходном тексте до того, как будет использована метка
EXTERN, GLOBAL, TEXT, UDATA, UDATA_ACS, UDATA_OVR, UDATA_SHR
JDLOCS
Задает расположение IDномера процессора
idlocs
В случае применения микроконтроллеров PIC12CXX, РІС 14000 и
РІС16СХХ, директива idlocs устанавливает значения четырех ячеек
иденнтификатора ID в соответствии с шестнадцатеричным значением <ехрг>. Для контроллеров PIC18CXX директива устанавливает двухбайтный IDномер устройства
Например, если <ехрг> имеет значение 1AF, то первое (младшее) значение идентификатора равно нулю, второе равно 1, третье десяти, четвертое шестнадцати. Перед тем, как применить директиву, необходимо объявить тип процессора в командной строке, директивой LIST или директивой PROCESSOR.
Начало условно ассемблируемого блока if <ехрг>
Начинает обработку условно ассемблируемого блока. Если выражение <ехрг> истинное, ассемблируется код, следующий немедленно за директивой IF, в противном случае нижеследующий за IF код игнорируется и ассемблируется код, следующий от директивы ELSE до директивы ENDIF Если выражение <ехрг> задано явно и равно нулю, оно трактуется как ложное, если выражение имеет какоелибо иное явное значение, оно трактуется как истинное.
if version == 100; проверяем номер текущей версии movlw 0x0а movwf io_l else movlw 0x0la movwf io_2 endif
См. также ELSE, ENDIF IFDEF
Исполнить, если символ определен ранее ifdef
Если символьное имя
мандной строке MPASM, то ассемблируется код, следующий сразу за директивой, до достижения директивы ENDIF
Если символьное имя
Подключает дополнительный файл источника
include <
Указанный файл читается, как исходный код. При этом получается тот же эффект, как если бы вы вставили фрагмент текста из другого файла в текст своей программы при помощи текстового редактора, в то место, где находится директива INCLUDE. Допускается до шести уровней вложенности файлов в файл. Имя файла можно заключать в кавычки или угловые скобки. Если определен полный путь к файлу, то он разыскивается только в соответствии с этим путем. Если путь не определен, то файл разыскивается в следующем порядке: текущая рабочая директория, директория исходного файла, директория исполняемого файла MPASM.
Директивы MAXRAM и BADRAM совместно закрывают доступ к регистрам, применение которых невозможно. MAXRAM
определяет абсолютный наибольший корректный адрес ОЗУ и инициализирует карту корректных адресов ОЗУ от значения <ехрг> и ниже. Значение <ехрг> должно быть больше или равно максимальному адресу ОЗУ нулевой страницы и меньше, чем 1000Н. Эта директива разработана для использования с директивой BADRAM. Как
только применена директива MAXRAM, включается проверка
каждого конкретного адреса на доступность, при этом используются ограничения карты памяти, сделанные директивой BADRAM. Директива MAXRAM может быть использована более одного раза,
но каждое новое использование этой директивы полностью переопределяет всю карту распределения ОЗУ.
BADRAM MESSG
Создает сообщение, определенное пользователем
messg "
Генерирует информационное сообщение, выводимое в файл листинга. Текст сообщения может иметь длину до 80 символов. При выводе сообщений этой директивой не устанавливаются и не возвращаются никакие коды сообщений об ошибках. Если эта директива используется для вывода сообщений о какихлибо внутренних ограничениях или ошибках при ассемблировании, то сообщение выводится в строгом соответствии с алгоритмом, который определил пользователь и с текстом, который задал пользователь.
Еще по теме: Небесная битва Виды телевидения. Спутниковое телевидение. Интерактивное телевидение Что такое нейроморфные процессоры и почему они сделают ваш смартфон «живым» ОСТАНОВ ПО УСЛОВИЮ |