Команды МП К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