- •Введение
- •Программная модель микропроцессора Intel8086
- •Структура и формат команд
- •Примеры некоторых форматов команд
- •Базовый - индексный способ адресации
- •Относительный базовый – индексный способ адресации
- •Система команд мп Intel8086 Команды перемещения данных
- •Загрузка в стек (с декрементом sp )
- •Команда безусловного перехода
- •Вызов подпрограммы
- •Возврат из подпрограммы ret
- •Команды организации циклов
- •Команды прерывания
- •Команды строчной обработки
- •Команды манипуляции со флажками
- •Команды управления микропроцессором
Введение
Микропроцессор 8086 фирмы INTEL(у нас К1810ВМ86) по воле коньюктуры рынка стал основой персональных ЭВМ фирмыIBMи большого числа программно – совместимых компьютеров других фирм, известных у нас под названием «IBMPC» или «IBMPCсовместимый компьютер». 8086 явился основополагающим в серии процессоровx86 фирмыINTEL, все модели которой от 80286 доPentiumимеют кроме защищенного режима работы режим совместимости с процессором 8086 – реальный режим.
Изучение микропроцессора 8086 требуется для понимания функционирования микропроцессоров фирмы INTELи им подобных.
Программная модель микропроцессора Intel8086
Микропроцессор Intel8086 (МП) является однокристальным 16-разрядным процессором с фиксированной системой команд. Система команд содержит безадресные, одноадресные и двухадресные команды, обеспечивающие эффективную запись программы и обработку различных типов данных. МП позволяет вести обработку битов, двоично-десятичных упакованных и распакованных чисел, байтов, двухбайтовых слов и строк до 216байт длиной. Числа представляются в дополнительном коде с фиксированной запятой, знаковый разряд – старший.
МП имеет 20-разрядныю адресную шину, которая обеспечивает обращение к 1 Мб памяти. Однако в МП принята сегментная адресация памяти. МП оперирует 16- разрядными смещениями в сегменте. Адреса сегментов хранятся в специальных регистрах, получивших название сегментных. Смещение в сегменте (в некоторой литературе – эффективный адрес (ЕА)) указывается в командах, либо вычисляется в соответствии с принятым способом адресации.
Физический адрес памяти всегда формируется как сумма адреса сегмента и смещения в сегменте, т.е. в этом МП жестко заложен механизм относительной адресации независимо от цели обращения к памяти и способа адресации операнда, который влияет лишь на способ определения смещения (эффективного адреса).
Память в ВМ86 логически организована в виде последовательности смежных байтов, однако физическая память организована в виде последовательности 16-разрядных слов, организованных в два банка по 512 Кбайт
банк нечетных байтов – старший банк (D15-D8)
банк четных байтов – младший банк (D7-D0)
Адрес байта |
Старший банк |
Младший банк |
Адрес байта | ||
00001 |
15 |
8 |
7 |
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 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CF |
DF |
IF |
TF |
SF |
ZF |
|
AF |
|
PF |
|
CF |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Содержимое отдельных разрядов называется флагом или флажком условий или управления.
Флаги состояния:
SF – знак результата, установлен, если результат<0.
ZF – нуль результата, устаговлен, если результат =0.
FF – паритет, установлен если младший байт результата содержит четное число единиц.
CF – перенос, устанавливается если результат выходит за разрядную сетку.
AF–вспомогательный перенос, признак десятичной коррекции при обработке двоично-десятичных чисел
OF – переполнение, устанавливается при переполнении числовых разрядов разрядной сетки
Флаги управления:
DF –направление. Применяется в командах обработки строк. Если этот флажок сброшен, цепочка обрабатывается с первого элемента, имеющего наименьший адрес. В противном случае цепочка обрабатывается от наибольшего адреса к наименьшему.
IF – разрешение прерываний. Если флажок сброшен, то прерывания запрешены, установлен- разрешены.
TF – трассировка. Если этот разряд установлен, то после выполнения каждой команды генерируется внутреннее прерывание.
Разряды регистра флагов программно доступны как для чтения, так и для записи.