Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл: Источник:
Скачиваний:
111
Добавлен:
04.03.2014
Размер:
376.32 Кб
Скачать

Список необходимых команд микропроцессора к1810м86

Команда

Операнды

Описание

Пример

Регистр флагов

ADD

REG, memory

memory, REG

REG, REG

memory, immediate

REG, immediate

Сложение

Алгоритм:

операнд 1=операнд1+операнд2

Сложение 5 и -3:

MOV AL, 5 ; AL = 5

ADD AL, -3 ; AL = 2

RET

C

Z

S

O

P

A

r

r

r

r

r

r

AND

REG, memory

memory, REG

REG, REG

memory, immediate

REG, immediate

Логическое И, результат сохраняется в операнд1

Применяются правила:

1 AND 1 = 1 1 AND 0 = 0 0 AND 1 = 0 0 AND 0 = 0

Сложение по И чисел 1100001b и 11011111b:

MOV AL, 'a'

; AL = 01100001b

AND AL,

; AL = 01000001b ('A')

RET

C

Z

S

O

P

0

r

r

0

r

DEC

REG

memory

Декрементация

Алгоритм

операнд=операнд-1

Уменьшение 255 на1:

MOV AL, 255

; AL = 0FFh (255 or -1)

DEC AL

; AL = 0FEh (254 or -2)

RET

C

Z

S

O

P

A

-

r

r

r

r

r

DIV

REG

memory

Деление (без знака)

Алгоритм:

1)операнд - байт:

AL=AX/операнд, AH = остаток

2)операнд – слово:

AX=(DX AX)/операнд,

DX =остаток

Деление 203 на 4:

MOV AX, 203

; AX = 00CBh

MOV BL, 4

DIV BL

; AL = 50 (32h), AH = 3

RET

C

Z

S

O

P

A

?

?

?

?

?

?

HLT

-

Прекращение выполнения программы

MOV AX, 5

HLT

C

Z

S

O

P

A

-

INC

REG

memory

Инкрементация

Алгоритм:

операнд=операнд+1

Увеличение 4 на 1:

MOV AL, 4

INC AL ; AL = 5

RET

C

Z

S

O

P

A

-

r

r

r

r

r

JC

Метка

Короткий переход, если бит переноса равен 1.

Алгоритм:

если CF = 1 то переход

Проверка наличия бита переноса:

include 'emu8086.inc'

ORG 100h

MOV AL, 255

ADD AL, 1

JC label1

PRINT 'no carry.'

JMP exit

label1:

PRINT 'has carry.'

exit:

RET

C

Z

S

O

P

A

-

JMP

Метка

4-хбайтный адрес

Безусловный переход (перемещение к другой части программы). 4-х байтный адрес может вводиться в виде: 1234h:5678h, первое значение – база сегмента, второе – смещение.

Алгоритм:

переход по метке (всегда)

Выполнить прыжок через 2 строки, напечатать “Got Here!”, если прыжок выполнен:

include 'emu8086.inc'

ORG 100h

MOV AL, 5

JMP label1

PRINT 'Not Jumped!'

MOV AL, 0

label1:

PRINT 'Got Here!'

RET

C

Z

S

O

P

A

-

 

LOOP

метка

Декрементация CX, переход к метке, если CX не равен нулю

Алгоритм:

CX=CX -1

если CX <> 0 то переход

иначе продолжить

Напечатать “loop” 5 раз:

include 'emu8086.inc'

ORG 100h

MOV CX, 5

label1:

PRINTN 'loop!'

LOOP label1

RET

C

Z

S

O

P

A

-

 

MOV

REG, memory

memory, REG

REG, REG

memory, immediate

REG, immediate

SREG, memory

memory, SREG

REG, SREG

SREG, REG

Копирование операнда2 в операнд1

Команда MOV не может:

1.устанавливать значение регистров CS и IP.

2.копировать значение одного сегментного регистра в другой сегментный регистр (необходимо сначала скопировать в регистр общего назначения).

3.копировать непосредственное значение в сегментный регистр

Алгоритм:

операнд1=операнд2

Занесение числа ABh в регистр AL, пересылка его в ячейку памяти с адресом 01101h:

MOV AL, 0ABh

MOV BX, 0100h

MOV DS, BX

MOV [BX+1], AX

RET

C

Z

S

O

P

A

-

 

MUL

REG

memory

Умножение (без знака)

Алгоритм:

1)операнд - байт:

AX = AL * операнд

2)операнд - слово:

(DX AX) = AX*операнд

Умножение 200 на 4:

MOV AL, 200

MOV BL, 4

MUL BL

; AX = 0320h (800)

RET

C

Z

S

O

P

A

r

?

?

r

?

?

CF=OF=0, если старший бит результата равен нулю

NOP

-

Нет операции

Ничего не делать 2 раза:

NOP

NOP

RET

C

Z

S

O

P

A

-

NOT

REG

memory

Инвертирует все биты операнда

Алгоритм:

1.если бит равен 1, то приравнять бит 0

2.если бит равен 0, то приравнять бит 1

Инвертировать число 11011b:

MOV AL, 00011011b

NOT AL

; AL = 11100100b

RET

C

Z

S

O

P

A

-

 

OR

REG, memory

memory, REG

REG, REG

memory, immediate

REG, immediate

Логическое ИЛИ между всеми битами двух операндов. Результат сохраняется в первом операнде.

Применяются правила:

1 OR 1 = 1

1 OR 0 = 1

0 OR 1 = 1

0 OR 0 = 0

Сложение по ИЛИ 1000001b и 100000b:

MOV AL, 'A'

; AL = 01000001b

OR AL, 00100000b

; AL = 01100001b ('a')

RET

C

Z

S

O

P

A

0

r

r

0

r

?

 

RET

immediate

Возврат из процедуры

Алгоритм:

1.вытолкнуть из стека: IP

2.если операнд – константа:

SP=SP+operand

Вызов процедуры занесения числа 1234h в регистр AX, увеличение его на 1

ORG 100h ; for com file

CALL p1

ADD AX, 1

RET

p1 PROC

MOV AX, 1234h

RET

p1 ENDP

C

Z

S

O

P

A

-

 

SAL

memory, immediate

REG, immediate

memory, CL

REG, CL

Арифметический сдвиг операнда 1 влево. Число сдвигов устанавливается операндом 2 (константа либо значение регистра CL)

Алгоритм:

1.Сдвиг всех бит влево, старший бит записывается в CF.

2.В качестве младшего бита записывается 0.

Сдвиг числа E0 влево 1 раз:

MOV AL, 0E0h

; AL = 11100000b

MOV CL, 1

SAL AL, CL

; AL = 11000000b, CF=1.

RET

C

O

r

r

OF=0 если знак операнда1 сохраняется.

SAR

memory, immediate

REG, immediate

memory, CL

REG, CL

Арифметический сдвиг операнда1 вправо. Число сдвигов устанавливается операндом2 (константа либо значение регистра CL)

Алгоритм:

1.Сдвиг всех бит вправо, младший бит заносится в CF.

2.Старший бит (бит знака) устанавливается в то же значение, что было раньше.

Сдвиг числа E0 вправо 2 раза (бит знака равен 1):

MOV AL, 0E0h

; AL = 11100000b

SAR AL, 2

; AL = 11111000b, CF=0.

RET

Сдвиг числа 4C вправо 1 раз (бит знака равен 0):

MOV BL, 4Ch

; BL = 01001100b

SAR BL, 1

; BL = 00100110b, CF=0

RET

C

O

r

r

OF=0 если знак операнда1 сохраняется.  

SUB

REG, memory

memory, REG

REG, REG

memory, immediate

REG, immediate

Вычитание

Алгоритм:

операнд1=операнд1-операнд2

Вычитание 2 из 5:

MOV AL, 5

SUB AL, 2

; AL = 3

RET

C

Z

S

O

P

A

r

r

r

r

r

r

XOR

REG, memory

memory, REG

REG, REG

memory, immediate

REG, immediate

Сумма по модулю 2 (исключающее ИЛИ) между всеми битами двух операндов. Результат сохраняется в первом операнде.

Применяются правила:

1 XOR 1 = 0

1 XOR 0 = 1

0 XOR 1 = 1

0 XOR 0 = 0

Сумма по модулю два чисел 111b и 10b:

MOV AL, 00000111b

XOR AL, 00000010b

; AL = 00000101b

RET

C

Z

S

O

P

A

0

r

r

0

r

?

Примечания

REG – регистр общего назначения: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP

SREG – сегментный регистр: DS, ES, SS, только в качестве второго операнда - CS

Memory – ячейка памяти: [BX], [BX+SI+7], var, etc...

Immediate – непосредственный ввод значения.

В описании регистра флагов:

1 – флаг устанавливается в 1

0 – флаг устанавливается в 0

r – значение флага зависит от результата операции

? – значение флага не определено

- - значение флага не изменяется

15

Соседние файлы в папке 5