Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Общие сведения о системе команд




МИКРОКОНТРОЛЛЕРА MSC 51

Система команд микроконтроллера MSC 51 содержит 111 базовых команд, которые по функциональному признаку разделяются на пять групп: команды передачи данных, арифметических операций, логических операций, передачи управления и операций с битами. Большинство команд (94) имеет формат один или два байта и выполняются за один или два машинных цикла (при тактовой частоте 12 МГц длительность машинного цикла составляет 1 мкс).

 

Команды передачи данных представлены в табл. 9.

Таблица 9

НАЗВАНИЕ КОМАНДЫ МНЕМОНИКА ОПЕРАЦИЯ
Пересылка в аккумулятор из регистра (n=0...7) MOV А,Rn (А) ← (Rn)
Пересылка в аккумулятор прямоадресуемого байта MOV A,ad (А) ← (ad)
Пересылка в аккумулятор байта из внут. ОЗУ (i=0, 1) MOV A,@Ri (A) ← ((Ri))
Загрузка в аккумулятор константы MOV A,#data8 (А) ← #data8
Пересылка в регистр из аккумулятора MOV Rn,А (Rn) ← (А)
Пересылка в регистр прямоадресуемого байта MOV Rn,аd (Rn) ← (ad)
Загрузка в регистр константы MOV Rn,#dаtа8 (Rn) ← #data8
Пересылка по прямому адресу аккумулятора MOV ad,A (ad) ← (А)
Пересылка по прямому адресу регистра MOV аd,Rn (ad) ← (Rn)
Пересылка прямоадресуемого байта по прямому адресу MOV add,ads (add) ← (ads)
Пересылка байта из внут. ОЗУ по прямому адресу MOV ad,@Ri (ad) ← ((Ri))
Пересылка по прямому адресу константы MOV ad,#data8 (ad) ← #data8
Пересылка во внут. ОЗУ из аккумулятора MOV @Ri,A ((Ri)) ← (А)
Пересылка во внут. ОЗУ прямоадресуемого байта MOV @Ri,ad ((Ri)) ← (ad)
Пересылка во внут. ОЗУ константы MOV @Ri,#data8 ((Ri)) ← #data8
Загрузка указателя данных MOV DPТR,#data16 (DPТR) ← #data16
Пересылка в аккумулятор байта из памяти программ MOVC A,@A+DPТR (А) ← ((А) + (DPТR))
Пересылка в аккумулятор байта из памяти программ MOVC А,@А+РС (РС)←(РС) + 1; (А)←((А) +(РС))
Пересылка в аккумулятор байта из внеш. ОЗУ MOVX A,@Ri (А) ← ((Ri))
Пересылка в аккумулятор байта из расширенного внеш.ОЗУ MOVX A,@DPТR (А) ← ((DPТR))
Пересылка во внеш. ОЗУ из аккумулятора MOVX @Ri,A ((Ri)) ← (А)
Пересылка в расширенное внеш. ОЗУ из аккумулятора MOVX @DPТR,A ((DPТR)) ← (А)
Загрузка в стек PUSH ad (SP) ← (SP) + 1; ((SP)) ← (ad)
Извлечение из стека РОР ad (ad) ← ((SP)); (SP) ← (SP) - 1
Обмен аккумулятора с регистром ХСН A,Rn (А) ↔ (Rn)
Обмен аккумулятора с прямоадресуемым байтом ХСН,ad (А) ↔ (ad)
Обмен аккумулятора с байтом из внут. ОЗУ ХСН A,@Ri (А) ↔ ((Ri))
Обмен мл. тетрады аккумулятора с мл. тетрадой байта внут. ОЗУ ХСНD A,@Ri (А0...3) ↔ ((Ri0...3))

В табл.9 используются следующие обозначения:

А – аккумулятор;

Ri – адресный регистр текущего банка (i = 0 или 1);

Rn – регистр общего назначения (РОН) текущего банка; n = 0 ÷ 7;

PC – счетчик команд;

DPTR – регистр-указатель данных;

ad – адрес или мнемоническое обозначение 8-битного операнда (ячейка ОЗУ, регистры специальных функций);

add – адрес или мнемоническое обозначение 8-битного операнда-приемника данных (ячейка ОЗУ, регистры специальных функций);

ads – адрес или мнемоническое обозначении 8-битного операнда-источника данных (ячейка ОЗУ, регистры специальных функций);

#data8 – 8-битное число (константа);

#data16 – 16-битное число (константа);

SP – указатель стека;

@ – префикс косвенной адресации;

 

Примечание к табл. 9. Регистры специальных функций (в том числе и порты ввода-вывода) адресуются только прямым способом. Байты памяти (ОЗУ и ПЗУ) адресуются также и косвенным способом через адресные регистры R0, R1, DPTR и PC.

В табл. 9 не приведены сведения о кодах операций, количестве байтов и циклов каждой команды.

Символическое описание выполняемой команды приведено в 3 столбце табл.9. Обозначение операнда в одинарных скобках указывает на содержимое ячейки, адрес которой указан в скобках, а стрелка – направление пересылки данных. Обозначение операнда в двойных скобках указывает на ячейку, в которой в свою очередь содержится адрес ячейки с данными, подлежащими пересылке (косвенная адресация).

 

Арифметические команды представлены в табл. 10.

Таблица 10

НАЗВАНИЕ КОМАНДЫ МНЕМОНИКА ОПЕРАЦИЯ
Сложение аккумулятора с регистром (n=0...7) АDD A,Rn (А) ← (А) +(Rn)
Сложение аккумулятора с прямо адресуемым байтом АDD A,ad (А) ← (А) +(ad)
Сложение аккумулятора с байтом из внут. ОЗУ (i = 0, 1) АDD A,@Ri (А) ← (А) + ((Ri))
Сложение аккумулятора с константой АDD A,#data8 (А) ← (А) + #data8
Сложение аккумулятора с регистром и переносом АDDC A,Rn (А) ← (А) +(Rn) + (C)
Сложение аккумулятора с прямоадресуемым байтом и переносом АDDC A,ad (А) ← (А) +(ad) + (C)
Сложение аккумулятора с байтом из внут. ОЗУ и переносом АDDC A,@Ri (А) ← (А) + ((Ri))+ (C)
Сложение аккумулятора с константой и переносом АDDC A,#data8 (А) ← (А) + #data8+ (C)
Десятичная коррекция аккумулятора DА А Если (А0 -3)>9 V ((C) = 1), то (А0-3) ← (А0-3)+6. Затем если (А4-7)>9 V ((C) = 1), то (А4-7) ← (А4-7)+6
Вычитание из аккумулятора регистра и заёма SUBB A,Rn (А) ← (А) -(Rn) - (C)
Вычитание из аккумулятора прямоадресуемого байта и заёма SUBB A,ad (А) ← (А) -(ad) - (C)
Вычитание из аккумулятора байта из внут. ОЗУ и заёма SUBB A,@Ri (А) ← (А) - ((Ri))- (C)
Вычитание из аккумулятора константы и заёма SUBB A,#data8 (А) ← (А) - #data8- (C)
Инкремент аккумулятора INC А (А) ← (А) +1
Инкремент регистра INC Rn (Rn) ←(Rn) + 1
Инкремент прямоадресуемого байта INC ad (ad) ←(ad) + 1
Инкремент байта из внут. ОЗУ INC @Ri ((Ri)) ← ((Ri)) + 1
Инкремент указателя данных INC DPTR (DPTR) ← (DPTR) + 1
Декремент аккумулятора DЕС А (А) ← (А) -1
Декремент регистра DЕС Rn (Rn) ←(Rn) - 1
Декремент прямоадресуемого байта DЕС ad (ad) ←(ad) - 1
Декремент байта из внут. ОЗУ DЕС @Ri ((Ri)) ← ((Ri)) - 1
Умножение аккумулятора и регистра В MUL AB (В)(А) ← (А) * (В)
Деление аккумулятора на регистр В DIV AB (А),(В) ← (А)/ (В)

 

Обозначения в табл.10: V – логическое ИЛИ.

Приведенные команды не требуют пояснения за исключением одной – команды десятичной коррекции аккумулятора (DА А). Эта команда используется только при сложении двух двоично-десятичных[ чисел, хранящихся в аккумуляторе и другой ячейке памяти. Команда корректирует предшествующую ей операцию сложения ADD или ADDC.

 

Логические команды представлены в табл. 11.

Таблица 11

НАЗВАНИЕ КОМАНДЫ МНЕМОНИКА ОПЕРАЦИЯ
Логическое И аккумулятора и регистра (n=0...7) ANL A,Rn (А) ← (А) ^ (Rn)
Логическое И аккумулятора и прямоадресуемого байта ANL A,ad (А) ← (А) ^ (ad)
Логическое И аккумулятора c байтoм из внут. ОЗУ (i = 0,1) ANL A,@Ri (А) ← (А) ^ ((Ri))
Логическое И аккумулятора и константы ANL A,#data8 (А) ← (А) ^ #data8
Логическое И прямоадресуемого байта и аккумулятора ANL ad,A (ad) ← (ad) ^ (А)
Логическое И прямоадресуемого байта и константы ANL ad,#data8 (ad) ← (ad) ^ #data8
Логическое ИЛИ аккумулятора и регистра (n = 0...7) ORL A,Rn (А) ← (А) V (Rn)
Логическое ИЛИ аккумулятора и прямоадресуемого байта ORL A,ad (А) ← (А) V. (ad)
Логическое ИЛИ аккумулятора с байтом из внут. ОЗУ (i = 0, 1) ORL A,@Ri (А) ← (А) V. ((Ri))
Логическое ИЛИ аккумулятора и константы ORL A,#data8 (А) ← (А) V #data8
Логическое ИЛИ прямоадресуемого байта и аккумулятора ORL ad,A (ad) ← (ad) V (А)
Логическое ИЛИ прямоадресуемого байта и константы ORL ad,#data8 (ad) ← (ad) V #data8
Исключающее ИЛИ аккумулятора и регистра (n = 0...7) XRL A,Rn (А) ← (А) ИЛИ искл. (Rn)
Исключающее ИЛИ аккумулятора и прямоадресуемого байта XRL A,ad (А) ← (А) ИЛИ искл. (ad)
Исключающее ИЛИ аккумулятoра c байтoм из внут. ОЗУ (i = 0,1) XRL A,@Ri (А) ← (А) ИЛИ искл. ((Ri))
Исключающее ИЛИ аккумулятора и константы XRL A,#data8 (А) ← (А) ИЛИ искл. #data8
Исключающее ИЛИ прямоадресуемого байта и аккумулятора XRL ad,A (ad) ← (ad) ИЛИ искл. (А)
Исключающее ИЛИ прямоадресуемого байта и константы XRL ad,#data8 (ad) ← (ad) ИЛИ искл. #data8
Сброс аккумулятoра CLR A (А) ← 0
Инверсия аккумулятора CPL A (А) ← (инв. А)
Сдвиг аккумулятора влево циклический RL A (А.n+1) ← (А.n), n=0-6; (А.0) ← (А.7)
Сдвиг аккумулятора влево через перенос RLC A (А.n+1)← (А.n), n=0-6; (А.0)←(С); (С)←(А.7)
Сдвиг аккумулятора вправо циклический RR A (А.n) ← (А.n+1), n=0-6; (А.7) ← (А.0)
Сдвиг аккумулятора вправо через перенос RRC A (А.n)←(А.n+1), n=0-6; (А.7)←(С); (С) ←(А.0)
Обмен местами тетрад в аккумуляторе SWAP A (А.1, А.1, А.2, А.З) ↔ (А.4, А.5, А:6, А.7)

 

Обозначения в табл.11: V – логическое ИЛИ; ^ – логическое И;

Команды с битами представлены в табл. 12

Таблица 12

НАЗВАНИЕ КОМАНДЫ МНЕМОНИКА ОПЕРАЦИЯ
Сброс переноса CLR C (С) ← 0
Сброс бита CLR bit (bit) ← 0
Установка переноса SEТВ С (С) ← 1
Установка бита SEТВ bit (bit) ← 1
Инверсия переноса CPL C (С) ← инв. (С)
Инверсия бита CPL bit (bit) ←инв. (bit)
Логическое И бита и переноса ANL C,bit (С) ← (С) ^ (bit)
Логическое И инверсии бита и переноса ANL C,/bit (С) ← (С) ^ инв.(bit)
Логическое ИЛИ бита и переноса ORL C,bit (С) ← (С) V (bit)
Логическое ИЛИ инверсии бита и переноса ORL C,/bit (С) ← (С) Vинв.(bit)
Пересылка бита в перенос MOV C,bit (С) ← (bit)
Пересылка переноса в бит MOV bit,С (bit) ← (С)

Примечание к табл. 12. Если в качестве операнда bit используется бит аккумулятора, то его мнемоническое обозначение следует представлять в виде ACC.n (n=0÷7).

 

Группа команд передачи управления указана в табл. 13

Таблица 13

НАЗВАНИЕ КОМАНДЫ МНЕМОНИКА ОПЕРАЦИЯ
Длинный абсолютный переход в полном объеме памяти программ LJMP ad16 (РС) ← ad16
Абсолютный переход внутри двухкилобайтной страницы АJMP ad11 (РС) ← (РС)+2, затем (РС 0-10) ← ad11
короткий относительный переход внутри страницы 256 байт SJMP rel (РС) ← (РС)+2, затем (РС) ← (РС)+геl
Косвенный относительный переход JMP @A+DPТR (РС) ← (A)+(DP1R)
Переход, если аккумулятор равен 0 JZ rel (РС) ← (РС)+2, затем если (А)=0, то (РС)←(РС)+геl
Переход, если аккумулятор не равен 0 JNZ rel (РС)← (РС)+2,затем если (А)<>0,то (РС)←(РС)+rеl
Переход, если перенос равен единице JC rel (РС)← (РС)+2, затем если (C)=1,то (РС)←(РС)+rеl
Переход, если перенос равен нулю JNC rel (РС)← (РС)+2, затем если (C)=0,то (РС)←(РС)+rеl
Переход, если бит равен единице JB bit,rel (РС)← (РС)+3, затем если bit=1,то (РС)←(РС)+rеl
Переход, если бит равен нулю JNB bit,rel (РС)← (РС)+3, затем если bit=0,то (РС)←(РС)+rеl
Переход, если бит установлен, с последующим сбросом бита JBC bit,rel (РС)← (РС)+3, затем если bit=1, то (РС)←(РС)+rеl, (bit) ← 0
Декремент регистра и переход, если не нуль DJNZ Rn,rel (РС) ← (РС)+2, (Rn) ← (Rn) -1, затем если (Rn)<>0, то (РС) ← (РС)+геl
Декремент прямоадресуемого байта и переход, если не нуль DJNZ ad,rel (РС) ← (РС)+2, (ad) ← (ad) -1, затем если (ad)<>0, то (РС) ← (РС)+геl
Сравнение аккумулятора с прямоадресуемым байтом и переход, если не равно CJNE A,ad,rel (РС) ← (РС)+3, если (А)<> (ad), то (РС) ← (PC)+rel, при этом если (A) < (ad), то (С) ← 1, иначе (С) ← 0
Сравнение аккумулятора с константой и переход, если не равно CJNE A,#data8,rel (РС)←(РС)+З, если (A)<>#data8, то (РС) ←(PC)+rel,при этом если (A)<#data8. то (С) ← 1, иначе (С) ←0
Сравнение регистра с константой и переход, если не равно CJNE Rn,#dаtа8,геl (РС)←(РС)+З, если (Rn)<>#data8, то (РС) ←(PC)+rel, при этом если (Rn)<#data8. то (С) ← 1, иначе (С) ←0
Сравнение байта во внутреннем ОЗУ с константой и переход, если не равно CJNE @Ri,#data8,rel (РС)←(РС)+З, если ((Ri))<>#data8, то (РС) ←(PC)+rel, при этом если ((Ri))<#data8. то (С) ← 1, иначе (С) ←0
Длинный абсолютный вызов подпрограммы LCALL ad16 (РС) ← (РС)+3; (SP) ← (SP)+1 и ((SP)) ← (РС 0-7); затем (SP) ← (SP)+1 и ((SP)) ← (РС 8-15); затем (РС) ← ad16
Абсолютный вызов подпрограммы внутри двухкилобайтной страницы ACALL ad11 (РС) ← (РС)+3; (SP) ← (SP)+1 и ((SP)) ← (РС 0-7);затем (SP) ← (SP)+1 и ((SP)) ← (РС 8-15); затем (РС 0-10) ← ad11
Возврат из подпрограммы RET (РС 8-15) ← ((SP)); (SP) ← (SP)-1; затем (РС 0-7) ← ((SP)); (SP) ← (SP)-1
Возврат из подпрограммы обработки прерывания RETI (РС 8-15) ← ((SP)); (SP) ← (SP)-1; затем (РС 0-7) ← ((SP)); (SP) ← (SP)-1
Холостая команда NOP (PC) ← (PC)+1

 

Примечание к табл. 13. Под символическим обозначением операнда ad16, ad11, rel в командах прикладной программы, как правило, используется имя метки. Некоторые ассемблеры MCS 51 позволяют использовать вместо команд безусловных переходов LJMP, AJMP, SJMP обобщенную команду JMP. В противном случае можно для все случаев рекомендовать к применению команду LJMP.

 

Команды, модифицирующие флаги результата.

 

Регистр состояния микроконтроллера PSW содержит 4 флага:CY – переноса, АС – вспомогательного переноса, ОV – переполнения, и Р – флаг паритета.

Флаг АС устанавливается в случае, если при выполнении операций сложения или вычитания между тетрадами байта аккумулятора возник перенос или заем.

Флаг CY устанавливается, если перенос или заем возникает в старшем бите результата. При выполнении операций умножения и деления флаг CY сбрасывается.

Флаг OV устанавливается, если результат операции сложения или вычитания не укладывается в семи младших битах аккумулятора, и содержимое старшего бита изменяется в сравнении с исходным. Флаг устанавливается также если результат умножения больше 255 или в случае деления на 0. Если делитель не равен нулю, то независимо от результата деления флаг OV сбрасывается.

Флаг паритета Р зависит от текущего значения аккумулятора. Если число единичных бит аккумулятора нечетное, то флаг Р устанавливается в 1, а если нечетное – то сбрасывается.

В табл. 14 перечислены команды, при выполнении которых происходит модификация перечисленных флагов. Следует отметить, что отсутствующий в табл. 14 флаг паритета модифицируют все команды, изменяющие состояние аккумулятора. В табл. 14 также не приведены:

– команды, в которых местом назначения результата является регистр состояния PSW или его отдельные биты;

– команды операций над битами регистра PSW.

Таблица 14

КОМАНДЫ МОДИФИЦИРУЕМЫЕ ФЛАГИ
ADD CY,OV,AC
ADDC CY,OV,AC
SUBB CY,OV,AC
MUL CY=0, OV
DIV CY=0, OV
DA A CY
RRC CY
RLC CY
SETB C CY=1
CLR C CY=0
CPL C CY = /CY
ANL C,bit CY
ANL C,/bit CY
ORL C,bit CY
ORL C,/bit CY
MOV C,bit CY
CJNE CY

 





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


Дата добавления: 2016-12-29; Мы поможем в написании ваших работ!; просмотров: 566 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Студент может не знать в двух случаях: не знал, или забыл. © Неизвестно
==> читать все изречения...

2817 - | 2385 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.