- •Система команд микропроцессоров к1810вмв6/к1810вм88
- •1. Команды пересылки данных 4. Команды передачи управления
- •5. Команды обработки строк 6. Команды управления микропроцессором
- •5.1. Строковые примитивы 6.1. Управление флагами
- •У с л о в н ы е о б о з н а ч е н и я
- •Выбор команд условных переходов в сочетании с командами сравнения
- •Дополнительные команды мп 80286
- •Содержание
Система команд микропроцессоров к1810вмв6/к1810вм88
1. Команды пересылки данных 4. Команды передачи управления
MOV dst,src Переслать: (dst)=(src)
XCHG rm1,rm2 Обменять : (rm1)(rm2) 4.1. БЕЗУСЛОВНЫЕ ПЕРЕХОДЫ:
XLAT Преобразовать: (AL)=[(BX)+(AL)] JMP labl Прямой внутрисегментный: IP)=(IP)+disp(labl)
LEA r16,mem Загрузить адрес: (r16)=offset mem Прямой межсегментный:
LDS r16,m32 Загрузить: (r16)=(m32),(DS)=(m32+2) (IP)=offset labl,(CS)=segment labl
LES r16,m32 Загрузить: (r16)=(m32),(ES)=(m32+2) JMP rm16 Косвенный внутрисегментный: (IP)=(rm16)
PUSH words Включить в стек: (STACK)=(words)- JMP m32 Косвенный межсегментный:
(SP)=(SP)-2,((SP)+1:(SP))=(words) (IP)=(m32),(CS)=(m32+2)
POP wordd Извлечь из стека: (wordd)=(STACK)-
(wordd)=((SP)+1:(SP)),(SP)=(SP)+2 4.2. УСЛОВНЫЕ ПЕРЕХОДЫ (IP)=(IP)+disp8(labl)
PUSHF Включить в стек флаги: (STACK)=(F) по состоянию флагов:
FA,FC POPF Извлечь из стека флаги: (F)=(STACK) JZ /JE labl если ZF=1 (нуль/равно)
LAHF Переслать флаги: (AH)=(FL) JNZ /JNE labl если ZF=0 (не нуль/не равно)
FA/OF SAHF Переслать флаги: (FL)=(AH) JC labl если CF=1 (есть перенос)
IN ac,port Ввести прямо: (ac)=(port) JNC labl если CF=0 (нет переноса)
IN ac,DX Ввести косвенно: (ac)=((DX)) JS labl если SF=1 (знак "минус")
OUT port,ac Вывести прямо: (port)=(ac) JNS labl если SF=0 (знак "плюс")
OUT DX,ac Вывести косвенно: ((DX))=(ac) JP /JPE labl если PF=1 (есть паритет/четный паритет)
JNP/JPO labl если PF=0 (нет паритета/нечетный паритет)
2. АРИФМЕТИЧЕСКИЕ КОМАНДЫ JO labl если OF=1 (есть переполнение)
FA/CF INC rm Инкрементировать: (rm)=(rm)+1 JNO labl если OF=0 (нет переполнения)
FA/CF DEC rm Декрементировать: (rm)=(rm) -1 по соотношению между беззнаковыми числами:
FA ADD rm,rmd Сложить: (rm)=(rm)+(rmd) JB /JNAE labl если ниже/не выше и не равно
FA ADC rm,rmd Сложить: (rm)=(rm)+(rmd)+(CF) JNB /JAE labl если не ниже/выше или равно
FA SUB rm,rmd Вычесть: (rm)=(rm) - (rmd) JBE /JNA labl если ниже или равно/не выше
FA SBB rm,rmd Вычесть: (rm)=(rm) - (rmd) - (CF) JNBE /JA labl если не ниже и не равно/выше
FA NEG rm Обратить знак: (rm)= -(rm) по соотношению между знаковыми числами:
FA?/OF,CF MUL rm Умножить без знака: (AX)=(AL)(rm8) JL /JNGE labl если меньше/не больше и не равно
(DX,AX)=(AX)(rm16) JNL /JGE labl если не меньше/больше или равно
FA?/OF,CF IMUL rm Умножить со знаком: (AX)=(AL)(rm8) JLE /JNG labl если меньше или равно/не больше
(DX,AX)=(AX)(rm16) JNLE /JG labl если не меньше и не равно/больше
FA? DIV rm Разделить без знака: по состоянию (CX):
(AL)=(AX)/(rm8), (AH)=(AX)mod(rm8) JCXZ labl если (CX)=0
(AX)=(DX,AX)/(rm16),(DX)=(DX,AX)mod(rm16)
FA? IDIV rm Рaзделить со знаком:(идентичн.DIV)
CBW Расширить байт: (AH)=D7(AL) 4.3. УПРАВЛЕНИЕ ЦИКЛАМИ:
CWD Расширить слово: (DX)=D15(AX) (CX)=(CX)-1 и зациклить (IP)=(IP)+disp8(labl):
FA/OF? DAA Десятичная коррекция BCD - сложения LOOP labl если (CX)< >0
FA/OF? DAS Десятичная коррекция BCD - вычитания LOOPZ /LOOPE labl если (CX)< >0 и ZF=1(нуль/равно)
FA?/AF,CF AAA Десятичная коррекция ASCII - сложения LOOPNZ/LOOPNE labl если (CX)< >0 и ZF=0 (не нуль/
FA?/AF,CF AAS Десятичная коррекция ASCII - вычитания /не равно)
FA?/ AAM Десятичная коррекция ASCII - умножения:
/SF,ZF,PF (AH)=(AL)/10,(AL)=(AL) mod10 4.4. ОРГАНИЗАЦИЯ ПОДПРОГРАММ
FA?/ AAD Десятичная коррекция ASCII-делимого: CALL name Прямой внутрисегментный вызов:
/SF,ZF,PF (AL)=(AH)10+(AL),(AH)=0 (STACK)=(IP),(IP)=(IP)+disp16(name)
Прямой межсегментный вызов: 3. ЛОГИЧЕСКИЕ КОМАНДЫ (STACK)=(CS,IP),(IP)=offset name,(CS)=segment name
FA/OF=CF=0 AND rm,rmd Логическое И: (rm)=(rm)&(rmd) CALL rm16 Косвенный внутрисегментный вызов:
FA/OF=CF=0 OR rm,rmd Логическое ИЛИ: (rm)=(rm)+(rmd) (STACK)=(IP),(IP)=(rm16)
FA/OF=CF=0 XOR rm,rmd Исключающее ИЛИ:(rm)=(rm)(rmd) CALL m32 Косвенный межсегментный вызов:
NOT rm Инвертировать операнд (STACK)=(CS,IP),(IP)=(m32),(CS)=(m32+2)
FA CMP rm,rmd Сравнить: (F)=(rm)-(rmd) RET Внутрисегментный возврат: (IP)=(STACK)
FA/OF=CF=0 TEST rm,rmd Проверить: (F)=(rm)&(rmd) Межсегментный возврат: (IP,CS)=(STACK)
FA/SF=0 SHR rm,cnt Сдвиг вправо: Dn(rm)=0, RET data Идентично RET с последующим
Di-1(rm)=Di(rm), (CF)=D0(rm) (SP)=(SP)+data
FA SHL/SAL rm,cnt Сдвиг влево: (CF)=Dn(rm)
Di+1(rm)=Di(rm), D0(rm)=0 4.5. ПЕРЕХОДЫ ПО ПРЕРЫВАНИЮ
FA/OF=0 SAR rm,cnt Сдвиг вправо: Dn(rm)=Dn(rm), INT type Прерывание с заданным типом:
Di-1(rm)=Di(rm), (CF)=D0(rm) (STACK)=(F,CS,IP),(IF)=0,(TF)=0,
/OF,CF ROL rm,cnt Сдвиг влево: CF)=Dn(rm), (IP)=0:(4type),(CS)=0:(4type+2)
Di+1(rm)=Di(rm), D0(rm)=Dn(rm) INT Идентично INT type с type=3
/OF,CF ROR rm,cnt Сдвиг вправо: (CF)=D0(rm), INTO При OF=1 идентично INT type с type=4
Di-1(rm)=Di(rm), Dn(rm)=D0(rm) IRET Возврат из обработки прерывания:
/OF,CF RCL rm,cnt Сдвиг влево: D0(rm)=(CF), (IP,CS,F)=(STACK)
Di+1(rm)=Di(rm), (CF)=Dn(rm)
/OF,CF RCR rm,cnt Сдвиг вправо: (CF)=D0 (rm),
Di-1(rm)=Di(rm), Dn(rm)=(CF)