Система команд ВЕ48
Базовая архитектура ВЕ48 содержит 96 машинных или 52 символьных команды, которые обеспечивают широкие возможности реализации сложных программных структур. Они имеют длину 1—2 байта, причем более 70% команд—однобайтовые. Все команды выполняются за один или два цикла и занимают соответственно 2,5 или 5 мкс при частоте 6 МГц на входе XTAL. Свыше 50% команд—одноцикловые, некоторые однобайтовые команды—двухцикловые. Команды объединены в пять групп: пересылки, обработки данных, манипуляции флажками, передачи управления, ВВ и управления режимом реального времени, которые приведены в табл. 4.2—4.6. Команды помеченные любым знаком сноски, не входят в систему команд 8021, которая является усеченным вариантом системы ВЕ48. Кроме того, команды с номером сноски выше первого не включены в систему 8022. Команды, помеченные третьим или четвертым знаком сноски, не входят в набор ВЕ41. Единственная команда с четвертым знаком сноски не является базовой и определена только в КМОП МП. (Расширение ВЕ41 будет рассмотрено в § 4.9.) Системы команд ВЕ49/ВЕ50 и ВЕ48 тождественны.
Группа команд пересылки, приведенная в табл. 4.2, дает возможность организовать передачу и обмен данными между аккумулятором и рабочими регистрами (или ячейками) внутренней памяти данных. В последнем случае используется только косвенный регистровый способ адресации через указатели R0, R1 выбранного банка рабочих регистров. Предусмотрены команды загрузки A, Rr, r = 0—7, и внутреннего ОЗУ непосредственными данными. Все команды из подгруппы обмена оперируют байтами кроме двух, которые оперируют тетрадами, что может быть полезным при обработке 2/10-чисел и других 4-разрядных значений.
Таблица 4.2
Мнемоника | Число байтов | Число циклов | Код | CY | Описание |
MOV А, Rr | F8―FF | ― | ARr, r = 0—7 | ||
MOV A, @Ri | F0―F1 | ― | A(Ri), i = 0—1 | ||
MOV A, #data | — | Adata | |||
MOV Rr, A | А8―AF | ― | RrA, r = 0—7 | ||
MOV @Ri, A | А0—А1 | — | (Ri)A, i = 0—1 | ||
MOV Rr, #data | В8—BF | — | Rrdata, r = 0—7 | ||
MOV @Ri, #data | В0—В1 | — | (Ri)data, i = 0—1 | ||
MOV A, PSW*2 | С7 | — | APSW | ||
MOV PSW, A*2 | D7 | + | PSWA | ||
XCH A, Rr | 28—2F | — | A«Rr, r = 0—7 | ||
XCH А, @Ri | 20—21 | ― | A«(Ri), i = 0—1 | ||
XCHD A, @Ri | 30―31 | — | A0—3«(Ri)0—3, i = 0—1 | ||
SWAP A | — | A0—3«A7—4 | |||
MOVX A, @Ri*3 | 80—81 | — | AXSEG(Ri), i = 0—1 | ||
MOVX @Ri, A*3 | 90—91 | — | XSEG(Ri)A, i = 0—1 | ||
MOVP A, @A | A3 | — | ACSEG (PC8—11:A) | ||
MOVP3 A, @A*2 | ЕЗ | — | ACSEG (3:A) |
Аккумулятор может также выполнять обмен данными с внешней памятью XSEG, PSW и считывать константы из памяти программ CSEG. Допускается считывание либо из текущей страницы, адресуемой PC8—11, либо из страницы 3, резервируемой специально для данного случая. Смещение внутри страницы определяется содержимым А.
Команды арифметической и логической обработки данных представлены в табл. 4.3. Все команды с двумя исходными операндами предполагают, что первый операнд находится в аккумуляторе. Вторым может быть содержимое рабочего регистра или байта внутренней памяти данных, либо литерал, кодируемый непосредственно в команде. Результат такой операции всегда пересылается в аккумулятор. В группе определены команды:
ADD A, src ;Сложение
ADDC A, src ;Сложение с переносом
ANL A, src ;Логическое И
ORL A, src ;Логическое ИЛИ
XRL A, src ;Логическое исключающее ИЛИ
Таблица 4.3
Мнемоника | Число байтов | Число циклов | Код | CY | Описание |
ADD A, Rr | 68—6F | + | AA + Rr, r = 0—7 | ||
ADD A, @Ri | 60—61 | + | AA + (Ri), i = 0—1 | ||
ADD A, #data | + | AA + data | |||
ADDC A, Rr | 78—7F | + | AA + Rr + CY, r = 0—7 | ||
ADDC A, @Ri | 70—71 | + | AA + (Ri) + CY, i = 0—1 | ||
ADDC A, #data | + | AA + data + CY | |||
ANL A, Rr | 58—5F | — | AA AND Rr, r = 0—7 | ||
ANL A, @Ri | 50—51 | — | AA AND (Ri), i = 0—1 | ||
ANL A, #data | — | AA AND data | |||
ORL A, Rr | 48—4F | — | AA OR Rr, r = 0—7 | ||
ORL A, @Ri | 40—41 | — | AA OR (Ri), i = 0—1 | ||
ORL A, #data | — | AA OR data | |||
XRL A, Rr | D8—DF | — | AA XOR Rr, r = 0—7 | ||
XRL A, @Ri | D0—D1 | — | AA XOR (Ri), i = 0—1 | ||
XRL A, #data | D3 | — | AA XOR data | ||
INC A | — | AA + 1 | |||
DEC A | — | AA – 1 | |||
CLR A | — | A0 | |||
CPL A | — | ANOT A | |||
DA A | + | Десятичная коррекция А | |||
RL A | Е7 | — | A0A7, AnAn—1, n = 1—7 | ||
RLC A | F7 | + | A0CY, АnАn—1, CYA7, | ||
n = 1—7 | |||||
RR A | — | А7А0, АnАn+1, n = 0—6 | |||
RRC A | + | A7CY, AnAn+1, CYA0, | |||
n = 0—6 | |||||
INC Rr | 18—1F | — | RrRr + 1, r = 0—7 | ||
INC @Ri | 10—11 | — | (Ri)(Ri) + 1, i = 0—1 | ||
DEC Rr | С8—CF | — | RrRr – 1, r = 0—7 |
Команды с одним источником, как правило, работают с аккумулятором. Среди них команды приращения и уменьшения содержимого А на единицу, очистки, инверсии и сдвига вправо или влево. Модификация А на единицу реализуется без фиксации переноса CY. Сдвиги строятся как с учетом состояния флажка CY, так и без него. Для усиления вычислительной мощности в состав команд обработки введены три команды по приращению или уменьшению на единицу содержимого R0—R7 и приращению содержимого любой ячейки внутренней памяти данных. Благодаря этому появляется возможность организации разнообразных счетчиков программными средствами.
В группе отсутствует операция вычитания, которую легко можно выполнить с помощью команд логического дополнения, приращения и арифметического сложения. Отсутствуют также какие-либо операции с данными из внешней памяти. Для их выполнения информация сначала должна быть переслана в аккумулятор.
В состав системы команд ВЕ48 входит ряд команд по работе над одноразрядными флажками CY, F0 и F1 (табл. 4.4). Флажок CY является основным арифметическим признаком; F0, F1 носят общий характер, их функциональное назначение определяется пользователем. Над каждым из флажков предусмотрены команды очистки CLR и инверсии CPL.
Таблица 4.4
Мнемоника | Число байтов | Число циклов | Код | CY | Описание |
CLR С | CY0 | ||||
CPL С | А7 | + | CYNOT CY | ||
CLR F0*2 | — | F00 | |||
CPL F0*2 | — | F0NOT F0 | |||
CLR F1*2 | А5 | — | F10 | ||
CPL F1*2 | В5 | — | F1NOT F1 | ||
SEL RB0*2 | С5 | — | BS0 | ||
SEL RB1*2 | D5 | — | BS1 | ||
SEL MB0*3 | Е5 | — | MB0 | ||
SEL MB1*3 | F5 | — | MB1 |
Для выбора банков рабочих регистров и памяти программ используются флажки BS и MB соответственно. Прямая манипуляция их содержимым реализуется с помощью команды выбора SEL (см. табл. 4.4). Выбор нулевого банка RB0 или МВ0 соответствует загрузке в BS или MB нуля, выбор первого банка RB1 или МВ1—единицы.
Система команд ВЕ48 включает 16 команд перехода, из которых 14 условных (табл. 4.5). Только одна команда подгруппы осуществляет переход в любое место программной памяти емкостью 4К байт. Для этого она использует прямой 11-разрядный адрес внутри банка и текущее значение флажка выбора банка MB. Управление флажком MB реализуется отдельными командами SEL МВ0 и SEL MB1 из группы битовой обработки. Остальные команды разрешают переход внутри текущей страницы.
Таблица 4.5
Мнемоника | Число байтов | Число циклов | Код | CY | Описание |
JMP addr11 | aaa00100 | — | PCaddr11, PC11MB | ||
JMPP @A | ВЗ | — | PC0—7CSEG(PC8—11:A) | ||
DJNZ Rr, addr8 | Е8—EF | — | RrRr – 1, если Rr ¹ 0, то | ||
PC0—7addr8, n = 0—7 | |||||
JC addr8 | F6 | — | Если CY = 1, то PC0—7addr8 | ||
JNC addr8 | Е6 | — | Если CY = 0, то PC0—7addr8 | ||
JZ addr8 | С6 | — | Если А = 0, то PC0—7addr8 | ||
JNZ addr8 | — | Если А ¹ 0, то PC0—7addr8 | |||
JT0 addr8*1 | — | Если T0 = 1, то PC0—7addr8 | |||
JNT0 addr8*1 | — | Если Т0 = 0, то PC0—7addr8 | |||
JT1 addr8 | — | Если T1 = 1, то PC0—7addr8 | |||
JNT1 addr8 | — | Если T1 = 0, то PC0—7addr8 | |||
JF0 addr8*2 | В6 | — | Если F0 = 0, то PC0—7addr8 | ||
JF addr8*2 | — | Если F1 = 0, то PC0—7addr8 | |||
JTF addr8 | — | Если TF = 1, то PC0—7addr8, | |||
TF0 | |||||
JNI addr8*3 | — | Если INТ = 0, тоРС0—7addr8 | |||
JBb addr8*2 | bbb10010 | — | Если Ab = 0, то PC0—7addr8, | ||
b = 0—7 | |||||
CALL addr11 | aaa10100 | — | (SP)PSW4—7, (SP)PC | ||
addr11, PC11MB, SPSP + 1 | |||||
RET | — | SPSP – 1, PC0—12(SP) | |||
RETR*2 | + | SPSP – 1, PC0—12(SP), | |||
PSW4—7(SP) | |||||
NOP | — | Нет операции | |||
IDL*4 | — | Перевод МК в режим с малым | |||
потреблением мощности |
Команда безусловной передачи JMPP @А организует переход по содержимому таблицы ветвлений, расположенной в текущей странице. Содержимое аккумулятора А применяется в качестве смещения в таблице, что дает возможность простейшими средствами реализовать программные переключатели. Команда DJNZ Rr, addr8 уменьшает содержимое одного из рабочих регистров на единицу и делает переход, если его содержимое не равно нулю. Данная команда очень эффективна при организации программных циклов. Двенадцать команд условного перехода тестируют на 0 содержимое А, состояние флажков CY, F0, F1, TF и внешних входов Т0, T1, INT. Ветвление внутри страницы выполняется в зависимости от результата тестирования. Последняя команда JBb addr8 дает возможность проверить состояние любого бита Аb, b = 0—7, аккумулятора.
В составе группы передачи управления три команды для организации вызова и возврата из подпрограмм. Команда CALL addr11 подобно JMP addr11 использует 11-разрядный адрес внутри банка и состояние MB для выбора банка. По данной команде текущее значение 12-разрядного PC и четыре флажка BS, F0, АС и CY из PSW «заталкиваются» в стек. Команда RETR возвращает в исходное состояние PC и PSW. Команда RET восстанавливает только PC, давая возможность использовать флажки для передачи параметров.
Отсутствие средств чтения текущего состояния MB вызывает ряд трудностей при программировании. Так, при возврате из подпрограмм состояние MB в общем случае не определено, так как не известно, изменялся он подпрограммой или нет. Данное обстоятельство требует некоторого соглашения на правила манипуляции флажком при вызове подпрограмм. В частности, процедуры обслуживания прерывания, точки входов которых расположены в нулевом банке, вообще не должны изменять его состояние. Следовательно, эти процедуры должны быть полностью расположены в нулевом банке памяти программ.
Пустая команда NOP обеспечивает простой переход к следующему элементу программной последовательности. В КМОП-вариантах МК, например 80С49/80С39, предусмотрена еще одна команда IDL, которая не входит в базовый набор. Эта команда переводит МК в состояние останова, свободное от выполнения каких-либо последующих команд. Тем не менее в состоянии останова поддерживается работа средств реального времени и при поступлении запроса на прерывание МК может перейти на подпрограмму его обслуживания. Выход из состояния останова осуществляется также при общем сбросе системы.
В табл. 4.6 приведены команды, которые обслуживают пространство ВВ, состоящее из трех 8-разрядных внутренних портов BUS, P1, P2 и четырех 4-разрядных внешних портов Р4—Р7. Ввод и вывод данных осуществляется через аккумулятор или его младшую половину. Предусматриваются логические команды И и ИЛИ содержимого портов BUS, P1, P2 с литералом, представляющие простейшую, но достаточно эффективную обработку операндов из внутреннего пространства ВВ. При работе с внешними портами вторым операндом команд И и ИЛИ служит содержимое младшей тетрады А. Команды этого типа дают возможность манипулировать отдельными битами портов ВВ независимо от других.
Таблица 4.6
Мнемоника | Число байтов | Число циклов | Код | CY | Описание |
IN A, Pp | 09—0А | — - | АРр, р = 1—2 | ||
OUTL Рр, А | 39—3А | — | РрА, р = 1—2 | ||
ANL Pp, #data*2 | 99—9А | — | РрРр AND data, p = 1—2 | ||
ORL Pp, #data*2 | 89—8А | — | РрРр OR data, p = 1—2 | ||
INS A, BUS*3 | — | ABUS | |||
OUTL BUS, A*3 | — | BUSA | |||
ANL BUS, #data*3 | — | BUSBUS AND data | |||
ORL BUS. #data*3 | — | BUSBUS OR data | |||
MOVD A, Pp | 0С—0F | — | A0—3Pp, A4—70, p = 4—7 | ||
MOVD Pp, A | 3С—3F | — | PpA0—3, p = 4—7 | ||
ANLD Pp, A | 9С—9F | — | PpPp AND A0—3, p = 4—7 | ||
ORLD Pp, A | 8С—8F | — | PpPp OR A 0—3, р = 4—7 | ||
MOV A, T | — | AT | |||
MOV T, A | — | TA | |||
STRT Т | — | Пуск Т | |||
STRT CNT | — | Пуск CNT | |||
STOP TCNT | — | Останов Т/CNT | |||
EN TCNTI*2 | — | Разрешение прерываний от | |||
Т/CNT | |||||
DIS TCNTI*2 | — | Запрет прерываний от | |||
T/CNT | |||||
ENT0 CLK*3 | — | Разрешение CLK на Т0 | |||
EN I*2 | — | Разрешение прерываний по | |||
INT | |||||
DIS I*2 | — | Запрет прерываний по INT |
В архитектурах 8021/8022 порт BUS заменен на стандартный порт Р0. Поэтому операции ВВ с ним осуществляются в рамках общей команды
IN A, Pp ;АРр, р = 0—2
OUTL Рр, А ;РрА, р = 0—2
Подгруппа управления средствами реального времени (см. табл. 4.6) содержит команды, работающие с таймером/счетчиком и подсистемой прерываний. Сюда входят операции чтения и загрузки состояния устройства счета, его запуск в режиме таймера или счетчика, останов, а также четыре команды по разрешению и запрещению прерываний. Специальная операция ENTO CLK программирует выдачу синхроимпульсов CLK = (1/3)OSC на выход Т0.
Дата добавления: 2019-02-07; просмотров: 358;