Система команд ВЕ51
Система насчитывает 111 команд, из них 49 однобайтовых, 45 двухбайтовых и 17 трехбайтовых. Появление трехбайтовых команд связано с расширением объемов CSEG и XSEG, а также вводом прямой адресации в DSEG. Все команды выполняются за один или два машинных цикла (12 тактов ALE) за исключением команд MUL и DIV, которые требуют четыре цикла. Большинство двухбайтовых команд одноцикловые, а все трехбайтовые команды—двухцикловые. Это объясняется тем, что за один машинный цикл в ВЕ51 может вводиться до двух байтов программного кода.
Все множество команд ВЕ51 удобно разбить на пять групп: пересылки (28), логической обработки (25), арифметической обработки (24), передачи управления (17), булевого процессора (17).
В процессе исполнения команды влияют на ряд флажков-признаков результата, входящих в состав PSW (табл. 4.10). Признак Р устанавливается всякий раз, когда приемником результата служит аккумулятор, включая операции пересылки.
Таблица 4.10
Мнемоники | CY | OV | AC | Мнемоника | CY | OV | AC | |
ADD | + | + | + | CLR С | – | – | ||
ADDC | + | + | + | CPL С | + | – | – | |
SUBB | + | + | + | ANL C, bit | + | – | – | |
MUL | + | – | ANL C, /bit | + | – | – | ||
DIV | + | – | ORL C, bit | + | – | – | ||
DA | + | – | – | ORL C, /bit | + | – | – | |
RRC | + | – | – | MOV C, bit | + | – | – | |
RLC | + | – | – | CJNE | + | – | – | |
SET С | – | – |
Группа команд пересылки (табл. 4.11) содержит команды MOV (пересылки данных между DSEG и RSEG), MOVC (между CSEG и А), MOVX (между XSEG и А или RSEG), команды обращения к стеку PUSH и POP, а также две команды обмена XCH и XCHD. Наиболее емкой инструкцией является команда MOV, которая использует четыре способа адресации: регистровый (А, Rn, DPTR), прямой (direct), косвенный (@Ri) и непосредственный (#data, #data 16). Для указания приемника служат три способа адресации (кроме непосредственного), для указания источника все четыре. Трехбайтовая команда MOV direct, direct обеспечивает пересылку между двумя любыми ячейками памяти, включая регистры МК. Тем не менее для обмена с регистрами предусмотрены специальные двух- и однобайтовый форматы:
MOV | Rn, direct |
MOV | direct, Rn |
MOV | A, Rn |
MOV | Rn, A |
Таблица 4.11
Мнемоника | Число циклов | Код | Флажки | Описание |
C A F R R O P I C 0 S S V | ||||
MOV A, Rn MOV A, direct MOV A, @Ri MOV A, #data MOV Rn, A MOV Rn, direct MOV Rn, #data MOV direct, A MOV direct, Rn MOV direct, direct MOV direct, @Ri MOV direct, #data MOV @Ri, A MOV @Ri, direct MOV @Ri, #data MOV DPTR, #data16 MOVC A, @A + DPTR MOVC A, @A + PC MOVX A, @Ri MOVX A, @DPTR MOVX @Ri, A MOVX @DPTR, A PUSH direct POP direct XCH A, Rn XCH A, direct XCH A, @Ri XCHD A, @Ri | E8—EF E5 E6—E7 F8—FF A8—AF 78—7F F5 88—8F 86—87 F6—F7 A6—A7 76—77 E2—E3 E0 F2—F3 F0 C0 D0 C8—CF C5 C6—C7 D6—D7 | – – – – – – + – – – – – – + – – – – – – + – – – – – – + – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – + – – – – – – + – – – – – – + – – – – – – + – – – – – – – – – – – – – – – – – – – – – + + + + + + + – – – – – – + – – – – – – + – – – – – – + – – – – – – + | ARn, n = 0—7 A(direct) A(Ri), i = 0—1 Adata RnA, n = 0—7 Rn(direct), n = 0—7 Rndata, n = 0—7 (direct)A (direct)Rn, n = 0—7 (direct)(direct) (direct)(Ri), n = 0—7 (direct)data (Ri)A, i = 0—1 (Ri)(direct), i = 0—1 (Ri)data, i = 0—1 DPTRdata16 ACSEG (A + DPTR) ACSEG (A + PC) AXSEG (P2:Ri), i = 0—1 AXSEG (DPTR) XSEG (P2:Ri)A, i = 0—1 XSEG (DPTR)A +(SP)(direct) (direct)(SP) A«Rn, n= 0—7 A«(direct) A«(Ri), i = 0—1 A0—3«(Ri)0—3, i = 0—1 |
Их использование позволяет существенно сократить длину программного кода. Специальная команда
MOV DPTR, #data 16
позволяет загрузить 16-разрядный указатель DPTR значением data 16.
При выполнении команды MOVC считывания данных из программной памяти могут быть применены два способа адресации: по базе DPTR и относительный. В обоих случаях целое без знака смещение (индекс) хранится в аккумуляторе. Приемником результата также служит аккумулятор. Команда дает возможность выполнять быструю перекодировку по таблицам, осуществлять доступ к массивам памяти.
Обращение к внешней памяти осуществляется с помощью команды MOVX. Обмен производится по байтам между аккумулятором и ячейкой внешней памяти данных. Ячейка XSEG может быть адресована двумя способами: косвенно через 16-разрядный указатель DPTR и странично косвенно через 8-разрядный указатель Ri, i = 0—1. В последнем случае регистром страниц служит выходной регистр Р2.
Операции PUSH и POP используют только прямой способ адресации, однако это не мешает им манипулировать содержимым регистров, которые рассматриваются как ячейки памяти.
Две типовые операции обмена ХСН и XCHD дополняют одностороннюю пересылку двусторонней. При выполнении операции ХСН обмену подлежат байты, при XCHD—младшие тетрады байтовых операндов.
Приведенная в табл. 4.12 группа команд логических операций содержит три типовые двухместные операции: ANL—логическое И, ORL—логическое ИЛИ и XRL—логическое исключающее ИЛИ. Источником первого операнда и одновременно приемником результата служит либо аккумулятор А, либо прямо адресуемая ячейка памяти. Второй операнд задается одним из четырех основных методов адресации. В состав группы входит также ряд одноместных операций: CLR—очистки, CPL—логического дополнения (инверсия), а также RL, RLC, RR и RRC—операции циклического и расширенного сдвигов вправо и влево. Все операции манипулируют содержимым только аккумулятора А. Сюда же включена операция обмена тетрад в аккумуляторе SWAP, которая может интерпретироваться как циклический сдвиг байта на четыре разряда.
Таблица 4.12
Мнемоника | Числоциклов | Код | Флажки | Описание |
C A F R R O P Y C 0 S S V | ||||
ANL A, Rn ANL A, direct ANL A, @Ri ANL A, #data ANL direct, A ANL direct, #data ORL A, Rn ORL A, direct ORL A, @Ri ORL A, #data ORL direct, A ORL direct, #data XRL A, Rn XRL A, direct XRL A, @Ri XRL A, #data XRL direct, A XRL direct, #data CLR A CPL A RL A RLC A RR A RRC A SWAP A | 58—5F 56—57 48—4F 46—47 68—6F 66—67 E4 F4 C4 | – – – – – – + – – – – – – + – – – – – – + – – – – – – + – – – – – – – – – – – – – – – – – – – – + – – – – – – + – – – – – – + – – – – – – + – – – – – – – – – – – – – – – – – – – – + – – – – – – + – – – – – – + – – – – – – + – – – – – – – – – – – – – – – – – – – – + – – – – – – – – – – – – – – + – – – – – + – – – – – – – + – – – – – + – – – – – – – | AA AND Rn, n = 0—7 AA AND (direct) AA AND (Ri), i = 0—1 AA AND data (direct)(direct) AND A (direct)(direct) AND data AA OR Rn, n = 0—7 AA OR (direct) AA OR (Ri), i = 0—1 AA OR data (direct)(direct) OR A (direct)(direct) OR data AA XOR Rn, n =0—7 AA XOR (direct) AA XOR (Ri), i = 0—1 AA XOR data (direct)(direct) XOR A (direct)(direct) XOR data A0 ANOT A A7A6…A0A7 CYA7A6…A0CY A0A1…A7A0 CYA0A1…A7CY A4—7«A0—3 |
В состав группы команд арифметической обработки (табл. 4.13) входят: операция сложения ADD, сложения с учетом переноса ADDC, вычитания с учетом займа SUBB, увеличения и уменьшения на единицу INC и DEC, десятичная коррекция сложения в 2/10-коде упакованного формата DA, умножение MUL и деление DIU. Операции выполняются над беззнаковыми целыми числами.
Таблица 4.13
Мнемоника | Число циклов | Код | Флажки | Описание |
C A F R R O P Y C 0 S S V | ||||
ADD A, Rn ADD A, direct ADD A, @Ri ADD A, #data ADDC A, Rn ADDC A, direct ADDC A, @Ri ADDC A, #data SUBB A, Rn SUBB A, direct SUBB A, @Ri SUBB A, #data INC A INC Rn INC direct INC @Ri INC DPTR DEC A DEC Rn DEC direct DEC @Ri MUL AB DIV AB DA A | 28—2F 26—27 38—3F 36—37 98—9F 96—97 08—0F 06—07 A3 18—1F 16—17 A4 | + + – – – + + + + – – – + + + + – – – + + + + – – – + + + + – – – + + + + – – – + + + + – – – + + + + – – – + + + + – – – + + + + – – – + + + + – – – + + + + – – – + + + + – – – + + – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – + – – – – – – – – – – – – – – – – – – – – – 0 – – – – + + 0 – – – – + + + – – – – – + | AA + Rn, n = 0—7 AA + (direct) AA + (Ri), i = 0—1 AA + data AA + Rn + CY, n = 0—7 AA + (direct) + CY AA + (Ri) + CY, i = 0—1 AA + data + CY AA – Rn – CY, n = 0—7 AA – (direct) – CY AA – (Ri) – CY, i = 0—1 AA – data – CY AA + 1 RnRn + 1, n = 0—7 (direct)(direct) + 1 (Ri)(Ri) + 1, i = 0—1 DPTRDPTR + 1 AA – 1 RnRn – 1, n = 0—7 (direct)(direct) – 1 (Ri)(Ri) – 1, i = 0—1 BAA´B ABA / B A2/10 коррекция A |
В операциях сложения и вычитания первым операндом и приемником результата служит аккумулятор. В качестве второго операнда выступает либо рабочий регистр Rn, n = 0—7, выбранного регистрового банка, либо ячейка памяти данных, адресуемая прямо direct или косвенно @Ri, i = 0—1, либо непосредственные данные #data. Операции INC и DEC применимы к аккумулятору, одному из рабочих регистров или к ячейке памяти, адресуемой как прямо, так и косвенно. Кроме этого операция увеличения на единицу может быть применена к содержимому регистра указателя DPTR.
В операциях целочисленного умножения и деления без знака участвуют аккумулятор и регистр В. При умножении 8-разрядное значение А умножается на 8-разрядное значение В, а 16-разрядный результат записывается в пару ВА. При этом регистр В хранит старшую часть произведения. Флажок переполнения OV устанавливается, если произведение больше 255. При делении 8-разрядного значения А на 8-разрядное значение В частное записывается в А, а остаток в В. При попытке деления на 0 устанавливается флажок переполнения. Операция десятичной коррекции для сложения DA осуществляется стандартным способом (см. § 2.3).
В составе группы команд передачи управления (табл. 4.14) находятся команды перехода AJMP, LJMP, SJMP, JMP, условного перехода JZ, JNZ, CJNE, вызова ACALL, LCALL, возврата RET, RETI и модификации с условным переходом DJNZ. Сюда же включена пустая команда NOP.
Таблица 4.14
Мнемоника | Числo циклов | Код | Флажки | Описание |
C A F R R O P Y C 0 S S V | ||||
ACALL addr11 LCALL addr16 RET RETI AJMP addr11 LJMP addr16 SJMP rel JMP @A+DPTR JZ rel JNZ rel CJNE A, direct, rel CJNE A, #data, rel CJNE Rn, #data, rel CJNE @Ri, #data, rel DJNZ Rn, rel DJNZ direct, rel NOP | aaa10001 aaa00001 B5 B4 B8—BF B6—B7 D8—DF D5 | – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – + – – – – – – + – – – – – – + – – – – – – + – – – – – – – – – – – – – – – – – – – – – – – – – – – | +(SP)PC, PC0—10addr11 +(SP)PC, PCaddr16 (PC)(SP)– (PC)(SP)–, конец прерывания PC0—10addr11 PCaddr16 PCPC + rel PCDPTR + A Если А = 0, то PCPC + rel Если А ¹ 0, то PCPC + rel Если А ¹ (direct), то PCPC + rel Если А ¹ (data), то PCPC + rel Если Rn ¹ (data),то PCPC + rel, n = 0—7 Если (Ri) ¹ (data), то PCPC + rel, i = 0—1 RnRn – 1. Если Rn ¹ 0, то PCPC + rel, n = 0—7 (direct)(direct) – 1. Если (direct) ¹ 0, то PCPC + rel Нет операции |
В командах передачи управления широко применяется относительная адресация, которая поддерживает перемещаемые программные модули. В качестве относительного адреса выступает 8-разрядное смещение rel со знаком, обеспечивающее ветвление от текущего положения PC в обе стороны на ±127 байт. Для перехода в любую другую точку 64К-байтового адресного пространства может быть использован либо прямой addr16, либо косвенный @A + DPTR адрес. В последнем случае содержимое А интерпретируется как целое без знака. Вариант короткой прямой адресации addr11 внутри 2К-байтовой текущей страницы введен для совместимости с архитектурой ВЕ48.
Все эти типы адресации могут быть применены только к операции перехода, а для операции вызова допустимы только прямой addr16 и внутристраничный addr11 способы адресации. Во всех условных операциях может использоваться только относительная адресация.
Когда МК ВЕ51 опознает запрос на прерывание, она генерирует одну из команд типа LCALL addr16, что автоматически обеспечивает запоминание адреса возврата в стеке. Однако в отличие от ВЕ48 в ВЕ51 нет автоматически сохраняемой информации о состоянии. При этом логика прерываний перестает срабатывать на запросы того уровня, который был принят к обслуживанию. Для понижения уровня прерывания служит команда возврата из прерывания RETI, которая кроме операции, эквивалентной RET, включает операцию разрешения прерывания данного уровня.
К типовым условным операциям ВЕ51 относятся также операции JZ и JNZ, JC и JNC. Две последние включены в группу булевых. Однако появилась новая операция «Сравнить и перейти» CJNE. По данной команде операнд сначала сравнивается по правилам вычитания целых чисел с константой и в соответствии с результатом сравнения выставляется флажок CY. Затем в случае несовпадения с константой выполняется ветвление. Сравнивая аккумулятор, регистр или ячейку памяти с последовательностью констант, получаем удобный способ проверки на совпадения, например с целью выявления особых случаев. По сути дела команда CJNE является элементом оператора языков высокого уровня типа CASE.
Дальнейшее развитие получила и команда DJNZ. Теперь программист в качестве счетчика может использовать не только один из рабочих регистров Rn, n = 0—7, но и любую ячейку памяти данных DSEG.
Ряд команд, предназначенных для выполнения операций пересылки, проверки условий и логической обработки булевых (одноразрядных) переменных, образует отдельную группу (табл. 4.15). В качестве одного из операндов они применяют флажок переноса CY, в качестве другого служит прямо адресуемый элемент пространства BSEG. Флажок CY при выполнении операций И и ИЛИ может рассматриваться как булевый аккумулятор.
Таблица 4.15
Мнемоника | Числo циклов | Код | Флажки | Описание |
C A F R R O P Y C 0 S S V | ||||
MOV C, bit MOV bit, C CLR C CLR bit SETB C SETB bit CPL C CPL bit ANL C, bit ANL C, /bit ORL C,bit ORL C/,bit JC rel JNC rel JB bit, rel JNB bit, rel JBC bit, rel | A2 C3 C2 D3 D2 B3 B2 B0 A0 | + – – – – – – – – – – – – – 0 – – – – – – – – – – – – – 1 – – – – – – – – – – – – – + – – – – – – – – – – – – – + – – – – – – + – – – – – – + – – – – – – + – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – | CYBSEG (bit) BSEG (bit)CY CY0 BSEG (bit)0 CY1 BSEG (bit)1 CYNOT CY BSEG (bit)NOT BSEG (bit) CYCY AND BSEG (bit) CYCY AND NOT BSEG (bit) CYCY OR BSEG (bit) CYCY OR NOT BSEG (bit) Если CY = 1, то SJMP rel Если CY = 0, то SJMP rel Если BSEG (bit) = 1,то SJMP rel Если BSEG(bit)=0,то SJMP rel Если BSEG(bit)=1,то SJMP rel и BSEG(bit)0 |
В группу входят также операции безусловного и условного переходов с относительным 8-разрядным смещением rel. Условный переход может быть осуществлен как при установленном JB, так и при сброшенном JNB бите. Наличие команд с прямым адресом проверяемого бита объясняет отсутствие специальных команд проверки тестовых входов, которые были в ВЕ48. Особо следует отметить операцию JBC, которая реализует ветвление при установленном бите и одновременно с этим сбрасывает его в 0. Такая операция полезна в системах, решающих много задач, при организации семафоров, которые вводятся для защиты коллективно используемых ресурсов МС.
Семафор представляет собой расположенный в памяти флажок, информирующий о состоянии связанного с ним ресурса: 1—«Свободно»; 0—«Занято». Захват ресурса допускается только в случае, если он свободен, затем семафор должен быть переведен в состояние «Занято». Захват ресурса с помощью команды JBC осуществляется следующим образом:
WAIT: | JBC | bit, OK | ;Проверка семафора bit |
SJMP | WAIT | ;Pecypc занят, ожидание | |
OK: | — | ;Pecypc захвачен |
Дата добавления: 2019-02-07; просмотров: 443;