Команды МП К1810
По функциональному признаку все множество команд МП К1810 можно разделить на шесть групп:
- Команды пересылки данных;
- Команды арифметических операций;
- Команды логических операций и работы со строками;
- Команды передачи управления;
- Команды управления микропроцессором.
Команды пересылки данных | |||
Команды пересылки данных общего назначения | |||
Действие | Мнемоника и формат | Описание | |
Передать | MOV DST, SRC | (DST) ← (SRC) | |
Включить в стек | PUSH SRC | (SP)← (SP)-2; (SP)+1:SP))← (SRC) | |
Извлечь из стека | POP DST | (DST)← ((SP)+1:(SP)); (SP) ← (SP) + 2 | |
Обменять | XGJCGOPR1,OPR2 | (OPR1)← >(OPR2) | |
Команды пересылки, работающие с аккумулятором | |||
Преобразователь | XLAT OPR | (A) ← ((BX) + (AL)) | |
Ввести, короткая форма, байт | IN AL, PORT | (AL) ← (PORT) | |
Ввести короткая форма, слово | IN AX, PORT | (AX) ← (PORT + 1; PORT) | |
Ввести длинная форма, байт | IN AL, DX | (AL) +- ((DX)) | |
Ввести длинная форма, слово | IN AX, DX | (AX)← ((DX)+1:(DX)) | |
Вывести короткая форма, байт | OUT PORT, AL | (PORT) ← (AL) | |
Вывести короткая форма, слово | OUT PORT, AX | (PORT+ 1:PORT)← (AX) | |
Вывести длинная форма, байт | OUT DX, AL | ((DX)) ← (AL) | |
Вывести длинная форма, слово | OUT DX, AX | ((DX))+l:(PX))← (AX) | |
Команды пересылки адресов | |||
Загрузить эффективный адрес | LEA REG, SRC | (REG) ← SRC | |
Загрузить в PC указатель | LDS REG, SRC | (REQ)← -(SRC); (DB) ← (SRC+2) | |
Загрузить в ES указатель | LES REG, SRC | (PEG) ← (SRC); (FS) ← (SRC+2) | |
Команды пересылки битов условий | |||
Загрузить АН из флажков | LAHF | (АН) ← (младший байт PSW) | |
Запомнить АН во флажках | SAHF | (младший байт PSW) ← (АН) | |
Включить в стек флажки | PUSHF | (SP)← (SP)-2; ((SP)+1:(SP))← (PSW) | |
Извлечь из стека флажки | POPF | (PSW)← ((SP)+1:(SP)); (SP)← (SP)-2 | |
Арифметические команды. При реализации арифметических действий устанавливаются 6 бит условий: CF, AF, ZF, SF, PF, OF. | |||
Команды вычитания и коррекции | |||
Вычесть | SUB DST, SRC | (DST)← (DST) -(SRC) | |
Вычесть с заемом | SBB DST, SRC | (DST) ← (DST) – (SRC) – (CF) | |
Декремент | DEC OPR | OPR← (OPR)← I | |
Изменить знак | NFG OPR | OPR ← (OPR) | |
Сравнить | CMPOPR1,OPR2 | (OPRI)-(OPR2) | |
Десятичная коррекция вычитания | DAS | (AL) ← разность в (AL) корректируется в упакованный BCD-формат | |
Коррекция неупакованного ВCD-вычитания | AAS | (АН) ← (АH) + перенос от коррекции; (AL) ← разность в (AL) корректируется в неупакованный BCD-формат | |
Команды сложения | |||
Сложить | ADD DST, SRC | (DST) +- (SRC) + ( DST) | |
Сложить с переносом | ADD DST, SRC | (DST) ← (SRC) + ( DST) + (CF) | |
Инкремент | INC OPR | OPR ← (OPR) + 1 | |
Десятичная коррекция сложения | DAA | (AL) ← сумма в (AL) корректируется в упакованный двоично-десятичный формат (BCD-формат) | |
Коррекция неупакованного BCD-сложения | AAA | (AL) ←сумма в (AL) корректируется в неупакованный BCD-формат | |
Команды умножения | |||
Умножить со знаком | IMUL SRC | Операнды -байты: (АХ) ← (AL) * (SRC); операнды – слова: (DX:AX) ← (АХ) * (SRC); | |
Умножить без знака | MUL SRC | Аналогична команде IMUL, но операнды и произведение беззнаковые | |
Коррекция неупакованного BCD-умножения | ААМ | (АН) ← заем от коррекции; (АХ) ← произведение в АL корректируется в неупакованный BCD-формат, AH содержит старшую цифру | |
Команды деления и команды формирования знака для операций деления со знаком | |||
Разделить со знаком | IDIV SRC | Делитель – байт: (AL) ← частное (AX)/(SRC); (АН) ← остаток (AX)/(SRC); Делитель – слово: (АХ) ← частное (DX:AX)/(SRC); (DX) ← остаток (DX:AX)/(SRC); частное и остаток имеют знаки, знак остатка равен знаку делимого | |
Разделить без знака | DIV SRC | Аналогична команде 1DIV, но операнды, частное и остаток беззнаковые | |
Коррекция неупакованного BCD-деления | AAD | (AL)← 10*(AH)+(AL); (АН) ← 0 | |
Преобразовать байт в слово | CBW | Расширяет знак AL в АН | |
Преобразовать слово в двойное слово | CWD | Расширяет знак АХ в DX | |
Логические команды | |||
Форматы команд сдвигов | |||
Сдвинуть логически влево | SHL OPR, CNT |
| |
Сдвинуть арифметически влево | SAL OPR, CNT |
| |
Сдвинуть логически вправо | SHR |
| |
Сдвинуть арифметически вправо | SARQPR.CNT |
| |
Сдвинуть циклически влево | ROL OPR, CNT |
| |
Сдвинуть циклически вправо | ROR OPR, CNT |
| |
Сдвинуть циклически влево через перенос | RCL OPR, CNT |
| |
Сдвинуть циклически вправо через перенос | RCR OPR, CNT |
| |
Логические команды | |||
Инвертировать | NOT OPR | (OPR) ← NOT (OPR) | |
Объединить по И | AND DST, SRC | (DST) ← (DST) AND (SRC) | |
Объединить по ИЛИ | OR DST, SRC | (DST) — (DST) OR (SRC) | |
Сложить по модулю 2 (Исключающее ИЛИ) | XOR DST, SRC | (DST) ← (DST) XOR (SRC) | |
Проверить | TEST OPR 1.OPR2 | (OPR1)AND(OPR2) | |
Команды передачи управления Существует две разновидности команд вызова, перехода и возврата: команды, передающие управление в пределах текущего сегмента кода, и команды, передающие управление в любой сегмент кода, который затем становится текущим. Возможны переходы как прямые, так и посменные. По команде CALL смещение адреса следующей команды помещается в стек (в случае межсегментного вызова первым засылается регистр сегмента CS), а потом управление передается в любой сегмент программы, который после этого становится текущие По команде JMP управление передается по адресу, задаваемому операндом | |||
Вызовы подпрограмм, переходы и возвраты из подпрограмм | |||
Внутрисегментный прямой вызов | CALL DST | (SP) ← (SP) – 2; ((SP)+1:(SP))← (IP); (IP)← (IP) + D16 | |
Внутрисегментный косвенный вызов | CALL DST | (SP) ← (SP) – 2; ((SP)+1:(SP))← (IP); (IP) ← (EA) | |
Межсегментный прямой вызов | CALL DST | (SP) ← (SP) – 2; ((SP)+1:(SP))-(CS); (SP)-(SP)-2; ((SP)+1:(SP))← (IP); (IP)← D16; (CS) – сегментный адрес | |
Межсегментный косвенный вызов | CALL DST | (SP)← (SP)-2; ((SP)+1:(SP))-(CS); (SP) ← (SP) – 2; ((SP)+1:(SP))← (IP); (IP) – (EA); (CS) ← – (EA + 2) | |
Внутрисегментный возврат | RET | (IP)← ((SP)+l:(SP)); (SP) ← (SP)+2 | |
Внутрисегментный возврат с непосредственными данными | RET EXP | Аналогична предыдущей команде и (SP) ← (SP) + D16; (IP)← ((SP)+l:(SP)); (SP)+-(SP)-2; (CS) ← ((SP)+l:(SP)) | |
Межсегментный возврат | RET | (SP) ← (SP) + 2 | |
Межсегментный возврат с непосредственными данными | RET EXP | Аналогична предыдущей команде и (SP)← -(SP) +DI 6 | |
Внутрисегментный прямой короткий переход | JMP SHORT OPR | (IP) ← (IP) + 8-битовое смещение, определяемое OPR | |
Внутрисегментный прямой близкий переход | JMP NEAR PTR | (IP) ← (IP) + 16-биговое смещение, определяемое QPR | |
Внутрисегментный прямой косвенный переход | JMP OPR | (IP) ← (ЕА), где ЕА определяется OPR | |
Внутрисегментный прямой далекий переход | JMP FAR PTR OPR | (IP) ← смещение OPR в сегменте; (CS) ← адрес сегмента, содержащего OPR | |
Межсегментный косвенный переход | JMP OPR | (IP) ← (ЕА), где ЕА определяется OPR; (CS) ← (ЕА + 2) | |
Условные переходы | |||
Перейти, если нуль или равно | JZ OPR | JE | ZF=1 |
Перейти, если не нуль или неравно | JNZ OPR | JNL | ZF=0 |
Перейти, если знак установлен | JS OPR |
| ZF=1 |
Перейти, если знак сброшен | JNS OPR |
| ZF= 0 |
Перейти если есть переполнение | JO OPR |
| OF =1 |
Перейти, если нет переполнения | JNO OPR |
| OF=0 |
Перейти, если паритет установлен (четный паритет) | JP OPR | JPЕ | PF = 1 |
Перейти, если паритет сброшен (нечетный паритет) | JNP OPR | JPO | PF=0 |
Перейти, если ниже/не выше или равно (без знака) | JB OPR | JNAЕ, JC | CF= 1 |
Перейти, если не ниже/выше или равно (без знака) | JNB OPR | JAE, JNC | CF=O |
Перейти, если ниже или равно/не выше (без знака) | JBE OPR | JNA | ((СF)ОR(ZF)) = 1 |
Перейти, если не ниже или равно/выше (без знака) | JMBL OPR | JA | ((CF)OR(ZF)) = 0 |
Перейти, если меньше/не больше или равно (со знаком) | JL OPR | JNGЕ | ((СF)ХОR(ZF)) = 1 |
Перейти., если не меньше/больше или равно (со знаком) | JNL OPR | JGЕ | ((CF)ХOR(ZF)) = 0 |
Перейти, если меньше ((SF)XOR(OF))OR(SF)) = 1 или равно/не больше (со знаком) | JLE OPR | JNC | (CF) = 0 |
Перейти, если не меньше или равно/больше (со знаком) | JNLE OPR | JG | (((SF)XOR(OF))OR(SF)) = 1 |
Команды передачи управления для формирования циклов | |||
Зациклить | LOOP OPR |
| (СХ) не равно нулю |
Зациклить, пока не нуль или равно | LOOPZ OPR | LQOPE | ZF= 1 и (СХ)не равно нулю |
Зациклить, пока не нуль» или не равно | LOOPNZ OPR | LOOPNE | ZF= 0 и (СХ)не равно нулю |
Перейти по СХ | JCXZ OPR |
| (СХ) = 0 |
Вывозы программ прерывания | |||
Прерывание с типом | INТ TYPE | (SP)← (SP)-2; ((SP) + 1:(SP}) ← (PSW); (SP)← -(SP)-2; (SP)+ l:(SP)) ← (CS); (SP)← (SP)-2; ((SP)+1:(SP))← (IP); (IP) ← (TYPE* 4); (CS) ← (TYPE * 4 + 2) | |
Однобайтовое прерывание | INТ | Аналогично предыдущей, кроме TYPE =3 | |
Прерывание при переполнении | INTO | (SР) ←(SР) -2; ((SP) + 1:(SP)) ← (PSW), (SP)← (SP)-2, ((SP) + 1:(SP)) ← (CS), (SP)← (SP)-2; ((SP) + 1:(SP)) ← (IP), (IP)← (l0H), (CS)← (12H) | |
Возврат из прерывания | JRET | (IP) ← ((SP)+1:(SP)), (SP) ← (SP) + 2, (CS) ← ((SP) + 1:(SP)), (SP) ← (SP) + 2, (PSW) ← ((SP) + 1:(SP)), (SP) ← (SP) + 2 | |
Команды управления МП | |||
Сбросить перенос | CLC | CF← 0 | |
Инвертировать перенос | CMC | CF ← NOT(CF) | |
Установить перенос | STC | CF← 1 | |
Сбросить направление | CLD | DF← 0 | |
Установить направление | STD | DF← 1 | |
Сбросить прерывание | CLI | IF← 0 | |
Установись прерывание | STI | IF← 1 | |
Холостая операций | NOP | Не вызывает никаких действий | |
Остановить | HLT | Прекращает действия ЭВМ | |
Переключить | ESC | Подключает сопроцессор | |
Ждать | WAIT | Ожидает активного уровня сигнала на входе TEST |