Скачиваний:
74
Добавлен:
08.03.2015
Размер:
116.22 Кб
Скачать

66

Приложение

Система команд микропроцессоров к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 words Включить в стек: (STACK)=(words)- JMP m32 Косвенный межсегментный:

(SP)=(SP)-2,((SP)+1:(SP))=(words) (IP)=(m32),(CS)=(m32+2)

POP wordd Извлечь из стека: (wordd)=(STACK)-

(wordd)=((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:(4type),(CS)=0:(4type+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)