Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Группа команд передачи управления



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

 

Таблица 2.1 - Команды передачи управления

Название команды Мнемокод Операция
Длинный переход в полном объеме ПП LJMP ad16 (PC) ad16
Абсолютный переход внутри страницы в 2 Кб AJMP ad11 (PC) (PC) + 2, (PC0-10) ad11
Короткий относительный переход внутри страницы в 256 байт SJMP rel (PC) (PC) + 2, (PC) (PC) + rel
Косвенный относительный переход JMP @A+DPTR (PC) (A) + (DPTR)
Переход, если аккумулятор равен нулю JZ rel (PC)(PC)+2, если (A)=0, то (PC)(PC)+rel
Переход, если аккумулятор не равен нулю JNZ rel (PC)(PC)+2, если (A)≠ 0, то (PC)(PC)+rel
Переход, если перенос равен единице JC rel (PC)(PC)+2, если (С)=1, то (PC)(PC)+rel
Переход, если перенос равен нулю JNC rel (PC)(PC)+2, если (С)=0, то (PC)(PC)+rel
Переход, если бит равен единице JB bit, rel (PC)(PC)+3, если (b)=l, то (PC)(PC)+rel
Переход, если бит равен нулю JNB bit, rel (PC)(PC)+3, если (b)=0, то (PC)(PC)+rel
Переход, если бит установлен, с последующим сбросом бита JBC bit, rel (PC) (PC) + 3, если (b)=1, то (b) 0 и (PC) (PC) + rel
Декремент регистра и переход, если не нуль DJNZ Rn, rel (PC) (PC) + 2, (Rn) (Rn) - 1, если (Rn) ≠ 0, то (PC) (PC) + rel
Декремент прямоадресуемого байта и переход, если не нуль DJNZ ad, rel (PC) (PC) + 2, (ad) (ad) - 1, если (ad) ≠ 0, то (PC) (PC) + rel
Сравнение аккумулятора с прямоадресуемым байтом и переход, если не равно CJNE A, ad, rel (PC) (PC) + 3, если (A) ≠ (ad), то (PC) (PC) + rel, если (A) < (ad), то (C) 1, иначе (C) 0
Сравнение аккумулятора с константой и переход, если не равно CJNE A, #d, rel (PC) (PC) + 3, если (A) ≠ #d, то (PC) (PC) + rel, если (A) < #d, то (C) 1, иначе (С) 0
Сравнение регистра с константой и переход, если не равно CJNE Rn, #d, rel (PC) (PC) + 3, если (Rn) ≠ #d, то (PC) (PC) + rel, если (Rn) < #d, то (C) 1, иначе (С) 0
Сравнение байта в РПД с константой и переход, если не равно CJNE @Ri, d, rel (PC) (PC) + 3, если ((Ri)) ≠ #d, то (PC) (PC) + rel, если ((Ri)) < #d, то (C) 1, иначе (C) 0
Длинный вызов подпрограммы LCALL adl6 (PC) (PC) + 3, (SP) (SP) + 1, ((SP)) (PC0…7), (SP) (SP) + 1, ((SP)) (PC8…15), (PC) ad16
Абсолютный вызов подпрограммы в пределах страницы в 2 Кб ACALL ad11 (PC) (PC) + 2, (SP) (SP) + 1, ((SP)) (PC0…7), (SP) (SP) + 1, ((SP)) (PC8…15), (PC0-10) ad11
Возврат из подпрограммы RET (PC8…15) ((SP)), (SP) (SP) - 1, (PC0…7) ((SP)), (SP) (SP) – 1
Возврат из подпрограммы обработки прерывания RETI (PC8…15) ((SP)), (SP) (SP) - 1, (PC0…7) ((SP)), (SP) (SP) – 1
Пустая операция NOP (PC) (PC) + 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; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.018 с.)
Главная | Случайная страница | Обратная связь