Intel 8088

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 17:25, 9 августа 2015.
Файл:I8088.jpg
Рис. 1 Intel 8088.

i8088 - требовал 8-ми битную шину данных.

  • Анонс 1 июня 1979 года
  • В отличии от 8086: 8-ми битовая шина данных + дешевле в изготовлении.
  • Тактовая частота (МГц):
5 (модель 8088),
8 (модель 8088-2),
10 (модель 8088-1)
  • Разрядность регистров: 16 бит
  • Разрядность шины данных: 8 бит
  • Разрядность шины адреса: 20 бит
  • Объём адресуемой памяти: 1 Мбайт
  • Количество транзисторов: 29 000
  • Техпроцесс (нм): 3000 (3 мкм)
  • Площадь кристалла (кв. мм): ~30
  • Напряжение питания: +5 В
  • Разъём: нет (микросхема припаивалась к плате)
  • Корпус: 40-контактный пластиковый DIP
  • Поддерживаемые технологии: 98 инструкций

Центральный процессор I8088

Несмотря на высокую производительность 16-битного микропроцессора 8086, он долгое время оставался малопопулярным из-за малого количества и дороговизны выпускаемых 16-битных микросхем поддержки. Поэтому 1 июня 1979 г. фирма Intel выпустила микропроцессор 8088, который представляет собой 8-битный микропроцессор, полностью совместимый с микропроцессором 8086 (т.е. имеющий такую же систему команд и набор регистров) и предназначенный для перевода аппаратных конфигураций на базе микропроцессоров 8080/8085 на программную среду микропроцессора 8086 с целью повышения производительности этих 8-битных систем. Новый микропроцессор, как и процессор 8086, содержал около 29000 транзисторов; две различные его модели работали на тактовых частотах 5 и 8 Мгц с производительностью 330 и 750 тыс. операций в секунду соответственно.

В микропроцессоре 8088 сохранены сегментные регистры, 20-битная адресация памяти и средства поддержки мультипроцессорных систем; сохранена также возможность обработки 16-битных операндов. Этот микропроцессор имеет 8 линий данных, как и микропроцессоры 8080/8085, но его архитектура аналогична архитектуре ЦП 8086. Разводка контактов корпуса микропроцессора 8088 такая же, как и у микропроцессора 8086, но старшие линии адреса не используются для передачи данных, а также есть незначительные различия в использовании линий управления. Поскольку, однако, линии управления микропроцессоров 8088 и 8080/8085 различаются, при введении микропроцессора 8088 в систему на базе микропроцессоров 8080/8085 требуется значительно изменить логику управления шиной. При этом в микропроцессоре 8088, как и в микропроцессоре 8085, адреса и данные мультиплексируются, поэтому в подсистемах памяти и ввода-вывода потребуются сравнительно небольшие изменения, если не увеличивать ёмкость памяти от 64 Кбайт, адресуемых микропроцессором 8085, до ёмкостей, использующих 20 линий адреса ЦП 8088.

В отличие от 6-байтной очереди команд микропроцессора 8086 в микропроцессоре 8088 длина очереди команд составляет 4 байта. Причина такого уменьшения длины очереди заключается в том, что микропроцессор 8088 может считывать данные из памяти только побайтно и следующее отсюда увеличение времени выборки следующей команды не позволяет процессору полностью использовать 6-байтную очередь. Алгоритм опережающей выборки отличается тем, что микропроцессор 8088 инициирует выборку команды, когда в очереди оказывается один свободный байт, а не два, как в микропроцессоре 8086.

На основе микропроцессора 8088 в августе 1981 г. фирмой IBM, ранее занимавшейся исключительно разработкой и продажей больших машин, был построен персональный компьютер IBM PC. Позже, весной 1983 г., появился следующий персональный компьютер фирмы IBM – IBM XT,48 аналогичный IBM PC, но со встроенным жёстким диском. По итогам продаж этих персональных компьютеров фирма IBM попала в 500 крупнейших американских фирм – быстрее, чем какая-либо другая компания – и победила в номинации «Триумф бизнеса семидесятых». Для своих персональных компьютеров фирма IBM заказала операционную систему у фирмы Microsoft, разработавшей программное обеспечение для персонального компьютера Altair-8800 ещё в 1975 г. Фирма Microsoft, в свою очередь, купила у фирмы Seattle Computer Products права на ОС 86-DOS, разработанную на основе ОС CP/M, и переименовала её в MS-DOS.49 Новая операционная система получила огромную популярность и стала фактическим стандартом для разработчиков программного обеспечения, не утратившим своё значение до сих пор. Только за интервал с 1981 по 1987 г.г. (версии MS-DOS 1.0 – 4.0) было продано 9 млн её копий.

Фирма IBM также разработала собственную операционную систему – PC-DOS, применённую в более поздних персональных компьютерах фирмы IBM. ОС PC-DOS полностью совместима с MS-DOS, так как фактически является лишь её незначительно модифицированным вариантом. Начиная с версии 3.0, операционные системы MS-DOS и PC-DOS развивались независимо, при этом не теряя взаимной совместимости. Однако версии PC-DOS 5.0 и старше не пользовались большим спросам, и поэтому фирма IBM прекратила дальнейшее совершенствование этой ОС.

Для модернизации систем на базе микропроцессоров 8086/8088 фирмой NEC выпускались микросхемы V20/30, позволяющие увеличить производительность системы на 5% простой заменой процессора фирмы Intel на новый: процессора 8086 – на процессор V30, процессора 8088 – на процессор V20. При этом не требовалось никакой дополнительной настройки системы.

Микропроцессор 8086/8088

Микропроцессор (МП) 8086/8088 выпущен в 1978 году и был первым МП с 16-разрядными данными.

МП 8086/8088 имеет длину слова 16 бит, адресное пространство памяти 1 Мбайт, 16-разрядную шину данных (8-разрядную для МП 8088), 20-разрядную шину адреса, сегментную организацию памяти. Функционально микросхема разделена на два независимых блока. дин из них называется блоком сопряжения с магистралью (рис.1) (Bus interface unit BIU), другой блок называется исполнительным (Execution unit EU). Блок сопряжения с магистралью выполняет две функции:

  • выборка команд из памяти;
  • пересылка данных между исполнительной аппаратурой и внешним миром.
Рис.1. Архитектура МП 8086/8088

В исполнительном блоке происходит выполнение команды. BIU содержит указатель команд (IP), в котором хранится адрес очередной выбираемой команды, байтовая очередь потока команд и регистры сегментов.

Регистры сегментов МП 8086/8088 содержат 16 разрядов и носят название CS (code segment – сегмент программы), DS (date segment сегмент данных), SS (stack segment – сегмент стека) и ES (extra segment – дополнительный сегмент).

Блоки BIU и EU работают независимо. Блок BIU осуществляет выборку команд и пересылку данных, а EU выполняет выбранные команды. Такое разделение функций стало возможным за счет использования конвейера (очереди) команд. Блок сопряжения с магистралью заполняет конвейер командами, ожидающими выполнения. В то время как исполнительный блок заканчивает выполнение текущей команды, следующая команда уже подготовлена для выполнения. В случае перехода конвейер сбрасывается. Конвейер BIU в МП 8086 хранит до 6 байт, а 8088- до 4 байт потока команд.

Исполнительный блок не имеет связи с системной магистралью. ЕU получает команда из очереди. Если команда требует обращения к памяти или внешней магистрали, EU посылает запрос ВIU на выборку или запись данных. Адреса, с которыми оперирует EU имеет 16 разрядов, но BIU выполняет преобразование адресов так, чтобы EU мог обратиться ко всему возможному адресному пространству (1Мбайт) памяти.

Исполнительный блок состоит из 16-разрядного арифметико-логического устройства (АЛУ), регистров, операндов и флагов, а также набора регистров общего назначения АН, АL, ВН, BL, СН, CL, DН, DL. Регистры АН и AL объединяются в регистр-аккумулятор АХ; ВН и BL образуют регистр базы ВХ; СН и CL образуют регистр-счетчик СХ. DН и DL образуют регистр данных DX.

К регистрам общего назначения можно адресоваться как к 8- или 16-разрядным. Это позволяет программам для 8-разрядного МП 8080 выполняться на МП 8086/8088 после повторной трансляции. МП 8086/8088 может адресовать до 1 Мбайта памяти (1048576 байт). Каждому адресу назначен уникальный адрес (беззнаковое число от 0 до 2020- 1 (от 00 000 до FFFFF в шестнадцатеричной системе счисления). Два соседних байта в памяти образуют слово. За адрес слова принимается меньший из двух адресов байтов, слово состоит из 16 бит. Младшие биты слова содержатся в адресе байта с меньшим адресом, а старшие биты слова - в байте со старшим адресом.

В МП-8086 обмен данными между процессором и памятью осуществляется словами, начинающимися с адресов, кратных двум.

Кроме байт и слов МП 8086/8088 оперирует следующими дополнительными типами данных:

1. Неупакованный двоично-десятичный тип - байтовое представление .десятичной цифры от 0 до 9.

В каждом байте хранится по одной цифре. Значение цифры определяется младшим полубайтом. Старший полубайт равен 0 при делении и умножении и принимает любое значение при вычитании и сложении.

2. Ближний указатель - 16-разрядный логический адрес, который представляет собой относительный адрес внутри сегмента.

3. Дальний указатель-- 32-разрядный логический адрес из двух компонентов 16-разрядного сегмента и 16-разрядного относительного адреса.

4. Целый тип - знаковое двоичное значение, содержащееся в 16-разрядном слове или 8-разрядном байте. Все операции выполняются в дополнительном коде. Бит знака расположен в бите 7 байта и в бите 15 слова. Знаковый бит равен 0 для положительного слова и в равен 1 - для отрицательного. Для 8-разрядных целых чисел диапазон изменения от -128 до +127,. а 16-разрядных в диапазоне от -32768 до +32767. Нулевое значение имеет положительный знак.

5. Обычный (беззнаковый) тип -беззнаковое двоичное значение содержащееся в 16-разрядном слове или 8-разрядном байте. Все биты определяют величину числа. Значение для байта составляет от 0 до 255, для слова - от 0 до 65535.

6. Строка - непрерывная последовательность байт или слов. Строка может содержать от 0 до 216 - 1 байт или 64 Кбайта.

Память МП 8086/8088 состоит из произвольного числа сегментов, каждый из которых содержит. 64К последовательных байта. С помощью сегмента производится адресация памяти при преобразований 16- или 32-разрядного логического адреса в 20-разрядный физический адрес.

Любой сегмент памяти начинается с адреса, кратного 16. Для доступа к требуемому сегменту используются сегментные регистры. МП 8086/8088 в каждый конкретный момент может непосредственно адресовать содержимое четырех сегментов: сегмента программы, сегмента данных, сегмента стека и дополнительного сегмента данных, которые могут перекрывать друг друга.

Для адресации байта или слова в сегменте 16-разрядный относительный адрес, часто называемый исполнительным (эффективным) адресом (ЕА), используется вместе с содержимым регистра сегмента. Программист указывает в программе название сегментного регистра, и обозначение этого регистра включается в саму команду.

Физический адрес МП 8086/8088 образуется из относительного адреса и содержимого указанного регистра сегмента. Для этого адрес сегмента сдвигается влево на четыре разряда, а в четыре младших разряда записываются нули.(рис.2).

Рис. 2. Формирование адресов байта или слова

К полученному таким образом 20-разрядному числу прибавляется относительный адрес, в результате чего формируется действительный физический адрес. При сложении содержимого сегментного регистра со смещением переполнение игнорируется. В результате сложения получается физический 20-битный адрес байта или- слова.

На рис.3.3 представлено распределение памяти при инициализации. Шестнадцать старших байт памяти (начиная с FFFFOH) отводятся под команды начальной загрузки, которые используются процессором, в момент включения питания. Первые 1024 байта отведены под адреса программ обработки прерываний. В МП 8080 (аналог КР 580) используются первые 64 байта под адреса программ обработки прерываний. Под процессом инициализации МП 8086/8088 понимается состояние процессора после включения питания или сигнала "сброс". Адрес первой выполняемой команды после включения питания или сигнала "Сброс" определяется начальным значением регистров МП 8086/8088 (см.рис.3).

Рис.3. Адресное пространство МП 8086/8080 при инициализации

В качестве внешних регистров в МП 8086/8088 используются ячейки памяти объемом в 1 Мбайт и 216 (64 Кбайта, 65535) 8-битовых портов.

Каждому порту, который предназначен для взаимодействия с внешним миром, присвоен уникальный адрес из диапазона от 0 до 216- 1.

На рис.4 представлены регистры МП 8086/8088. Микропроцессор имеет 13 16-битных регистров и 9 1-битных флагов. Биты флагов объединены в 1 регистр, называемый регистром флагов (регистр состояния). Условно регистры можно разделить на четыре группы. v

К первой группе относятся четыре регистра общего назначения (РОН). Ко второй группе относятся четыре указательных и индексных регистра. К третьей относятся четыре сегментных регистра. К четвертой группе относятся не доступные для программиста указатель команды и регистр флагов. В МП 8080 (КР 580) программный счетчик (PC) соответствует указателю команды МП 8086/8088.

Регистры общего назначения используются в арифметических и логических операциях для хранения промежуточных результатов. РОН можно использовать либо отдельно как два 8-битных регистра, либо совместно (как один 16-битный регистр). Каждой половинке РОН даны свои названия: младшие (LOW) AL, BL, CL и DL и старшие (High), которым в свою очередь даны названия АН, ВН, СH и DH.

В некоторых командах функции РОНов специализированы. Регистр АХ . - аккумулятор (accumulator) - используется при умножении и делении слов, в операциях ввода-вывода и в некоторых операциях над строками.

Регистр AL используется в аналогичных операциях над байтами, при преобразовании десятичных чисел и при выполнении над ними арифметических операций. Регистр ВХ - базовый регистр (base register) -необходим при адресации данных в памяти.

Регистр СХ - счетчик (count register) применяется для подсчета числа повторений цикла и в качестве номера позиции элемента данных при операциях над строками.

Рис.4. Регистры и флаги МП 8086/8088

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

Регистр DX - регистр данных (data register) применяется при умножении и делении слов. Кроме того, в операциях ввода-вывода он используется как номер порта.

Ко второй группе регистров МП 8086/8088 относятся указательные и индексные регистры (см.рис.4) К ним относятся 16-битные регистры SP, BP, SI, DI, которые обычно содержат внутрисегментные смещения. Содержимое этих сегментов может участвовать в арифметических и логических операциях на ряду с 16-битными регистрами. Указательные регистры SP и DP используются для записи адресного смещения по отношению к стековому сегменту, а индексные реестры SI и DI - для адресного смещения по отношению к сегменту данных.. Есть некоторая специфика использования указательных регистров SP и ВР в командах PUSH и POP. Так, смещение верхнего элемента стека берется из регистра SP (указателя стека). Использовать для этой цели указатель базы ВР нельзя. Функции регистров SI и DI в строковых командах изменить нельзя, SI - это регистр индекса источника, а DI - регистр индекса приемника.

К третьей группе регистров МП 8086/8088 относятся сегментные регистры (см.рис.4). Они используются для задания текущих сегментов и обозначаются СS, DS, SS и ES. Каждый регистр обозначает конкретный текущий сегмент и функции их совершенно различны. ,

Регистр сегмента программы (CS) указывает на сегмент, который содержит текущую последовательность используемых команд. Процессор выбирает все команды из этого сегмента, используя содержимое указателя команд IP как относительный адрес. Содержимое регистра CS может быть изменено в результате выполнения команд переходов, прерывания и исключений, он не может быть загружен явным способом.

Регистр сегмента стека (SS) предназначен для вызова подпрограммы, передачи параметров и активизации процедур, которые обычно требуют области памяти, резервируемые под стек.

В отличие от CS регистр SS загружается явно с использованием команды программы.

Регистр сегмента данных (DS) и регистр дополнительного сегмента (ES) используются для адресации данных текущей исполняемой программой. Содержимое этих регистров загружается явным способом.

Сегмент, из которого извлекается операнд, может быть указан в форме команды специальным однобайтным префиксом. Он указывает, из какого текущего сегмента считывается операнд. При отсутствии префикса в формате команды операнд извлекается из текущего сегмента данных, но здесь возможны два случая:

1. Если в вычислении смещения участвует указательный регистр, то используется текущий сегмент стека.

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

К четвертому набору регистров МП 8086/8088 относятся регистр указателя команды и регистр флагов.

Указатель команды (instruction pointer, IP) - 16-битовый регистр. Он содержит смещение следующей выполняемой команды в текущем сегменте кода CS, указатель команды непосредственно не доступен программисту, но он может явно управляться командами управления переходов, прерываниями и исключениями.

Указатель флагов - 16-разрядный регистр FLAGS - содержит 9 флагов, которые применяются для регистрации состояния (6 флагов состояния) и управления действиями микропроцессора (3 флага управления) (рис.5):

1. Бит 0, флаг переноса CF (Carry flag) равен 1, если произошел перенос единицы при сложении или заем единицы при вычитании, в противном случае он сбрасывается. Кроме того, СF содержит значение бита, который при сдвиге или циклическом сдвиге регистра или ячейки памяти вышел за их границы. CF служит также индикатором результата умножения.

2. Бит 2, флаг четности PF (parity flag) paвен 1, если в результате операции получен байт в регистре АL с четным числом единиц в его битах. В противном случае он равен 0. Флаг PF в основном используется в операциях обмена.

Рис.5. Регистр флагов МП 8086/8088

3. Бит 4. вспомогательный флаг переноса AF (auxiliary Carry flag) аналогичен флагу CF , только фиксирует перенос или заем для третьего бита данных.

4. Бит 6, .флаг нуля- ZF (zero flag) равен 1, если в результате операции получен нуль, ненулевой результата приводит к сбросу ZF.

5. Бит 7, флаг знака SF (sign flag), имеет значение только при операциях над числами со знаком. Флаг SF равен 1, если в результате арифметической или логической опeрации, сдвига или циклического сдвига получено отрицательное число. В противном случае он равен 0. Он дублирует старший (знаковый) разряд результата независимо от того, имеет результат длину 8 или 16 бит.

6. Бит 8, флаг трассировки TF (trap flag), разрешает микропроцессору исполнять программу, по шагам и используется при отладке программы.

7. Бит 9; флаг прерывания IF (interrupt enable flag), разрешает МП реагировать на прерывания от внешних устройств. Если IF в 0, то МП будет игнорировать прерывания.

8. Бит 10, флаг направления DF (direction flag), заставляет МП уменьшать на единицу (DF = 1) или увеличивать на единицу (DF= 0) регистры индекса после выполнения строковой команды.

9. Бит 11, флаг переполнения OF (overflow flag) служит индикатором ошибок при выполнении операции над числами со знаком. Флаг OF равен 1, если результат сложения двух чисел с одинаковыми знаками или результат двух чисел с противоположными знаками выйдет за пределы доступного диапазона значений операндов. В противном случае он равен 0. При арифметическом сдвиге OF=1, тогда старший (знаковый) бит изменяется совместно с CF. Флаг указывает длину результата умножения. Для установки и сброса флагов используются специальные команды МП.

В МП 8086/8088 программа может быть прервана по трем причинам:

  • периферийное устройство посылает сигнал прерывания в МП;
  • команда процессора вызывает исключение (особый случай);
  • программа выполняет команду INT прерывания.

Каждой перечисленной причине прерывания назначен номер от 0 до 255.

Адресация ввода-вывода

Для обращения к устройствам ввода-вывода процессор имеет отдельные команды IN и OUT, результатом выполнения которых является формирование шинных сигналов IORD# (Input/Output Read) и IOWR# (Input/Output Write) для чтения или записи одного или двух байт. Данные при чтении могут помещаться только в регистр AL или АХ и выводятся из этих же регистров. В циклах ввода-вывода используется только 16 младших бит шины адреса (старшие биты при этом нулевые), что позволяет адресовать до 64 Кб регистров ввода-вывода. Адрес устройства задается либо в команде (только младший байт, старший — нулевой), либо берется из регистра DX (полный 16-битный адрес).

Инициализация, прерывания, останов и синхронизация процессоров

По сигналу RESET процессор завершает текущий шинный цикл, а по снятии сигнала он в течение примерно семи циклов синхронизации начинает выполнение инструкции, считываемой из памяти по адресу FFFFOh (сигнал RESET устанавливает сегментные регистры и указатель команд в состояние CS=FFFFh, IP=0, DS=SS=ES=0 и сбрасывает все флаги). Во время действия сигнала RESET все тристабильные буферные схемы переходят в высокоимпедансное (выключенное) состояние.

Прерывания (изменения текущей последовательности команд) по происхождению делятся на программные, внутренние прерывания процессора и аппаратные (вызываемые электрическими сигналами на соответствующих входах процессора). Процессор может выполнять 256 типов (номеров) прерываний, каждому из которых соответствует свой вектор прерывания — двойное слово, содержащее дальний адрес (CS:IP) вызываемой подпрограммы (процедуры). Под векторы (указатели) прерываний в общем пространстве адресов памяти зарезервирована область 0-3FFh.

Программные прерывания, вызываемые исполнением команды INT хх, по действиям процессора аналогичны дальним вызовам подпрограмм (сохранение в стеке адреса возврата — регистров CS и IP — и передача управления по указанному адресу), но имеют некоторые отличия:

  • в начале выполнения прерывания процессор помещает в стек регистр флагов и сбрасывает бит разрешения прерывания IF (Interrupt Flag);
  • вместо адреса вызываемой подпрограммы аргументом вызова (хх) является номер вектора прерывания (0-255);
  • по окончании выполнения процедуры по команде IRET процессор извлекает из стека адрес возврата (инструкции, следующей за командой INT) и сохраненное значение регистра флагов.

Сброс бита прерывания не позволяет прервать выполнение процедуры прерывания до ее окончания или явного разрешения командой El (Enable Inter¬rupt). Само программное прерывание исполняется независимо от состояния флага IF. Программные прерывания позволяют легко и быстро вызывать обще¬употребительные процедуры (сервисы BIOS и DOS) из любого сегмента без применения дальних вызовов. Прерывание INT 3 традиционно используется в целях отладки программ для создания точки останова, в отличие от остальных программных прерываний оно вызывается однобайтной инструкцией (OCCh).

Внутренние прерывания возбуждаются процессором по особым условиям:

  • прерывание 0 вырабатывается в случае переполнения при операции деления на 0;
  • прерывание 1 вырабатывается после выполнения каждой команды при установленном флаге трассировки TF;
  • прерывание 4 вырабатывается по команде INTO (Interrupt Overflow), если установлен флаг переполнения OF.

Аппаратные прерывания, в отличие от программных и внутренних прерываний, могут возникать асинхронно по отношению к исполняемой программе. Они подразделяются на маскируемые и немаскируемые. Процессор может воспринимать прерывания после выполнения каждой команды, длинные строковые команды имеют для восприятия прерываний специальные окна.

Маскируемые прерывания вызываются переходом в высокий уровень сигнала на входе INTR (Interrupt Request) и выполняются при установленном флаге разрешения (IF=1). В этом случае процессор сохраняет в стеке регистр флагов, сбрасывает флаг IF и вырабатывает два следующих друг за другом (back to back) цикла подтверждения прерывания, в которых генерируются управляющие сигналы INTA# (Interrupt Acknowledge). Высокий уровень сигнала INTR должен сохраняться по крайней мере до подтверждения прерывания. Первый цикл подтверждения — холостой («наследие» процессора 8080), по второму импульсу внешний контроллер прерываний передает по шине данных байт, содержащий номер вектора, обслуживающего данный тип аппаратного прерывания. Прерывание с полученным номером вектора выполняется процессором так же, как и программное. Обработка текущего прерывания может быть, в свою очередь, прервана немаскируемым прерыванием, а если обработчик установит флаг IF, то и другим маскируемым аппаратным прерыванием. После аппаратного сброса флаг IF сброшен, и маскируемые прерывания невозможны до их явного разрешения.

Немаскируемые прерывания выполняются независимо от состояния флага IF по сигналу NMI (Non Mascable Interrupt). Высокий уровень на этом входе вызовет прерывание с типом (вектором) 2, которое выполняется так же, как и маскируемое. Его обработка не может прерываться под действием сигнала на входе NMI до выполнения команды IRET.

При вызове обработчика прерывания командой вызова процедуры следует помнить, что обработчик заканчивается командой IRET, а не RET FAR. Инструкция IRET, в отличие от RET FAR, после восстановления регистров CS и IP вытаскивает из стека и регистр флагов. Поэтому последовательность команд вызова обработчика в данном случае должна выглядеть так:

PUSHF эквивалент начала прерывания CALL FAR i_proc_ptr дальний вызов обработчика

Без команды PUSHF после выполнения процедуры указатель стека не вернется к исходному состоянию, что неприятно.

Команда HALT переводит процессор в состояние останова, из которого его может вывести только аппаратное прерывание или аппаратный сброс. В этом режиме процессор не управляет локальной шиной (все тристабильные буфера отключены).

Команда WAIT заставляет процессор ожидать активного (низкий уровень) сигнала на входе TEST#. До появления активного сигнала процессор также не управляет локальной шиной. В случае аппаратного прерывания по окончании его обслуживания процессор снова вернется в состояние ожидания. Проверка состояния входа TEST# используется для синхронизации с математическим сопроцессором 8087.

Интерфейс 8086/88 допускает наличие на своей локальной шине других контроллеров (например, прямого доступа к памяти — DMA), а также позволяет строить многопроцессорные системы. Управление шиной может передаваться от процессора другому контроллеру по соответствующему запросу. Для монополизации шины на время выполнения команды предусмотрена инструкция-префикс LOCK, которая запрещает процессору отдавать управление шиной до окончания выполнения данной команды. Таким образом можно обеспечивать целостность данных в тех случаях, когда к области данных, участвующих в команде, возможен доступ и со стороны другого процессора (контроллера), например при работе с программными семафорами в цикле чтение — модификация — запись.

Система команд

Набор команд 8086/88 включает следующие основные группы:

  • инструкции пересылки данных;
  • арифметические и логические инструкции;
  • инструкции со строками;
  • инструкции передачи управления;
  • инструкции управления процессором.

Каждая команда имеет один или два байта кода инструкции, за которыми может следовать 1, 2 или 4 байта операнда. Перед кодом инструкции возможно применение префиксов CS:, DS:, ES:, SS:, указывающих на использование заданных сегментных регистров вместо обычного, префикса REP, указывающего на необходимость повтора инструкции указанное в регистре СХ число раз, и префикса LOCK, блокирующего системную шину на время выполнения инструкции. С позиции сегодняшнего дня можно считать, что система команд 16- разрядного процессора 8086/88 является подмножеством команд 32-разрядных процессоров 80x86, которая подробно рассмотрена в п. 3.12. При ее рассмотрении следует помнить, что разрядность слова и адреса 8086 — 16 бит. Команды, недоступные для 8086, помечены номером процессора (286+, 386+...), начиная с которого они реализованы.

Назначение выводов процессоров 8086/88

Расположение выводов процессоров 8086 и 8088 совпадает, отличие заключается лишь в использовании линий AD[15:8], которые у процессора 8088 используются только для адреса и называются А[15:8]. Расположение выводов процессоров 8086 и 8088 приведено на рис. 6. В зависимости от уровня сигнала на входе MN/MX# процессоры могут работать в минимальном и максимальном режимах. В минимальном режиме процессор сам вырабатывает сигналы управления для внешней шины. Этот режим предназначен для построения небольших систем, не использующих сопроцессора, и позволяет непосредственно к процессору 8088 подключать периферийные микросхемы из семейства 8085. В PC применяется максимальный режим, при котором сигналы управления системной шиной IOR#, IOW#, MEMR#, MEMWR#, INTA# и ALE вырабатываются контроллером шины i8288 по сигналам состояния процессора (табл. 1 и 2).

Рис. 6. Расположение выводов процессоров 8086/88
Таблица 1 ( 1 часть) Назначение сигналов процессоров 8086/8088 в максимальном режиме
Таблица 1 ( 2 часть) Назначение сигналов процессоров 8086/8088 в максимальном режиме
Таблица 2. Декодирование состояния процессора 8086/8088

См. также

  1. "i8088" материал из Википедии — свободной энциклопедии.