Система команд ОМЭВМ
Система команд ОМЭВМ серии К1816 ориентирована на эффективную реализацию процедур управления : маскированный ввод/вывод, логические операции, операции с битами, большое число команд условных переходов, арифметические операции в двоичном и десятичном кодах.
Программно-доступными объектами в составе ОМЭВМ серии К1816 являются: регистр - аккумулятор А, таймер/счетчик Т, порты ввода/вывода P0..P2,P4..P7, регистр PSW, два банка по восемь регистров R0..R7,R0'..R7 и 64 ячейки внутренней памяти данных - с адресами 00H..3FH. Кроме того, по специальной команде MOVX может быть доступна внешняя память данных с адресами 00H..FFH.
При программировании следует иметь в виду, что в качестве регистров (банк 0) R0..R7 используются ячейки внутренней памяти данных с адресами 00H..07H соответственно, а в качестве R0..R7' (банк 1) - ячейки 18H..20H. В ОМЭВМ серии К1816 предусмотрен 8-уровневый стек, в который автоматически (по команде CALL или в процедуре прерываний) загружается 12-разрядный программный счетчик PC и 4 флажка признаков. Таким образом, один уровень стека занимает два байта. Под стек используются регистры внутренней памяти данных с адресами 08H..17H, указатель стека младшие три бита регистра PSW.
В системе команд ОМЭВМ серии К1816 используются прямая, косвенная и непосредственная адресация. По прямому адресу можно обращаться к аккумулятору А, таймеру/счетчику Т, регистру PSW, портам ввода/вывода P0..P2,P4..P7 и регистрам R0..R7,R0'..R7. Примеры команд с прямой адресацией: ADD A,R3; MOV T,A; MOV A,PSW; IN A,P1;
Косвенно можно адресоваться к ячейкам памяти данных через регистры R0,R1 текущего банка, например:
MOV A,@R0 - чтение в аккумулятор содержимого ячейки внутреннего ОЗУ данных, адрес которой хранится в R0;
INC @R1 - добавление 1 к содержимому ячейки внутреннего ОЗУ данных, адрес которой хранится в R1;
MOVX A,@R0 - чтение в аккумулятор содержимого ячейки внешнего ОЗУ данных, адрес которой хранится в R0;
MOVX @R0,A - запись содержимого аккумулятора в ячейку внешнего ОЗУ данных, адрес которой хранится в R0;
Двухбайтовые команды с непосредственной адресацией позволяют загружать константу, содержащуюся во втором байте в регистры или косвенно адресуемые ячейки внутреннего ОЗУ или задавать второй операнд в двухместных арифметических и логических операциях, например:
MOV A,#5E; MOV R6,#40; MOV @R4,#77; ANL A,#08;
По типу операций можно выделить следующие классы команд: пересылки и загрузки, включая и команды обращения к портам ввода/вывода; арифметические и логические; передачи управления; специальные команды.
Класс команд пересылки и загрузки представлен главным образом разновидностями команд MOV, обеспечивающих пересылку информации между регистрами, ячейками внутренней памяти данных, аккумулятором, таймером, регистром PSW, а так же загрузку перечисленных объектов константами. Две команды позволяют считывать в аккумулятор А содержимое ячеек памяти программ:
MOV А,@А - считывает с текущей страницы содержимое ячейки памяти программ, косвенно адресуемой через аккумулятор: А:= ЗУ Прг(PC(11:8).А(7:0));
MOVP3 А,@А - считывает с третьей страницы содержимое ячейки памяти программ, косвенно адресуемой через аккумулятор: А:= ЗУ Прг(0011.А(7:0));
Команды обмена XCH меняют местами содержимое аккумулятора и регистра или косвенно адресуемой ячейки памяти. Команды XCHD меняют местами только младшие тетрады аккумулятора и ячейки памяти, при этом старшие тетрады остаются неизменными.
Команда SWAP А меняет местами старшую и младшую тетрады в аккумуляторе.
Чтение в аккумулятор содержимого портов P0..P2 осуществляется по командам IN А,P..; запись содержимого аккумулятора в порт P0..P2 - командами OUTL P..,А.
Для работы с четырехразрядными портами P4..P7 используют команды MOVD А,P..; MOVD P..,А, причем в обмене участвует только младшая тетрада.
Арифметические и логические команды делятся на одноместные и двухместные. В двухместных командах первый операнд размещается в аккумуляторе, туда же помещается результат. Второй операнд может адресоваться разными способами, например:
ADD A,R7; ADDC A,@R1; ANL A,#0F;
К двухместным операциям данного класса в ОМЭВМ К1816ВЕ35 относятся:
* ADD - сложение;
* ADDC - сложение с переносом;
* ANL - конъюнкция;
* ORL - дизъюнкция;
* XRL - сумма по модулю два (исключающее ИЛИ).
Следует обратить внимание, что в системе команд отсутствует команда вычитания!
Логические операции с непосредственной адресацией могут выполняться и над содержимым портов P0,P1,P2:
* ANL Pp,#D : Pp := Pp & #D;
* ORL Pp,#D : Pp := Pp Ú #D; Pp = [0,1,2].
Для четырехразрядных портов P3..P7 возможно выполнение логических операций с младшей тетрадой аккумулятора A[3:0]:
* ANLD Pq,A : Pq := Pq & A[3:0];
* ORLD Pq,A : Pq := Pq ÚA[3:0]; Pq = [4,5,6,7].
Одноместные операции включают:
* DAA - десятичная коррекция аккумулятора;
* CLR A; CPL A - очистка аккумулятора; инверсия аккумулятора;
* INC A; INC R; INC @R - инкремент содержимого аккумулятора, регистра, ячейки памяти;
* DEC A; DEC R -декремент содержимого аккумулятора или регистра;
* RL A; RR A - циклический сдвиг аккумулятора влево и вправо;
* RLC A; RRC A - циклический сдвиг аккумулятора влево и вправо через триггер флага переноса;
Действия команд сдвигов описываются следующими выражениями:
* RL A: A[7:0] := A[6:0].A[7]; FC := A[7]
* RR A: A[7:0] := A[0].A[7:1]; FC := A[0]
* RLC A: FC.A[7:0] := A[7].A[6:0].FC;
* RLC A: FC.A[7:0] := A[0].FC.A[7:1];
Группа команд передачи управления включает команды безусловного и условных переходов, команду безусловного вызова подпрограммы и две команды безусловного возврата.
Все команды переходов являются двухбайтовыми, причем только команда безусловного перехода JMP позволяет осуществить т.н. "длинный" переход - в пределах всей памяти программ. Остальные команды организуют переход в пределах текущей страницы (старшие 4 бита программного счетчика не меняются). Среди них:
* JMPP @A - безусловный переход по косвенному адресу PC[7:0] := A;
* JC/JNC - условные переходы по переносу/отсутствию переноса;
* JZ/JNZ - условные переходы по нулю/не нулю аккумулятора;
* JT0/JNT0 - условные переходы по состоянию входа T0;
* JT0/JNT1 - условные переходы по состоянию входа T1;
* JF0,JF1 - условные переходы по единичному значению флагов пользователя;
* JTF - условный переход по переполнению таймера;
* JNI - условный переход, если сигнал на входе запроса на внешнее прерывание INT = 0;
* JBb - условный переход по единичному значению заданного бита аккумулятора;
К командам передачи управления может быть отнесена команда организации цикла DJNZ Ri,a; где Ri - номер регистра (R0..R7), a - смещение на странице. Команда декрементирует содержимое заданного регистра и, если результат не равен нулю, осуществляется переход.
Команда безусловного вызова подпрограммы CALL позволяет вызвать подпрограмму из любой области памяти программ - она, подобно JMP, загружает все 12 разрядов PC. Предварительно старое значение PC вместе с PSW(7:4)(флаги) загружается в стек.
Во внутреннем языке К1816ВЕ35 существуют две команды безусловного возврата:
* RET - восстанавливает PC, не меняя PSW;
* RETR - восстанавливает PC и PSW[7:4].
Специальные команды можно, в свою очередь, разбить на несколько групп.
Команды управления таймером/счетчиком:
* STRT T - запуск таймера;
* STRT CNT - запуск счетчика внешних событий;
* STOP TCNT- останов таймера/счетчика.
Команды управления подсистемой прерываний:
* EN TSNTI - разрешить прерывание от таймера/счетчика;
* DIS TSNTI - запретить прерывание от таймера/счетчика;
* EN I - разрешить внешнее прерывание;
* DIS I - запретить внешнее прерывание.
Команды выбора блоков памяти:
* SEL RB0 - выбор банка регистров 0;
* SEL RB1 - выбор банка регистров 1;
* SEL RB0 - выбор блока 0 памяти программ;
Команды управления флагами:
* CLR C; CLR F0; CLR F1 - очистка признаков переноса и флажков пользователя;
* CPL C; CPL F0; CPL F1 - инверсия признаков переноса и флажков пользователя;
Прочие команды:
* ENT0 CLK - разрешение выдачи сигнала синхронизации на вывод T0; NOP - пустая операция.
Дата добавления: 2019-02-07; просмотров: 320;