MCS-51 (1031646), страница 14
Текст из файла (страница 14)
Переход внутри участка памяти, определяемый 8-разрядной величиной смещения, осуществляется по команде SJMP.В табл. 2.22 приведены конструкции, влияющие на установку флагов.В табл. 2.23 приведены обозначения и символы, используемые в системе команд.Систему команд ОМЭВМ условно можно разбить на пять групп:− арифметические команды;− логические команды с байтовыми переменными;− команды передачи данных;− команды битового процессора;− команды ветвления программ и передачи управления ОМЭВМ.Таблица 2.22. Команды, влияющие на установку флаговМнемоникаФлагиФлагиМнемоникаCOVACCOVACADDXXXCLR С0ADDCXXXCPL СXSUBBXXXANL С, bitXMUL0XANL С,/bitXDIV0XORL C, bitXDAXORL C,/bitXRRCXMOV C,/bitXRLCXCJNEXSETB С1Примечания:1.
X - флаг равен 0 или 1.2. Операции над SFR с адресом байта 208 или с адресами битов 209—215 (т.е. PSWили бит PSW) также влияют на установку флагов.Таблица 2.23Обозначение,символАRrгdirect@Rrdata 8data 16НазначениеАккумуляторРегистры текущего выбранного банка регистров.Номер загружаемого регистра, указанного в команде.Прямо адресуемый 8-битовый внутренний адрес ячейки данных, который может быть ячейкой внутреннего ОЗУ данных(0-127) или SFR (128-255).Косвенно адресуемая 8-битовая ячейка внутреннего ОЗУ данных.8-битовое непосредственное данное, входящее в код операции(КОП).16-битовое непосредственное данное, входящее КОП.65Продолжение таблицы 2.23Обозначение,символdata Hdata Laddr 11addr 16addr Ldisp 8bital5,al4...a0(X)((X)) (X)[Ml(X)[M1-M2]+*/ANDORXRL/XНазначениеСтаршие биты (15-8) непосредственных 16-битовых данных.Младшие биты (7-0) непосредственных 16-битовых данных.11-битовый адрес назначения.16-битовый адрес назначения.Младшие биты адреса назначения.8-битовый байт смещения со знаком.Бит с прямой адресацией, адрес которого содержит КОП, находящийся во внутреннем ОЗУ данных или SFR.Биты адреса назначения.Содержимое элемента XСодержимое по адресу, хранящемуся в элементе X Разряд Мэлемента XГруппа разрядов М1-М2 элемента XОперации:сложениявычитанияумноженияделениялогического умножения (операция И)логического сложения (операция ИЛИ)сложения по модулю 2 (операция "Исключающее ИЛИ")инверсия элемента X2.4.1 Арифметические командыВ наборе команд ОМЭВМ имеются следующие арифметические операции сложение, сложение с учетом флага переноса, вычитание с заемом, инкрементирование, декрементирование, сравнение, десятичная коррекция, умножение и деление.
Список арифметических команд приведен в таблице 2.4.1. В столбце «КОП» приведен код операции.Символами rrr в коде закодирован номер регистра, участвующего в операции. В столбцах«Ц» и «Б» приведено число машинных циклов на выполнение команды и число байт, занимаемых командой в памяти программ.В АЛУ производятся действия над целыми числами без знака. В двухоперандныхоперациях: сложение (ADD), сложение с переносом (ADDC) и вычитание с заемом(SUBB) аккумулятор является первым операндом и принимает результат операции.
Вторым операндом может быть рабочий регистр выбранного банка рабочих регистров, регистр внутренней памяти данных с косвенно-регистровой и прямой адресацией или байтнепосредственных данных. Указанные операции влияют на флаги: переполнения, переноса, промежуточного переноса и флаг четности в слове состояния процессора (PSW)Использование разряда переноса позволяет многократно повысить точность пр»операциях сложения (ADDC) и вычитания (SUBB).Выполнение операций сложения и вычитания с учетом знака может быть осуществлено с помощью программного управления флагом переполнения (0V) регистра PSW.Флаг промежуточного переноса (АС) обеспечивает выполнение арифметических операций в двоично-десятичном коде.Операции инкрементирования и декрементирования на флаги не влияют.66Таблица 2.4.1.
Группа команд арифметических операцийНазвание командыМнемокодКОПЦ Б ОперацияСложение аккумулятора с региADD A, Rn00101rrr 1 2 (A)←(A)+(Rn)стром (n=0-7)Сложение аккумулятора с прямо ADD A, ad00100101 1 2 (A)←(A)+(ad)адресуемым байтомСложение аккумулятора с байADD A,00100111 1 1 (A)←(A)+((Ri))том из РПД@R1Сложение аккумулятора с конADD A, #d00100100 1 2 (A)←(A)+#dстантой .Сложение аккумулятора с региADDC A, Rn 00111rrr 1 1 (А)←(А)+(Rn)+(С)стром и переносомСложение аккумулятора с прямо ADD A, ad00110101 1 2 (A)←(A)+(Rn)+(C)адресуемым байтом и переносомСложение аккумулятора с байADDC A,00110100 1 1 (A)←(A)+((Ri))+(C)том из РПД и переносом@Ri00100111Сложение аккумулятора с конADDC A, #d 00110100 1 2 (A)←(A)+#d+(C)стантой и переносомДесятичная коррекция аккумуDA A11010100 1 1лятораВычитание из аккумулятора реSUBB A, Rn 10011rrr 1 1 (A)←(A)-(C)-(Rn)гистра и заемаВычитание из аккумулятораSUBB A, Ad 10010101 1 1 (A)←(A)-(C)-((ad))прямо адресуемого байта и заемаВычитание из аккумулятора бай- SUBB A,10010111 1 1 (A)←(A)-(C)-(Ri)та РПД и заема@RiВычитание из аккумулятора кон- SUBB A, #d 10010100 1 2 (A)←(A)-(C)-#dстанты и заемаИнкремент аккумулятораINC A00000100 1 1 (A)←(A)+1Инкремент регистраINC Rn00001rrr 1 1 (Rn)←(Rn)+1Инкремент прямо адресуемогоINC ad00000101 1 2 (ad)←(ad)+1байтаИнкремент байта а РПДINC @Ri0000011i 1 1 ((Ri))←((Ri))+1Инкремент указателя данныхINC DPTR10100011 2 1 (DPTR)←(DPTR)+1Декремент аккумулятораDEC A00010100 1 1 (А)←(А)-1Декремент регистраDEC Rn00011rrr 1 1 (Rn)←(Rn)-1Декремент прямо адресуемогоDEC ad00010101 1 2 (ad)←(ad)-1байтаДекремент байта в РПДDEC @Ri0001011i 1 1 ((Ri))←((Ri))-1Умножение аккумулятора на ре- MUL AB10100100 4 1 (B)(A)←(A)X(B)гистр ВДеление аккумулятора на реDIV AB10000100 4 1 (B).(A)←(A)/(B)гистр ВОперации сравнения не влияют ни на операнд назначения, ни на операнд источника, но они влияют на флаг переноса.Существуют три арифметические операции, которые выполняются только на аккумуляторе: две команды проверки содержимого аккумулятора A (JZ, JNZ), и команда десятичной коррекции при сложении двоично-десятичных кодов.67При операции умножения содержимое аккумулятора А умножается на содержимоерегистра В и результат размещается следующим образом: младший байт в регистре В,старший — в регистре А.В случае выполнения операции деления целое от деления помещается в аккумулятор А, остаток от деления — в регистр В.2.4.2 Логические команды с байтовыми переменными.Система команд ОМЭВМ позволяет реализовать логические операции: "И", "ИЛИ","ИСКЛЮЧАЮЩЕЕ ИЛИ" на регистре-аккумуляторе (А) и байте-источнике.
Вторым операндом (байтом-источником) при этом может быть рабочий регистр в выбранном банкерабочих регистров; регистр внутреннего ОЗУ, адресуемый с помощью косвеннорегистровой адресации; прямоадресуемые ячейки внутреннего ОЗУ и регистры специального назначения; непосредственная величина. Список логических команд приведен в таблице 2.4.2. В столбце «КОП» приведен код операции.
Символами rrr в коде закодированномер регистра, участвующего в операции. В столбцах «Ц» и «Б» приведено число машинных циклов на выполнение команды и число байт, занимаемых командой в памятипрограмм.Указанные логические операции могут быть реализованы на любом прямоадресуемом регистре внутреннего ОЗУ или регистре специального назначения с использованием в качестве второго операнда содержимого аккумулятора А или непосредственныхданных.Существуют логические операции, которые выполняются только на аккумуляторе:сброс и инвертирование всех восьми разрядов А; циклический сдвиг влево и вправо;ИКлический сдвиг влево и вправо с учетом флага переноса; обмен местами старшей имладшей тетрад (ниблов) внутри аккумулятора.Таблица2.4.2 Группа команд логических операцийНазвание командыЛогическое И аккумулятора и регистраЛогическое И аккумулятора и прямо адресуемого байтаЛогическое И аккумулятора и РПДЛогическое И аккумулятора иконст.Логическое ИЛИ аккумулятора ипрямо адресуемого байтаЛогическое ИЛИ аккумулятора ирегистраЛогическое ИЛИ аккумулятора иРПДЛогическое ИЛИ аккумулятора иконстантыЛогическое ИЛИ прямо адресуемого байта и аккумулятораЛогическое ИЛИ прямо адресуемого байта м константыЛогическое ИЛИ прямо адресуемого байта и аккумулятораИсключающее ИЛИ аккумуляторам регистраМнемокодANL A, RnКОПO1OllrrrЦ Б Операция1 1 (А)←(А)∩(Rn)ANL A, ad010101011 1 (А)←(А)∩(ad)ANL A, @RiANL A, #d01010111O1Ollrrr1 2 (А)←(А)∩((Ri))1 2 (А)←(А)∩#dORL A, ad010001011 1 (A)←(A)∪(ad)ORL A, RnO1001rrr11 (A)←(A)∪(Rn)ORL A, @Ri0100011111 (A)←(A) ∪ ((R1))ORL A, #d010001001 2 (A)←(A) ∪ #dORL ad, A010000101 2 (ad)←(ad) ∪ (A)ORL ad, #d010000102ORL ad, A010000101 2 (ad) ←(ad) ∪ (A)XRL A, RnOl101rrr13 (ad)←(ad) ∪ #d1 (A) ← (A)¤(Rn)68Продолжение таблицы 4.