Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Группа команд передачи управления
К данной группе команд относятся команды, обеспечивающие условное и безусловное ветвление, вызов подпрограмм и возврат из них, а также команда пустой операции NOP (таблица 2.1). В большинстве команд используется прямая адресация, т.е. адрес перехода целиком (или его часть) содержится в самой команде передачи управления.
Таблица 2.1 - Команды передачи управления
Можно выделить три разновидности команд ветвления по разрядности указываемого адреса перехода. Длинный переход. Переход по всему адресному пространству ПП. В команде содержится полный 16-битный адрес перехода (ad 16). Трехбайтные команды длинного перехода содержат в мнемокоде букву L (Long). Всего существует две такие команды: LJMP — длинный переход и LCALL — длинный вызов подпрограммы. На практике редко возникает необходимость перехода в пределах всего адресного пространства и чаще используются укороченные команды перехода, занимающее меньше места в памяти. Абсолютный переход. Переход в пределах одной страницы памяти программ размером 2048 байт. Такие команды содержат только 11 младших бит адреса перехода (ad 11). Команды абсолютного перехода имеют формат 2 байта. Начальная буква мнемокода — A (Absolute). При выполнении команды в вычисленном адресе следующей по порядку команды ((РС)= (PC) + 2) 11 младших бит заменяются на ad11 из тела команды абсолютного перехода. Относительный переход. Короткий относительный переход позволяет передать управление в пределах –128 ± 127 байт относительно адреса следующей команды (команды, следующей по порядку за командой относительного перехода). Существует одна команда безусловного короткого перехода SJMP (Short). Все команды условного перехода используют данный метод адресации. Относительный адрес перехода (rel) содержится во втором байте команды. Косвенный переход. Команда JMP @А + DPTR позволяет передавать управление по косвенному адресу. Эта команда удобна тем, что предоставляет возможность организации перехода по адресу, вычисляемому самой программой и неизвестному при написании исходного текста программы. Условные переходы. Развитая система условных переходов предоставляет возможность осуществлять ветвление по следующим условиям аккумулятор содержит нуль (JZ); содержимое аккумулятора не равно нулю (JNZ); перенос равен единице (JC); перенос равен нулю (JNC); адресуемый бит равен единице (JB); адресуемый бит равен нулю (JNB). Для организации программных циклов удобно пользоваться командой DJNZ. В качестве счетчика циклов может использоваться не только регистр, но и прямоадресуемый байт (например, ячейка РПД). Все команды данной группы, за исключением CJNE и JBC, не оказывают воздействия на флаги. Команда CJNE устанавливает флаг С, если первый операнд оказывается меньше второго. Команда JBC сбрасывает флаг С в случае перехода.
Работа с подпрограммами Обычно в виде подпрограмм записываются многократно используемые фрагменты программ, например, подпрограмма формирования временной задержки, подпрограммы реализации специальных функций, подпрограмма обслуживания клавиатуры, подпрограммы вывода информации и т.д. Для обращения к подпрограммам необходимо использовать команды вызова подпрограмм (LCALL, ACALL), относящиеся к группе команд передачи данных. Эти команды в отличие от команд перехода (LJMP, AJMP) сохраняют в стеке адрес возврата в основную программу. Для возврата из подпрограммы необходимо выполнить команду RET. Команда RETI отличается от команды RET тем, что разрешает прерывания обслуженного уровня. При необходимости временного хранения результатов выполнения основной программы используется стек. Для обращения к стеку используются команды PUSH (запись в стек) и POP (извлечение из стека), относящиеся к группе команд передачи данных. Граница заполнения стека определяется содержимым указателя стека SP (при включении микроконтроллера содержимое SP равно 07). Система команд микроконтроллера КР1816ВЕ51 (МК51) содержит 111 базовых команд, которые удобно разделить по функциональному признаку на пять групп: команды передачи данных, арифметических операций, логических операций, передачи управления и операций с битами. Большинство команд имеют формат один или два байта и выполняются за один или два машинных цикла. При тактовой частоте 12 МГц длительность машинного цикла составляет 1 мкс. Состав операндов МК51 включает в себя операнды четырех типов: биты, 4-битные цифры, байты и 16-битные слова. Имеется также возможность адресации отдельных бит блока регистров специальных функций и портов. Для адресации бит используется прямой 8-битный адрес (bit). Четырехбитные операнды используются только при операциях обмена (команды SWAP и XCHD). 8-битным операндом может быть ячейка памяти программ или данных (резидентной или внешней), константа (непосредственный операнд), регистры специальных функций (РСФ), а также порты ввода/вывода. Порты и РСФ адресуются только прямым способом. Байты памяти могут адресоваться также и косвенным образом через адресные регистры (RO, Rl, DPTR и PC). Двухбайтные операнды - это константы и прямые адреса, для представления которых используются второй и третий байты команды.
Правила записи программ на языке ассемблера Исходный текст программы на языке ассемблера имеет определенный формат. Каждая команда и директива представляет собой строку: МЕТКА ОПЕРАЦИЯ ОПЕРАНД(Ы) КОММЕНТАРИЙ Поля могут отделяться друг от друга произвольным числом пробелов и табуляцией. Метка В поле метки размещается символическое имя ячейки памяти, в которой хранится отмеченная команда или операнд. Метка представляет собой буквенно-цифровую комбинацию, начинающуюся с буквы. Используются только буквы латинского алфавита. Ассемблер A51 допускает использование в метках символа подчеркивания (_). Метка всегда завершается двоеточием (: ). Директивы ассемблера не преобразуются в двоичные коды, а потому не могут иметь меток. Исключение составляют директивы резервирования памяти и определения данных (DS, DB, DW). У директив, определяющих символические имена, в поле метки записывается определяемое символическое имя, после которого двоеточие не ставится. В качестве символических имен и меток не могут быть использованы мнемокоды команд, директив и операторов ассемблера, зарезервированные имена, а также мнемонические обозначения регистров и других внутренних блоков микроконтроллера.
Операция В поле операции записывается мнемоническое обозначение команды или директивы ассемблера, которое является сокращением (аббревиатурой) полного английского наименования выполняемого действия. Например: MOV - move - переместить, JMP - jump - перейти, DB - define byte - определить байт. Для микроконтроллера Intel 8051 используется строго определенный и ограниченный набор мнемонических кодов. Любой другой набор символов, размещенный в поле операции, воспринимается ассемблером как ошибочный. Операнды В этом поле определяются операнды (или операнд), участвующие в операции. Команды ассемблера могут быть без-, одно- или двухоперандными. Операнды разделяются запятой (, ). Операнд может быть задан непосредственно или в виде его адреса (прямого или косвенного). Непосредственный операнд представляется числом (MOV A, #15) или символическим именем (ADDC A, #OPER2) с обязательным указателем префикса непосредственного операнда (#). Прямой адрес операнда может быть задан мнемоническим обозначением (IN A, P1), числом (INC 40), символическим именем (MOV A, MEMORY). Указанием на косвенную адресацию служит префикс @. В командах передачи управления операндом может являться число (LCALL 0135H), метка (JMP LABEL), косвенный адрес (JMP @A) или выражение (JMP $ - 2, где $ - текущее содержимое счётчика команд). Используемые в качестве операндов символические имена и метки должны быть определены, а числа представлены с указанием системы счисления, для чего используется суффикс (буква, стоящая после числа): B – для двоичной, Q – для восьмеричной, D – для десятичной и H – для шестнадцатиричной. Число без суффикса по умолчанию считается десятичным. Комментарий Поле комментария может быть использовано программистом для текстового или символьного пояснения логической организации прикладной программы. Поле комментария полностью игнорируется ассемблером, а потому в нём допустимо использовать любые символы. По правилам языка ассемблера поле комментария начинается с точки с запятой (; ).
Популярное:
|
Последнее изменение этой страницы: 2016-05-28; Просмотров: 849; Нарушение авторского права страницы