Введение

advertisement
Введение
Микропроцессор 8086 фирмы INTEL (у нас К1810ВМ86) по воле коньюктуры рынка
стал основой персональных ЭВМ фирмы IBM и большого числа программно – совместимых
компьютеров других фирм, известных у нас под названием «IBM PC» или «IBM PC
совместимый компьютер». 8086 явился основополагающим в серии процессоров x86 фирмы
INTEL, все модели которой от 80286 до Pentium имеют кроме защищенного режима работы
режим совместимости с процессором 8086 – реальный режим.
Изучение микропроцессора 8086 требуется для
понимания функционирования
микропроцессоров фирмы INTEL и им подобных.
Программная модель микропроцессора Intel 8086
Микропроцессор Intel8086 (МП) является однокристальным 16-разрядным процессором
с фиксированной системой команд. Система команд содержит безадресные, одноадресные и
двухадресные команды, обеспечивающие эффективную запись программы и обработку
различных типов данных. МП позволяет вести обработку битов, двоично-десятичных
упакованных и распакованных чисел, байтов, двухбайтовых слов и строк до 216 байт длиной.
Числа представляются в дополнительном коде с фиксированной запятой, знаковый разряд –
старший.
МП имеет 20-разрядныю адресную шину, которая обеспечивает обращение к 1 Мб
памяти. Однако в МП принята сегментная адресация памяти. МП оперирует 16- разрядными
смещениями в сегменте. Адреса сегментов хранятся в специальных регистрах, получивших
название сегментных. Смещение в сегменте (в некоторой литературе – эффективный адрес
(ЕА)) указывается в командах, либо вычисляется в соответствии с принятым способом
адресации.
Физический адрес памяти всегда формируется как сумма адреса сегмента и смещения в
сегменте, т.е. в этом МП жестко заложен механизм относительной адресации независимо от
цели обращения к памяти и способа адресации операнда, который влияет лишь на способ
определения смещения (эффективного адреса).
Память в ВМ86 логически организована в виде последовательности смежных байтов,
однако физическая память организована в виде последовательности 16-разрядных слов,
организованных в два банка по 512 Кбайт
- банк нечетных байтов – старший банк (D15-D8)
- банк четных байтов – младший банк (D7-D0)
Адрес байта
00001
Старший банк
Младший банк
15
7
8
0
Адрес байта
00000
00003
00002
00005
00004
Адресом слова является адрес младшего байта.
В этом МП первый байт слова может иметь как четный, так и нечетный адрес в памяти.
Но при этом необходимо помнить, что процессор может осуществлять обращение к слову в
одном цикле памяти, если это слово имеет четный адрес. Если в команде указано слово с
нечетным адресом, то МП обращается к двум словам в памяти и формирует необходимое слово
за два обращения к памяти. Исходя из этого имеет смысл работать со словами, имеющими
четные адреса.
Кроме памяти МП обеспечивает обращение к подсистеме ввода- вывода, которая может
содержать до 216 адресуемых регистров.
В МП реализована векторная система прерываний, число различных векторов- 256.
Микропроцессор имеет 14 16-разрядных программно-доступных регистров.
15
8 7
0
AH
AL
AX
EH
BL
BX
регистры
данных
CH
CL
CX
DH
DL
DX
15
регистры
общего
назначения
0
Индексн. рег. источн.
SI
Индексн. рег. приемн.
DI
Указатель базы
BP
Указатель стека
SP
Указатель команд
IP
регистры
адреса
–
"программный счетчик"
Восемь регистров считаются регистрами общего назначения, поскольку во время выполнения
программы в них могут храниться адреса и данные. Однако эти регистры имеют и закрепленные
функции, что делает их неодинаковыми с точки зрения использования. Четыре регистра общего
назначения AX, BX, CX, DX являются регистрами данных, т.к. их основное назначение –
хранение операндов и результатов операций. Система команд допускает использование этих
регистров целиком и в виде старшей и младшей половин. В команде, операндами которой
являются слова, используется весь регистр целиком.
В тех командах, где операнды являются байтами, может быть указана любая половина любого
из четырех регистров данных (например, AL и AH).
Кроме общих функций внутри этой группы имеется и более узкая специализация. При
выполнении команд за этими регистрами по умолчанию закреплены различные функции. Это
обстоятельство требует от программиста соблюдение определенных условий при распределении
и использовании регистров. Закрепленные за регистрами функции приведены в таблице 1.
сегмент команд
CS
сегмент данных
DS
сегмент стека
SS
Дополнит. сегмент
ES
регистр флагов
F
Регистр
AX
AL
AH
BX
CX
CL
DX
Сегментные
Регистры
– регистр состояния
Назначение
Аккумулятор
Аккумулятор
(мл. байт)
Аккумулятор
(ст. байт)
Базовый
регистр
Счетчик
Счетчик
(мл. байт)
Регистр данных
и
адреса
ввода-вывода
Закрепленные функции
Ввод-вывод, умножение и деление слова
Ввод-вывод,
умножение
и
деление
байтов,
десятичная
арифметика,
преобразование кодов
Умножение и деление байтов
Базовый
регистр,
преобразование
адресов
Обработка строк. Подсчет циклов
Динамические и циклические сдвиги
Умножение и деление слов;
Косвенная адресация регистров
Ввода-вывода
Следующие четыре общих регистра SP, BP, SI, DI применяются в основном для
хранения 16-разрядных адресов, поэтому их можно отнести к адресным регистрам. И операнды,
и адреса, хранимые в этих регистрах, могут быть только 16-разрядными.
Регистр SP является системным указателем стека, используемым при прерываниях и
обращении к подпрограммам. В этом регистре хранится и формируется текущий адрес внутри
сегмента стека.
Регистр BP является базовым регистром, используется при формировании адресов
операндов (так же как BX).
Регистры SI и DI являются индексными регистрами, используются при формировании
адресов операндов и выполнении строковых операций.
Регистр IP – указатель команд, фактически является регистром адреса команд или
программным счетчиком. В этом регистре формируется адрес команды внутри сегмента памяти.
Адреса, хранящиеся или формируемые с помощью этих регистров, не являются
окончательными адресами памяти. Это адреса внутри сегмента или так называемые смещения.
Окончательный адрес или физический адрес памяти определяется содержимым
соответствующего сегментного регистра – CS, DS, SS, ES.
Все регистры, участвующие в формировании адреса, имеют длину 16 разрядов, а
физический адрес,
вырабатываемый
микропроцессором,
содержит
20
разрядов.
Дополнительные 4 бита образуются при сложении 16-разрядного смещения с содержимым
одного из сегментных регистров, сдвинутым на 4 разряда влево. Перенос из старшего разряда
игнорируется.
15
0
– смещение
+
15
0
Сегментный регистр
0000
19
– адрес сегмента
0
– физический адрес
Например: формирование адреса команды производится по следующей схеме:
15
0
IP
+
15
0
CS
0000
19
0
Адрес команды
Применение сегментных регистров разделяет пространство памяти на 64 Кбайтные
сегменты, располагающиеся в памяти с адресов, кратных 16. В большинстве случаев
использование сегментного регистра при формировании физического адреса происходит по
умолчанию в соответствии с операцией и именем, присвоенным регистру.
CS – сегментный регистр команд, используется при чтении команд.
SS – сегментный регистр стека, используется при работе со стеком.
DS – сегментный регистр данных, используется при обращении к операндами.
ES – дополнительный сегментный регистр, используется при работе с операндами.
В командах обработки данных можно нарушить правило умолчания. Для этого в
командах используется явное указание сегментного регистра (префикс сегмента).
Регистр состояния процессора имеет название регистра флагов и считается 16разрядным, хотя используется в этом регистре всего 9 разрядов.
15
14
13
12
11
10
9
8
7
6
CF
DF
IF
TF
SF
ZF
Содержимое отдельных разрядов
управления.
5
4
AF
3
2
PF
1
0
CF
называется флагом или флажком условий или
Флаги состояния:
SF – знак результата, установлен, если результат <0.
ZF – нуль результата, устаговлен, если результат =0.
FF – паритет, установлен если младший байт результата содержит четное число единиц.
CF – перенос, устанавливается если результат выходит за разрядную сетку.
AF– вспомогательный перенос, признак десятичной коррекции при обработке двоичнодесятичных чисел
OF – переполнение, устанавливается при переполнении числовых разрядов разрядной сетки
Флаги управления:
DF – направление. Применяется в командах обработки строк. Если этот флажок сброшен,
цепочка обрабатывается с первого элемента, имеющего наименьший адрес. В противном
случае цепочка обрабатывается от наибольшего адреса к наименьшему.
IF – разрешение прерываний. Если флажок сброшен, то прерывания запрешены, установленразрешены.
TF – трассировка. Если этот разряд установлен, то после выполнения каждой команды
генерируется внутреннее прерывание.
Разряды регистра флагов программно доступны как для чтения, так и для записи.
Структура и формат команд
Основные команды могут иметь длину от 1 до 6 байт. Код операции всегда содержится
в первом байте команды, а последующие байты, если они имеются, содержат адресную
информацию. В этом микропроцессоре широко используется закрепление функций и режимов
по умолчанию. Это позволяет экономить на длине команд и времени их выполнения.
Для того чтобы отменить определенный режим вызова операции, установленный по
умолчанию, перед байтом кода операции могут быть помещены один или несколько байтов,
называемых «префиксом команды». «Префикс команды» можно рассматривать по-разному. На
языке ассемблера префикс рассматривается как часть команды, т.к. его действие
распространяется только на одну команду или ее часть. На уровне машинных команд префикс
удобно рассматривать как специальную команду, устанавливающую режим выполнения
следующей команды.
Команды МП оперируют с операндами, хранящимися в памяти ЭВМ. Способы
определения операнда называются режимом или способом адресации. В некоторых командах
способ адресации операнда задается в первом байте команды, в других – информация о способе
адресации содержится во втором байте команды, называемом постбайтом.
Постбайт может определять один или два операнда. Структура постбайта имеет вид:
7
КОП OP1, OP2
6
5
MOD
4
3
REG / OP
2
1
0
R / M
Поля MOD и R/M определяют первый операнд, поле REG/OP – второй. Обычно OP1 является
приемником, а OP2 источником. В некоторых командах допускается изменение направления
передачи данных. В таких командах в первом байте вводится поле d, определяющее
направление передачи данных, если d=1 то в регистр, если d=0 то из регистра.
Второй операнд, если он имеется, всегда находится в регистре, задаваемым полем REG/OP. В
командах с одним операндом поле REG/OP используется для расширения кода операции,
записанного в первом байте команды.
Регистр, используемый командой, задается в поле REG/OP номером и кодом операции первого
байта, что позволяет использовать один и тот же номер для обозначения разных регистров.
Если команда оперирует с сегментными регистрами, то содержимое поля REG расценивается
как номер сегментного регистра, иначе как номер регистра общего назначения. При этом, если
команда может оперировать и байтом и словом, то в коде операции есть бит W, который
определяет длину операнда ( W=0 - байт, W=1 - слово). Используемые регистры и их номера
приведены в таблице 2.
Номер
регистра
000
Рег. общего
назначения
W = 1
W = 0
AX
AL
Сегмент.
Регистры
Короткий номер
сегментного
регистра
ES
00
001
010
011
100
101
110
111
CX
DX
BX
SP
BP
SI
DI
CL
DL
BL
AH
CH
DH
BH
CS
SS
DS
01
10
11
Операнд, указываемый полями MOD и R/M, определяется в соответствии с имеющим
место режимом адресации. Все способы адресации операндов в памяти обеспечивают
формирование 16-разрядного адреса внутри сегмента или, как принято называть в технической
документации, эффективного адреса, который обозначают буквами ЕА.
Способ формирования эффективного адреса и используемый по умолчанию
сегментный регистр в зависимости от значения полей MOD и R/M приведен в таблице 3.
Операнд в
регистре
Операнд в памяти
MOD
11
00
01
10
DS:
(BX)+(SI)+D8
DS:
(BX)+(DI)+D8
SS:
(BP)+(SI)+D8
SS:
(BP)+(DI)+D8
DS:
(SI)+D8
DS:
(DI)+D8
SS:
(BP)+D8
DS:
(BX)+D8
DS:
(BX)+(SI)+D16
DS:
(BX)+(DI)+D16
SS:
(BP)+(SI)+D16
SS:
(BP)+(DI)+D16
DS:
(SI)+D16
DS:
(DI)+D16
SS:
(BP)+D16
DS:
(BX)+D16
R/M
000
001
010
011
100
101
110
111
DS:
(BX)+(SI)
DS:
(BX)+(DI)
SS:
(BP)+(SI)
SS:
(BP)+(DI)
DS:
(SI)
DS:
(DI)
DS:
D16
DS:
(BX)
W = 0
W = 1
AL
AX
CL
CX
DL
DX
BL
BX
AH
SP
CH
BP
DH
SI
BH
DI
где D8 - 8-битное смещение,указываемое в команде
D16 – 16-битное смещение,указываемое в команде.
При MOD=16 операнд находится в регистре, номер которого указан в поле R/M.
По умолчанию в режимах адресации с привлечением регистра BP при получении
физического адреса используется сегментный регистр SS, в остальных режимах адресации
используется сегментный регистр DS. Чтобы изменить используемый сегментный регистр
предусмотрена специальная однобайтовая команда – префикс замены сегмента.
Он имеет следующий формат:
7
6
5
0
0
1
4
3
R E G
2
1
0
1
1
0
где REG – короткий адрес сегментного регистра (см. таблицу 2).
Если перед командой стоит префикс замены сегмента, то при формировании адреса
будет использоваться сегментный регистр, указанный в префиксе замены сегмента.
Нельзя изменить сегментный регистр при:
- чтении следующей команды (всегда CS);
- обращение к стеку с участием SP (всегда SS);
- цепочечных командах (сегментный регистр операнда-получателя всегда ЕS).
Длина команд в микропроцессоре варьируется от 1 до 6 байт, не считая префиксов. В
первых одном или двух байтах команды содержится код операции и указание способа
адресации. После них могут находиться:
- ни одного дополнительного байта;
- двухбайтовый эффективный адрес (ЕА);
- одно или двухбайтное смещение;
- одно или двухбайтный непосредственный операнд;
- одно или двухбайтное смещение и одно или двухбайтный непосредственный операнд;
- двухбайтное смещение и двухбайтный сегментный адрес(только для прямого
межсегментного перехода).
Команда записывается в памяти в подряд идущие байты в стороны увеличения адресов, т.е.
адрес первого байта команды будет младшим адресом байтов, занимаемых командой. Если
длина смещения или непосредственных данных составляет два байта, первым всегда следует
младший байт.
Примеры некоторых форматов команд
однобайтная
операнд(ы)
КОП
КОП
REG
команда
однобайтная
регистре.
КОП
11 REG R/M
КОП
MOD REG R/M
–
команда.
неявный
Операнд
в
- регистр-регистр
регистр-память
смещения
без
регистр-память со смещением
КОП
MOD REG R/M
мл. байт данн.
если
ст. байт данн. смещение D16
непосредственный операнд в регистр
КОП
MOD КОП R/M
мл. байт данн.
ст. байт данн.
- если данные
16-разрядные
непосредственный операнд в память со смещением
КОП
MOD КОП R/M
мл. байт ом.
ст. байт см.
1
2
3
4
мл. байт данн.
ст. байт данн.
5
6
Базовый - индексный способ адресации
Эффективный адрес при этом способе адресации равен сумме содержимого базового и
индексного регистров.
MOD
00
00
00
R / M
100
101
111
Регистр
SI
DI
BX
Режим адресации задается постбайтом
MOD=00; R/M=000, 001, 010, 011.
Пример. Переслать в AX содержимое ячейки памяти с эффективным адресом (BP) + (SI).
mov ax, [bp][si]
89 20
Относительный базовый – индексный способ адресации
Эффективный адрес получается как сумма смещения, указанного в команде, содержимого
базового и индексного регистров.
( BX )
EA =
( BP )
( SI )
+
8-разрядн. Смещение
16-разрядн. Смещение
( DI )
Режим адресации задается постбайтом
MOD=01, 10; R/M=000, 001, 010, 011.
Пример. mov ax,3f[BX][DI]
89 21
( BX )
EA =
( BP )
( SI )
+
( BX )
EA =
( BP )
( DI )
8-разрядн. смещение
( SI )
+
( DI )
+
16-разрядн. смещение
Система команд МП Intel8086
Команды перемещения данных
Пересылка данных. MOV dst,src
(dst) <- (src)
- Из памяти или регистра в регистр
MOV dst, src
100010 d w
mod reg r/m
- Непосредственные данные в регистр или память
MOV dst, data
1100011 w
mod reg r/m
Данные
Данные (w=0)
- Непосредственные данные в регистр
MOV reg, data
1011W
red
Данные
Данные (w=0)
- Из памяти в аккумулятор
MOV A*, [Agp]
-
1010000 w
адрес мл. б. адрес ст. б.
Из аккумулятора в память
MOV [Agp], A*
1010001 w
адрес мл. б. адрес ст. б.
- Из регистра или памяти в сегментный регистр
MOV sreg, src
10001110
mod reg r/m
- Из сегментного регистра в регистр или память
MOV src, sreg
10001100
mod reg r/m
Загрузка в стек (с декрементом SP )
- Ячейки памяти или регистра
PUSH src
11111111
mod 110 r/m
- Регистра
PUSH reg
01011 reg
- Сегментного регистра
PUSH sreg
000 reg 110
reg – короткий номер сегм. Регистра
Извлечение из стека (с инкрементом SP)
- В память или регистр
POP dst
10001111
- В регистр
POP reg
01011 reg
- В сегментный регистр
mod 000 r/m
POP sreg
000 reg 111
reg – короткий номер сегм. Регистра
Перестановка (источник и приемник обмениваются содержимым)
- Между памятью или регистром и регистром
XCHG dst, reg
1000011 w
mod reg r/m
- Между регистром и аккумулятором
XCHG AX, RX
10010 reg
Преобразование из кода в код
- Загрузка из памяти по адресу (BX) +(AL) в регистр AL
XLAT
11010111
Удобно использовать для табличного преобразования кодов.
Загрузка регистра флагов в стек.
PUSHF
10011100
Пересылка слова из стека в регистр флагов
POPF
10011101
Загрузка регистра AH в младший байт регистра флагов
SAHF
10011110
Загрузка эффективного адреса операнда в регистр
LEA reg, src
10001101
mod reg r/m
Загрузка двойного слова, определяемого операндом src в гегистры DS и reg
LES reg, src
11000101
mod reg r/m
Загрузка DS и POH физическим адресом
LES reg, src
11000100
mod reg r/m
Загрузка младшего байта регистра флагов в AH
LAHF
10011111
Ввод из порта в AL или AX
- Ввод из непосредственно адресуемого порта (не более 255 десятичн.)
IN A*, PORT
1110010 w
адр. порта
- Ввод из порта, адресуемого через DX
IN A*, DX
1110010 w
Вывод из аккумулятора
- Вывод в непосредственно адресуемый порт
OUT PIRT, A*
1110011 w
адр. порта
- Вывод в порт, адресуемый через DX
OUT DX, A*
1110111 w
Арифметические операции
Сложение ADD dst, src
(dst = dst + src)
- Содержимого регистра или памяти с содержимым регистра
ADD dst, src
000100 d w
mod reg r/m
- Непосредственных данных с содержимым регистра или панели
ADD dst, data
100000 s w
mod 000 r/m
данные
Данные (w = 1)
- Непосредственные данные с АХ
ADD A*, data
0000010 w
данные
данные (w = 1)
Сложение с учетом переноса
- Регистра или памяти с регистром
ADS dst, src
000100 d w
mod reg r/m
- Непосредственных данных с содержимым регистра или памяти
ADC dst, data
100000 s w
mod reg r/m
данные
Данные (w = 1)
- Непосредственных данных с аккумулятором
ADC A*, data
0001010 w
Данные
данные (w = 1)
Инкремент
- Регистра или памяти
INC dst
1111111 w
mod 000 r/m
- Регистра
INC reg
01000 reg
Коррекция аккумулятора AL при сложении распакованных двоично-десятичных
чисел (в коде ASCII)
AAA
001100111
Коррекция аккумулятора AL при сложении упакованных двоично-десятичных
чисел
DAA
00100111
Вычитание SUB dst, src
(dst = dst - src)
- Регистра или памяти из регистра
SUB dst, src
001010 d w
mod reg r/m
- Непосредственных данных из регистра или памяти
SUB dst, data
100000 s w
mod reg r/m
данные
данные (w = 1)
- Непосредственных данных из аккумулятора
SUB A*, data
0010110 w
данные
данные (w = 1)
Вычитание с учетом заема
- Регистра или памяти из регистра
SBB dst, src
000110 d w
mod reg r/m
- Непосредственных данных из регистра или памяти
SBB dst, data
100000 s w
mod reg r/m
данные
данные (w = 1)
- Непосредственных данных из аккумулятора
SBB A*, data
0001110 w
Данные
данные (w = 1)
Декремент
- Регистра или памяти
DEC dst
1111111 w
mod 001 r/m
- Регистра
DEC reg
01001 reg
Изменение знака
NEG dst
Сравнение
1111011 w
mod 011 r/m
( dst – src )
CMP dst, src
- Регистра или памяти и регистра
- Непосредственных данных с регистром или памяти
CMP dst, data
100000 s w
mod 111 r/m
данные
данные (w = 1)
Непосредственных данных с аккумулятором
CMP A*, data
0011110 w
Данные
данные (w = 1)
Десятичная коррекция распакованных чисел для сложения
AAS
00101111
Десятичная коррекция распакованных чисел для вычитания
DAS
00101111
Умножение без знака AL или AX на операнд src
MUL src
1111011 w
mod 100 r/m
Умножение с учетом знака AL или AX на операнд src ( умножение целых чисел)
IMUL src
1111011 w
mod 101 r/m
Десятичная коррекция AX при умножении распакованных чисел (код ASCII)
AAM src
11010100
00001010
Беззнаковое деление содержимого DX, AX на операнд src
DIV src
1111011 w
mod 110 r/m
Деление содержимого DX, AX на src с учетом знака (деление целых чисел )
IDIV src
1111011 m
mod 111 r/m
Десятичная коррекция AL при делении распакованных чисел (код ASCII)
AAD src
11010101
00001010
Преобразование байта в слово
CBW
10011001
Преобразование слова в двойное слово
CWD
10011001
Логические операции
Инвертирование
NOT dst
1111011 w
Логическое «И»
mod 010 r/m
( dst = (dst) and (src) )
- Регистра или памяти и регистра
AND dst, src
001000 d w
mod reg r/m
- Непосредственных данных и регистра или памяти
AND dst, data
1000000 w
mod 100 r/m
данные
данные (w = 1)
- Непосредственных данных и аккумулятора
AND A*, data
0010010 w
Данные
данные (w = 1)
Логическое сравнение (установление регистра флагов)
- Регистра или памяти и регистра
TEST dst, src
1000010 w
mod reg r/m
- Непосредственных данных и регистра или памяти
TEST dst, data
1111011 w
mod 000 r/m
данные
данные (w = 1)
- Непосредственных данных и аккумулятора
Логическое «ИЛИ»
- Регистром или памятью и регистром
TEST A*, data
1010100 w
данные
данные (w = 1)
- Непосредственными данными и регистром или памятью
OR dst, src
000010 d w
mod reg r/m
- Непосредственными данными и аккумулятором
OR dst, data
1000000 w
mod 001 r/m
данные
данные (w = 1)
Команды сдвигов
Логический арифметический сдвиг dst на cnt разрядов влево
XOR dst, src
001100 d w
mod reg r/m
Логический сдвиг вправо
XOR dst, data
1000000 w
mod 110 r/m
данные
данные (w = 1)
Циклический сдвиг влево
XOR A*, data
0011010 w
данные
данные (w = 1)
Циклический сдвиг вправо
SHL/SAL
cnt
dst,
110100 v
w
mod 001 r/m
Циклический сдвиг влево через перенос
SHR dst, cnt
110100 v
w
mod 101 r/m
Циклический сдвиг вправо через перенос
SAR dst, cnt
110100 v
w
mod 111 r/m
Команды передачи управления
Команда условного переноса
Все команды условного перехода занимают 2 байта и имеют следующий машинный формат:
КОП
cмещение
8-байтовое смещение записывается в дополнительном коде, занимает второй байт команды и
обеспечивает переход в диапазоне от –128 до +127 внутри сегмента относительно текущего
значения указателя команд
( (IP) = (IP) + смещение). Переход осуществляется, если
проверяемое условие выполняется, иначе выполняется следующая команда. На языке
ассемблера в команде условного перехода указывается метка или адрес перехода. Смещение
вычисляется ассемблером при трансляции, смещение= адрес перехода – IP (IP – адрес команды,
следующей за командой перехода).
Мнемоника
JE/JZ
JNE/JNZ
JS
JNS
JO
JNO
JP/JFE
JNP/JFO
КОП
16-рич.
74
75
78
79
70
71
7A
7B
ZF
ZF
GE
SF
GF
GF
PF
PF
=
=
=
=
=
=
=
=
Условие
Перехода
1
0
1
0
1
0
1
0
JB/JNAE/JC
72
CF = 1
JNB/JAE/JNC
73
CF = 0
JBE/JNA
76
(CF) OR (ZF) = 1
JNBE/JA
77
(CF) OR (ZF) = 0
JL/JNGE
JNL/JGE
7C
7D
JLE/JNG
7E
JNLE/JG
7F
(SF) XOR (OF) = 1
(SF) XOR (OF) = 0
((SF) XOR (OF))
OR (ZF) = 1
((SF) XOR (OF))
OR (ZF) = 0
11101000
11101011
Смещение мл. б.
Смысловое значение
Если нуль или равно
Если не нуль или не равно
Если минус
Если плюс
Если переполнение
Если нет переполнения
Если четный паритет
Если нечетный паритет
Если перенос (не более
или равно)
Если нет переноса
Если меньше или равно с
учетом знака
Если
больше
с
учетом
знака
Если меньше
Если не меньше
Если меньше или равно
Если больше
смещение ст. б.
смещение
Команда безусловного перехода
JMP – внутрисегментная команда с прямой адресацией относительно IP. В мнемонике в
команде записывается метка или адрес перехода. При переходе к машинным командам
смещение вычисляется аналогично командам условного перехода.
Смещение записывается в дополнительном коде и может иметь 8 или 16 разрядов. Если
смещение 8-разрядное, то переход называют коротким.
JMP
адрес перехода (метка) - в пределах сегмента.
JMP src
11111111
Mod 100 r/m
- Внутрисегментный с косвенной адресацией – адрес перехода в регистре или памяти
11101010
cмещ. мл. б.
Смещ. ст. б.
сегм. мл. б.
сегм. ст. б.
- Межсегментный с прямой адресацией – в команде указываются полный адрес перехода,
включая значение сегментного регистра CS. В первом слове операнда находится новое
содержимое IP, во втором находится CS.
JMP (CS):смещение
[FAR PTR МЕТКА]
JMP src
11111111
Mod 100 r/m
JMP 200:300
EA 0003 0002
- Межсегментный с косвенной адресацией
11101000
Смещение мл. б.
Cмещение ст. б.
Полный адрес перехода занимает в памяти двойное слово. Слово, указанное постбайтом,
является смещением, а следующее – новым значением CS.
(IP) = (EA) ; (CS) = (EA + 2)
Вызов подпрограммы
Структура и формат команды аналогичны командам безусловной передачи управления.
Внутрисегментный переход с прямой адресацией
CALL метка (адрес)
(IP) = (IP) + смещение
CALL src
11101010
11111111
mod 100 r/m
Cмещ. мл. б.
смещ. ст. б.
сегм. мл. б.
сегм. ст. б.
сегм. мл. б.
сегм. ст. б.
- Внутрисегментный с косвенной адресацией
11101010
Cмещ. мл. б.
смещ. ст. б.
- Межсегментный с прямой адресацией
CALL (CS):смещение
[FAR PTR МЕТКА]
Команда вызова подпрограммы CALL производит те же действия, что и команда JMP
за исключением того, что перед выполнением команды адрес возврата помещается в стек. Если
переход внутрисегментный, то в стек помещается лишь содержимое указателя команд IP. Если
переход межсегментный, то в стек загружается сначала содержимое CS, затем IP.
Возврат из подпрограммы RET
При выполнении команды возврата из стека извлекается адрес возврата. Так как адрес
возврата может иметь одно или два слова, для команды RET используют два кода.
- Внутрисегментный возврат
RET
11000011
- Межсегментный возврат
RET FAR
11001011
Возврат из подпрограммы с увеличением указателя стека (SP) = (SP) + data
- Внутрисегментный
RET data
11000010
данные мл. б.
данные ст. б.
данные мл. б.
данные ст. б.
- Межсегментный
RET data
11001010
Команды организации циклов
Команды организации циклов обеспечивают уменьшение содержимого регистра CX и
условный переход по результату. Команды организации циклов являются командами условного
перехода, имеют такой же синтаксис и аналогично выполняются.
КОП
Смещение
КОП
16-рич.
E2
Условие
Ветвления
(CX) <> 0
LOOPE / LOOPZ
E1
LOOPNE / LOOPNZ
E0
JCXZ
E3
(CX) <> 0
ZF = 1
(CX) <> 0
ZF = 0
(CX) = 0
Мнемоника
LOOP
Описание действия
Декремент CX и переход, если
(CX) не равно 0.
Декремент CX и переход, если
"равно" или "нуль".
Декремент CX и переход, если
"не равно" или "не нуль".
Переход, если (CX) равно 0.
Команды прерывания
Команды прерывания обеспечивают действие, аналогичное сигналам прерывания, т.е.
переключение с одной программы на другую. Адрес перехода содержится в таблице векторов в
памяти ЭВМ.
Команда INT имеет три формата
INT
11001100
INTO
11001110
INT mun
11001101
Mun
Тип прерывания задает адрес вектора в таблице векторов.
Адрес=mun*4
INT – специальное прерывание по контрольной точке, соответствует INT#
INTO – специальное прерывание по переполнению, соответствует INT4
При возникновении прерывания или выполнении команды прерывания в МП
реализуется последоваельность прерывания, обеспечивающая запись в стек текущего значения
регистров F, CS, IP.
В IP и CS помещается новое значение из двойного слова таблицы векторов, адрес
которого определяется типом прерывания. Флажки регистра флагов IF и TF сбрасываются.
Новое значение IP и CS определяет начальный адрес процедуры прерывания. Возврат в
прерванную программу осуществляется специальной командой:
IRET
11001110
По этой команде извлекаются из стека три слова и загружается последовательно в регистры IP,
CS и F. Тем самым восстанавливается состояние, имевшее место при прерывании.
Команды строчной обработки
Команды строчной обработки или цепочечные команды имеют длину один байт и
могут оперировать как со словом, так и с байтом. Вне префикса повторения REP они оперируют
только одним словом или байтом. Такие одиночные цепочечные команды называются
примитивами. Независимо от формата примитива операнды определяются содержимым
регистров SI, DI, DS, ES. Кроме выполнения указанной операции примитив автоматически
вызывает инкремент или декремент регистров SI и (или) DI. Такое автоиндексирование
позволяет повторяющееся использование примитива для последовательной обработки смежных
байт или слов. Направление изменения индекса определяется флажком DF, если DF=0, то
автоинкремент. Иначе – автодекремент.
Использование цепочечных команд по сравнению с обычными дает следующие преимущества:
- Длина команды – 1 байт
- Оба операнда в памяти
- Автоиндексирование делает ненужным явные команды изменения индексов, что
увеличивает производительность.
Циклы с примитивами могут быть организованы обычным образом, с помощью команд
ветвления или LOOP, а также с помощью префикса повторения REP.
Машинный код префикса REP
1111001Z
Префикс REP обеспечивает автоматическое изменение регистра CX, проверку на конец
и повторение указанного примитива.
С префиксом REP=F3 примитивы MOVS, LODS, STOS (не изменяющие флажков в
регистре F) повторяются в соответствии со следующими правилами:
1) Если CX = 0 закончить операцию
2) Декремент CX на 1
3) Выполнить примитив
4) Повторить сначала
При работе с примитивами, изменяющими флажки регистра F (CMPS и SCAS) повторение
будет идти со следующими правилами:
1) Если CX = 0 или Z = ZF закончить операцию (Z – нулевой бит кода операции REP)
2) Декремент CX на 1
3) Выполнить примитив
4) Повторить сначала
- Пересылка байта/слова
MOVS / MOVSB / MOVSW
dst src
1010010 w
dst src
1010011 w
- Сравнить байты/слова
CMPS / CMPSB / CMPSW
(src) – (dst) и установка признаков
- Сравнить байты/слова с содержимым аккумулятора
SCAS / SCASB / SCASW
dst src
1010111 w
(src) – (dst) и установка признаков
- Загрузка байта/слова в аккумулятор
LODS / LODSB / LODSW
src
1010110 w
- Запись содержимого аккумулятора в память
STOS / STOSB / STOSW
dst
1010101 w
Команды манипуляции со флажками
Таблица 5.
Мнемоника
CLC
CMC
STC
CLD
STD
CLI
STI
КОП
16-рич.
F8
F5
F9
FC
FD
FA
FB
Название и действие
Сброс признака переноса (CF = 0)
Инвертирование признака переноса (CF = CF)
Установка признака переноса (CF = 1)
Сброс признака направления (DF = 0)
Установка признака направления (DF = 1)
Запрет прерывания (IF = 0)
Разрешение прерывания (IF = 1)
Команды управления микропроцессором
- Останов
HLT
F4
11110100
- Ожидание сигнала на вход TEST микропроцессора
WAIT
9B
10011011
90
10010000
- Нет операции
NOP
- Префикс захвата магистрали
LOCK
11110000
- Выборка кода операции ORC и операнда srce для внешнего процессора (сопроцессор
1810ВМ87).
ESC ops, srce
11001101
mun
Доцент кафедры Вычислительная техника
Кочешков А.А.
Related documents
Download