Приложение 1. Система команд микропроцессора.

В приложении приводятся все команды микропроцессоров 8088/8086. Особо рас­сматриваются команды, не описанные ранее. С командами других микропроцессоров семейства можно познакомиться в главах 5,20.

Коррекция арифметических действий с неупакованными BCD-числами.

Мнемоника

Описание

Число тактов

Число байт

AAA

Коррекция неупакованньгх ВСБ-чисел после сложения.

4 .

1

AAD

Коррекция неупакованный ВШ-чиселдо деления.

60

2

ААМ

Коррекция неупакованныхВС1>чисел после умножения.

83

2

AAS

Коррекция неупакованныиВСЕ>-чиселпосле вычитания.

4

1

Неупакованные BCD-числа или числа в ASCII-формате представляют собой пос­ледовательность байт, каждый из которых соответствует одному разряду числа в деся­тичном представлении (цифра или ее ASCII-код). Ниже представлена программа, по­казывающая, как можно складывать или вычитать числа в ASCII-формате. Числа пред­ставлены строками Р1 и Р2. Результаты сложения и вычитания помещаются соответ­ственно в строки SUMh RAZ. Действия производятся в предположении, что результат является двухразрядным числом.

CODE SEGMENT

ORG 100Н ASSUME CS:CODE

BEGIN;

/вычисление и вывод суммы ■ MOV AL,CS:P1+1 ADD AL,CS:P2+1

ААА /коррекция сложения младших разрядов

MOV CS:SUM+1,AL MOV AL,CS:P1

ADC AL,CS:P2

ААА /коррекция сложения  старших разрядов

MOV CS:SUM,AL /получение строки

ADD BYTE  PTR CS:SUM,48 ADD BYTE   PTR CS:SUM+l, 48 MOV DX,OFFSET CS:SUM MOV AH, 9 ASSEMBLES.. Учебный курс

/•вычисление и вывод разности MOVAL,CS:Pl + l SUB AL,CS:P2 + 1

AAS ; коррекция вычитания младших разрядов

MOV CS:RAZ+1,AL MOVAL,CS:Pl SBB AL,CS:P2

AAS ;коррекция вычитания младших разрядов

MOV CS:RAZ,AL ;получение строки

ADD BYTE   PTR CS:RAZ,48 ADD  BYTE   PTR CS:RAZ+1,48 MOV   DX,OFFSET CS:RAZ MOV AH,9 INT 21H RET

PI

DB '

39'

 

 

 

P2

DB '

12'

 

 

 

SUM

DB '

 

M3,

10,

•$

RAZ

DB '

 

,13,

10,

■$

CODE

ENDS

 

 

 

 

END BEGIN

Команда ААМ облегчает умножение чисел, представленных в ASCII-формате. Эта команда делит содержимое AL на 10, помещая результат в АН, а остаток AL. Ниже представлен пример использования этой команды для умножения двух чисел.

CODE SEGMENT

ORG 100Н ASSUME CS:CODE

BEGIN:

;умножаем PI  на  P2   предположения P1*P2<100

MOV

:P1 + 1

MOV

AL,CS

:P2

SUB

AL, 48

 

SUB

CL, 48

 

MUL

CL

;3*7

AAM

 

 

PUSH

AX

 

MOV

CL,CS

:P1

MOV

AL,CS

:P2

SUB

AL, 48

 

SUB

CL, 48

 

MUL

CL

;3*2

MOV

AH, AL

 

XOR

AL, AL

 

POP

CX

 

ADD

AL, CL

; 1+ 0

ADC    АН,СН     ; 6+2

OR     АХ,3030Н        ;перевод в ASCII-формат MOV CS:MUL1,AH MOV    CS:MULl+1,AL

результат LEA     DX,CS:MUL1

MOV АН, 9 INT 21H ret

Pi        DB '27'

P2        DB   ' 3 '

MUL1    DB   '      ' ,13,10, '$'

CODE ENDS

end begin

Аналогично для деления в ASCII-формате используется команда AAD, которая загружает в AL

Коррекция арифметических действий с упакованными BCD-числами.

Мнемоника

Описание

Число

Число

 

 

 

тактов

байт

 

DAA

Коррекция упакованных BCD-чисел после сложения. 4

1

 

DAS         Коррекция упакованных BCD-чисел после вычитания. 4

1

 

Команды арифметических действий.

 

Мнемоника

Описание

Число

Число

 

 

 

тактов

байт

 

ADD

Сложить

 

 

 

 

регистр - регистр

3

2

 

 

память - регистр

9+FA

2-4

 

 

регистр - память

16+ЕА

2-4

 

 

непосредственный операнд - регистр

4

3-4

 

 

непосредственный операнд - память

17+ЕА

3-6

 

 

непосредственный операнд - аккумулятор

4

2-3

 

ADC

Сложить с переносом

 

 

 

 

регистр - регистр

3

2

 

 

память - регистр

9+ЕА

2-4

 

 

регистр - память

16+ЕА

2-4

 

 

непосредственный операнд - регистр

4

3-4

 

 

непосредственный операнд - память

17+ЕА

3-6

 

 

непосредственный операнд - аккумулятор

4

2-3

 

SUB

Вычесть

 

 

 

 

регистр - регистр

 

3

2

 

память - регистр

 

9+ЕА

2-4

 

регистр - память

 

16+ЕА

2-4

 

непосредственный операнд ■

- регистр

4

3-4

 

непосредственный операнд ■

-память

17+ЕА

3-6

 

непосредственный операнд - аккумулятор

4

2-3

SBB

Вычесть с переносом

 

 

 

 

регистр - регистр

 

3

2

 

память - регистр

 

9+ЕА

2-4

 

регистр - память

 

16+ЕА

2-4

 

непосредственный операнд

- регистр

4

3-4

 

непосредственный операнд -

память

17+ЕА

3-6

 

непосредственный операнд -

аккумулятор

4

2-3

NEG

Изменитьзнак

 

 

 

 

регистр

 

3

2

 

память

 

16+ЕА

2-4

DEC

Декремент на 1

 

 

 

 

16-битный регистр

 

2

1

 

8-битный регистр

 

3

2

 

память

 

15+ЕА

2-4

INC

Инкремент на 1

 

 

 

 

16-битный регистр

 

2

1

 

8-битный регистр

 

3

2

 

память

 

15+ЕА

2-4

MUL

Умножить без знака

 

 

 

 

8-битный регистр

 

70-77

2

 

16-битный регистр

 

118-133

2

 

8-битная память

 

(76-83)+ 2-4

 

16-битнаяпамять

 

ЕА (124-139) 2-4

 

 

 

+ЕА

 

IMUL

Умножить со знаком

 

 

 

 

8-битный регистр

 

80-98

2

 

16-битный регистр

 

128-154

2

 

. 8-битная память

 

(86-104)+ 2-4

 

память

 

ЕА (134-160) 2-4

 

 

 

+ЕА

 

DIV

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

 

 

 

 

8-битный регистр

 

80-90

2

 

16-битная память

 

144-162

2

 

16-битный регистр

 

(86-96)+ 2-4

 

8-битная память

 

ЕА (150-168)

2-4

 

 

 

+ЕА

 


ГОР/

Деление со знаком

 

 

8-битный регистр

І0І-ІІ2 2

 

16-битный регистр

165-184 2

 

8-битная память

(107-118)2-4

 

16-битная память

+ЕА (171-190) 2-4

 

 

+EA

CBW

Преобразовать байт в слово

2   . І

CWD

Преобразование слова в двойное слово

5 1

Поясню некоторые обозначения, появившиеся в данной таблице. ЕА - означает добавку ко времени выполнения за счет необходимого обмена с памятью. Напри­мер, команда INC MEM, где MEM — некоторая ячейка памяти, предполагает вы­числение эффективного адреса, соответствующего данной ячейке. В данном слу­чае адресация была прямой и требует для вычисления эффективного адреса 6 так­тов. Команда же INC [BX] предполагает косвенную адресацию. Для вычисления эффективного адреса при такой адресации требуется 5 тактов. И т.д. Длина коман­ды может варьироваться. Например, запись 2-4 означает, что команда может бы­ть длиной 2 или 4 байта: команда ADD ВХ.МЕМ длиной 4 байта, команда ADD BX,[DI] - длиной 2 байта и т.п.

Команды передачи данных.

Мнемоника Описание Число Число

тактов байт

IN Вывести из порта ввода-вывода

фиксированныйпорт:ЕЧАЕ,61Н 10 2

переменный порт: MOVDX,61H/INAL,DX 8 1

Вывести из порта ввода-вывода

фиксированный порт: OUT 61 H,AL 10 2

nepeMeHHbfflnopT:MOVDX,61H/OUTDX,AL 8 1

MOV Переслать

аккумулятор - память

10

з

 

память - аккумулятор

10

з

 

регистр - регистр

2

2

 

память - регистр

8+EA

2-4

 

регистр - память

9+EA

2-4

 

непосредственный операнд - регистр

4

2-3

 

непосредственный операнд - память

10+ЕА

3-6

 

регистр - сегментный регистр (кроме СБ)

2

2

 

память - сегментный регистр (кроме СБ)

8+EA

2-4

 

сегментный регистр - регистр

2

2

 

сегментный регистр - память

9+EA

2-4

 

LEA

Загрузить эффективный адрес (смещение)

2+EA

2-4

LDS

Загрузить регистр вместе с ББ (указатель)

16+ЕА

2-4

LES

Загрузить регистр вместе с ЕБ (указатель)

16+ЕА

2-4

LAHF

Загрузить АН из флажков

4

1

SAHF

Запомнить АН во флажках

4

1

LODSB

Загрузить цепочку байт

 

 

LODSW

Загрузить цепочку слов без повторения с повторением

12

9+13/пов.

1 1

MOVSB

Переслать цепочку байт

 

 

MOVSW

Переслать цепочку слов без повторения с повторением

18

9+17/пов.

1 1

SCASB

Сканировать цепочку байт

 

 

SCASW

цепочку слов

без повторения

с повторением

15

9+15/пов.

1

STOSB

Запомнить цепочку байт

 

 

STOSW

Запомнить цепочку слов

без повторения

с повторением

И

9+10/пов.

1 1

TOPF

Извлечь флажки из стека

8

1

PUSHF

Включить флажки в стек

8

1

ГОР

Извлечь слово из стека в регистр

в сегментный регистр (кроме СБ) в память

8 8

17+ЕА

1

1

2-4

PUSH

Включить слово в стек из регистра

из сегментного регистра из памяти

11

10

16+EA

2-4

1

1

XLATB

Загрузить АЕ из таблицы

11

1

XCHG

Обменять

регистр - аккумулятор регистр - память регистр - регистр

з

11+ЕА

4

2^4

1

1

1. Система команд микропроцессора

Записьтипа9+10/пов. означает, что возможныдва варианта работы команды. Если повторение осуществлялось, тогда время будет 9+пов. Если же число повторений было О (СХ=0), то время будетравно9+10.

Логические команды и команды манипуляции битами.

Мнемоника

Описание

Число Число тактов байт

AND Побитовое "И"

регистр - регистр память - регистр регистр - память

непосредственный операнд - регистр непосредственный операнд - память непосредственный операнд - аккумулятор

з

9+EA

16+ЕА

4

17+ЕА

4 2

2-4

2- 4

3- 4 3-6 2-3

ОК. Побитовое "ИЛИ"

регистр - регистр память - регистр регистр - память

непосредственный операнд - регистр непосредственный операнд - память

.   непосредственный операнд - аккумулятор з

9+EA 16+EA

4

17+EA

4 2

2-4

2- 4

3- 4 3-6 2-3

ХОЯ Побитовое исключающее "ИЛИ"

регистр - регистр память - регистр регистр - память

непосредственный операнд - регистр непосредственный операнд - память

непосредственный операнд - аккумулятор

3

9+EA 16+EA

4

17+EA

4 2

2-4

2- 4

3- 4 3-6 2-3

NOT Отрицание (инвертирование)

регистр память 3

16+EA 2

2-4

ШСЕ Циклически сдвинуть влево через бит переноса

регистр (на один бит) 2 2

регистр(переменныйсдвиг) 8+4/бит 2

память (на один бит) 15+ЕА 2-4

память (переменный сдвиг) 20+ЕА+ 2-4

Циклически сдвинуть вправо через бит переноса

регистр (на один бит) 2 2

регистр (переменный сдвиг) 8+4/бит 2

память (на один бит) 15+ЕА 2-4

память (переменный сдвиг) 20+ЕА+ 2-4

ROL

Циклически сдвинуть влево

 

 

 

регистр (на один бит)

2

2

 

регистр (переменный сдвиг)

8+4/бит

2

 

память (на один бит)

15+ЕА

2-4

 

память (переменный сдвиг)

20+ЕА+

2-4

ROR

Циклически сдвинуть вправо

 

 

 

регистр (на один бит)

2

2

 

регистр (переменный сдвиг)

8+4/бит

2

 

память (на один бит)

15+EA

2-4

 

память (переменный сдвиг)

20+EA+

2-4

 

 

4/бит

 

 

 

4/бит

 

SAL

Сдвинуть влево с учетом знака

 

 

 

регистр (на один бит)

2

2

 

регистр (переменный сдвиг)

8+4/бит

2

 

память (на один бит)

15+EA

2-4

 

память (переменный сдвиг)

20+EA+

2-4

SHL

Сдвинуть влево без учета знака (логически)

 

 

 

регистр (на один бит)

2

2

 

регистр (переменный сдвиг)

8+4/бит

2

 

память (на один бит)

15+EA

2-4

 

память (переменный сдвиг)

20+EA+

2-4

SAR

Сдвинуть вправо с учетом знака

 

 

 

регистр (на один бит)

2

2

 

регистр (переменный сдвиг)

8+4/бит

2

 

память (на один бит)

15+EA

2-4

 

память (переменный сдвиг)

20+EA+

2-4

SHR

Сдвинуть вправо без учета знака (логически)

 

 

 

регистр (на один бит)

2

2

 

регистр (переменный сдвиг)

8+4/бит

2

 

память (на один бит)

15+EA

2-4

 

память (переменный сдвиг)

20+EA+

2-4

 

 

4/бит

 

Команды сравнения.

 

 

Мнемоника

Описание

Число

Число

 

 

тактов

байт

СМР

Сравнить

 

 

 

регистр - регистр

3

2

 

память - регистр

9+EA

2-4

 

регистр - память

9+EA

2-4

 

непосредственный операнд - регистр

4

3-4

 

непосредственный операнд - память

10+ЕА

3-6

 

непосредственный операнд - аккумулятор

4

2-3

СМРБВ

Сравнить цепочку байт

 

 

 

Сравнить цепочку слов

 

 

 

без повторения

22

1

 

с повторением

1

ТЕБТ

Проверить

 

 

 

регистр - регистр

3

2

 

память - регистр

9+EA

2-4

 

непосредственный операнд - аккумулятор

4

2-3

 

непосредственный операнд - регистр

4

3-4

 

непосредственный операнд - память

17+ЕА

3-6

Данные команды удобны тем, что действуют на флажки, но не на содержимое ре-

гистров.

 

 

 

Команды переходов и повторений.

 

 

Мнемоника

Описание

Число

Число

 

 

тактов

байт

CALL

Вызов процедуры

 

 

 

внутрисегментный прямой

19

3

 

внутрисегментный косвенный через регистр

16

2

 

внутрисегментный косвенный через память

21+ЕА

2-4

 

межсегментный прямой

28

5

 

межсегментный косвенный

37+EA

2-4

ЮТ

Вызов прерывания

 

 

 

тип=3

52

1

 

тип=/3

51

2

INTO

Прерывание при переполнении

54

1

 

прерывание есть

 

прерывания нет

4

1

IRET

Возвратиться из прерывания

24

1

RET

Возврат из процедуры внутрисегментный внутрисегментный с константой межсегментный межсегментный

с константой

8 12

18

17

1

3 1

3

REP

Повторить цепочечную операцию

2

1

REPE

Повторить операцию, пока равно

2

1

REPZ

Повторить операцию, пока нуль

2

1

REPNE

Повторить операцию, пока не равно

2

1

REPNZ

Повторить операцию, пока не нуль

2

1

LOOP

Зациклить

17/5

2

LOOPE

Зациклить, если равно

18/6

2

LOOPZ

Зациклить, если нуль

18/6

2

LOOPNE

Зациклить, если не равно

19/5

2

LOOPNZ

Зациклить, если не нуль

19/5

2

JMP

Безусловный переход

внутрисегментный прямой короткий (SHORT) внутрисегментный прямой (NEAR)

межсегментный прямой внутрисегментный косвенный через память

внутрисегментный косвенный через регистр

15

15

15

15+ЕА

11

2 3 5

2-4 2

JCXZ

Перейти, если СХ=0

18/6

2

JA/JNBE

Перейти, если выше

16/4

2

JAE/JNB

Перейти если выше или равно

16/4

2

JB/JNAE

Перейти, если ниже

16/4

2

JBE/JNA

Перейти, если не ниже

16/4

2

JE/JZ

Перейти, если равно

16/4

2

JG/JNLE

Перейти, если больше

16/4

2

JGE/JNL

Перейти, если больше или равно

16/4

2

JUJNGE

Перейти, если меньше

16/4

2

JLE/JNG

Перейти, если меньше или равно

16/4

2

JC

Перейти, если перенос

16/4

2

JNC

Перейти, если переноса нет

16/4

2

Через черточку здесь указаны идентичные команды ОАЛШЕ). Запись же типа 16/4 означает, что команда выполняется за четыре такта при выполнении условия и за шест­надцать в противном случае.

Команды управления.

Мнемоника

Описание

Число тактов

Число байт

сиг

Сбросить флажок переноса

2

1

сиз

Сбросить флажок направления

2

1

си

Сбросить флажок прерывания

2

1

смс

Инвертировать флажок переноса

2

1

ББС

Переключиться на сопроцессор

регистр

память

2

8+ЕА

2

2-4

нет

Остановить

2

1

N0?

Холостая команда

3

1

БТС

Установить флажок переноса

2

1

БТЕ>

Установить флажок направления

2

1

8ТІ

Установить флажок прерывания

2

1

УУАГТ

Ожидать активного сигнала

3+5

1