Добавил:
kostikboritski@gmail.com Выполнение курсовых, РГР технических предметов Механического факультета. Так же чертежи по инженерной графике для МФ, УПП. Писать на почту. Дипломы по кафедре Вагоны Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

литература / Пухальский Проектирование микропроцессорных систем 2001

.pdf
Скачиваний:
334
Добавлен:
12.11.2017
Размер:
21.12 Mб
Скачать

340 Глава 4. Микропроцессоры 8086/8088 и сопроцессор 8087

RQ/GT\, но если на линии RQ/GTn появляется запрос в то время, когда МП обрабатывает пред­ шествующий запрос от RQ/GT\, то запрос RQ/GTt) не подтверждается до освобождения шины по линии RQ/GTi. Управление запросом и предоставлением шин производится последователь­ ностью из трех импульсов низкого уровня, длительность которого равна одному периоду так­ тового сигнала CLK (рис. 4.9). МП предоставляет управление шинами другому ведущему шины в конце текущего цикла шины, переводя свои шины в Z-состояние. Линии RQ/GTiA->не­ зависимы и подключены с помощью внутренних нагрузочных резисторов к напряжению пита­ ния для задания исходного высокого уровня (уровня логической 1);

LOCK — сигнал блокировки шины, используемый для запрета предоставления шин дру­ гим МП в мультипроцессорных системах. Значение LOCK = 0 устанавливается однобайтной командой LOCK, называемой префиксом блокировки шины, и поддерживается до завершения выполнения следующей за префиксом команды. Значение LOCK = 0 устанавливается автома­ тически во время и между импульсами INTA = 0 (до завершения чтения байта type из контрол­ лера прерываний 8259А). При подтверждении захвата шин сигнал LOCK переводится в Z-состояние. Если в состоянии блокировки поступает запрос шин по линиям RQ/GT{„ц, то МП фиксирует запрос, но не подтверждает его до завершения выполнения команды, следующей за префиксом LOCK. Префикс LOCK можно использовать и в минимальном режиме, в котором выход микропроцессора LOCK отсутствует — в этом случае префикс LOCK задерживает ге­ нерацию значения сигнала подтверждения захвата шин HLDA = 1 на запрос захвата HOLD = 1 до завершения выполнения команды, следующей за префиксом LOCK;

QSi-o (Queue Status) — состояние 6-байтной очереди команд (табл. 4.5), отражающее опе­ рации над очередью в предыдущем такте синхронизации. Сигналы QSlA) позволяют арифмети­ ческому сопроцессору 8087 производить отслеживание состояния очереди команд МП 8086 (синхронизировать свою очередь команд с очередью команд МП 8086).

Для подключения к МП контроллера прямого доступа к памяти 8237А (см. § 3.6) следует

синтезировать схему взаимного преобразования

однонаправленных сигналов HOLD/HLDA

в двунаправленный сигнал RQ/GT0 или RQ/GTi

(конвертор сигналов — Control Logic на

рис. 4.13). По запросу захвата шин HOLD = J , поступающему от контроллера прямого досту­ па к памяти 8237, необходимо сформировать первый импульс последовательности RQ/GT, а по снятию запроса HOLD = L— третий импульс этой последовательности (см. рис. 4.9). Конвер­ тор сигналов легко реализовать в виде цифрового автомата, задаваемого временными диаграм­ мами, изображенными на рис. 4.10 (необходимо использовать два синхронных триггера Qx и Q2, например, два 7-триггера со счетными входами Т, и Т2). В ответ на первый импульс после­ довательности RQ/GT = RQ микропроцессор выдаст второй импульс последовательности RQIGT = GT и конвертор должен сформировать значение сигнала подтверждения захвата шин HLDA = 1. При генерации третьего импульса последовательности RQ/GT = RQ (уведомление МП об освобождении шин) конвертор должен выдать значение сигнала HLDA = 0.

На основании временных диаграмм (рис. 4.10) легко составить таблицу истинности (табл. 4.6), диаграммы Вейча (рис, 4.11) и методом, изложенным в [5], найти, что работа кон­ вертора при использовании У-АТ-триггеров описывается функциями:

 

 

Таблица 4.5. Идентификация состояния очереди команд

QSt QS0

Операции с очередью команд

0

0

Операции не производились — в предыдущем такте байты из очереди не выбирались

0

1

Из очереди выбран первый байт (КОП) команды

1

0

Очередь сброшена (пустая) из-за команды передачи управления

1

1

Из очереди выбран байт, отличающийся от первого байта команды

 

 

 

4.1. Структурная схема МП 8086

 

 

341

CLK П

Г

 

 

r r ^ "

r

— Г

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HOLD

0

1

1

 

1

1

 

1

1

0

 

0

0

Qi

0

0 ,■1 1

 

1

I

 

1 0

 

0 . J

1 1 o

Qi

о

0

0 ,.1

1

1

 

I

-И-----

1

1

0

0

RQ/GT

l

1 1 X . 1 1

1 0 1 1

 

1

1 x J

 

 

 

 

 

 

 

 

 

 

 

 

 

1

9

RQ

 

1$

QT

 

U

 

3

 

RQ

1

 

12/13

 

14

 

 

 

4/5

^1

I

 

1

 

 

1

 

1

1

 

1

1

 

 

 

 

|------

1

 

 

 

 

1

 

I

 

 

 

 

 

 

 

 

 

 

 

 

 

HLDA

 

 

 

 

 

 

 

.1

 

 

I

 

 

 

 

 

12 —запрос пшны

14

—предоставление

 

 

4 - освобождение

 

 

 

 

данных

 

 

шикыданных

 

 

шиныданных

Рис. 4.10. Временные диаграммы преобразователя сигналов HOLD/HLDA <t=> RQ/GT

 

Таблица 4.6. Состояния преобразователя сигналов HOLD/HLDA <=> RQ/GT

HOLD

G.

Qi

RT

Q* Qi* HLDA OE

RT

Примечание

(вход)

(выход)

0

0

0

1

0

0

0

0

z

Исходное состояние автомата

1

0

0

1

1

0

0

0

Z

Запрос прямого доступа к памяти от DMAC

1

1 0

X

1 1

0

1

0

R T = R Q = 0

1

1

1

1

1

1

0

0

z

RT = GT = 1 — пассивное состояние сигнала

1

1

1

0

0

1

0

0

z

RT - GT = 0 — ответ МП на запрос RQ = 0

1

0

1

1

0

1

1

0

z

Выполнение DMA-пересылок пока HOLD = 1

0

0

1

1

1

0

1

0

z

Снятие запроса прямого доступа к памяти

0

1 0

X

0

0

0

1

0

RT = RQ - 0

0

0

0

1

0

0

0

0

z

Исходное состояние автомата

 

HOLD

 

 

Q\

Qi

Ф

0

ф

ф

S55TB6'

0

1

ф

1

RT

 

 

1

1

0

0

 

 

Ф1 0 ф

Qx

 

HOLD

 

 

Qi

Qi

ф

1

ф

ф

 

1

1

ф

0

RT

 

 

0

1

0

0

 

 

 

ф

1

0

ф

 

Рис. 4.11. Диаграммы Вейча

Рис. 4.12. Преобразователь сигналов HOLD/HLDA <=> RQ/GT

342 Глава 4. Микропроцессоры 8086/8088 и сопроцессор 8087

J \ - Q i ® HOLD, К i = HOLD v Q2 RT, J2 = Qi HOLD, K2 = HOLD,

HLDA = QiQ2, OE = RQ = Q\Q2,

где RT = RQIGT (вход RT = GT, выход RT = RQ или находится в Z-состоянии). Этим функциям соответствует схема цифрового автомата, изображенная на рис. 4.12. Исходное внутреннее со­ стояние автомата Q2Qi = 00 задается значением асинхронного потенциального сигнала сброса

RESET - 1.

В максимальном режиме работы микропроцессора контроллер шин 8288 интерпретирует информацию состояния S2-о Для генерации сигналов синхронизации и управления шинами, со­ вместимых с архитектурой MultiBus, разработанной фирмой Intel для проектирования муль­ типроцессорных систем. На рис. 4.13 изображена типовая структурная схема МП-системы для максимального режима. Сигналы ALE, DTIR и DEN (без инверсии), а также системные сигналы управления MRDC, MWTC, IORC, IOWC и INTA формируются контроллером шин 8288 по сиг­ налам состояния 52_опоступающим от МП. Детальное описание контроллера шин 8288 и на­ значение остальных сигналов управления дано в § 4.8.

Временные диаграммы основных сигналов в максимальном режиме работы МП 8086 изо­ бражены на рис. 4.14. Циклы чтения и записи выполняются за 4 такта, если не вводятся такты ожидания Tw по значениям сигнала готовности RDY = 0, поступающего от медленных памяти и внешних устройств {Wait State Generator — генератор состояний ожидания на рис. 4.13). Сиг­ налы MWTC и IOWC соответствуют сигналам MEMW и HOW, генерируемым системным кон­ троллером 8228, а сигналы AMWC и AIOWC — сигналам M EM W и I/OW, генерируемым сис­ темным контроллером 8238 для МП 8080 (см. рис. 1.31).

CLK

 

Control Bus

MRDC ------ Ш ЯОС

 

<^0

мятсЬ-----у м ш с

<fS\

IORC у-

-У IORC

S 2

IOWC'

-+IOWC

 

ШЛ'

-*M a

DSN

8288

 

DT/R

CSN

-Усс

ALB

IOB Г1

L

 

 

RG

 

>ОЕ

е Address Bus

 

 

D0 ------- УВНЕ

D

DO —— -^19-0

D

 

 

Data Bus

C = > 1 5 - 0

Рис. 4.13. Типовая структурная схема для максимального режима

4.1. Структурная схема МП 8086

343

 

8284

к

S

X

и

(-

В"

К

!=Г

я

И"

Рис. 4.14. Временные диаграммы для максимального режима работы МП 8086

Рис. 4.15. Сопроцессорная конфигурация МП-системы

Сопроцессорные конфигурации МП-систем. Хотя МП 8086/8088 являются мощными однокристальными процессорами, их системы команд недостаточно для эффективного реше­ ния сложных вычислительных задач, так как они не имеют команд арифметики с плавающей точкой. В этих случаях МП 8086/8088 необходимо дополнить сопроцессорами, которые рас­ ширяют систему команд для более эффективной реализации специальных вычислений. Для таких применений фирма Intel специально разработала арифметический сопроцессор 8087 (.NDCP Numeric Data Coprocessor, см. рис. 4.4), который снабжен мощной системой команд арифметики с плавающей точкой, позволяющей производить вычисления с высочайшей точно­ стью (диапазон представимых вещественных чисел равен ±10±4932).

Для включения в микропроцессорную систему NDCP не требуется дополнительной внеш­ ней логики (рис. 4.15 — остальные одноименные выводы МП 8086/8088 и NDCP 8087 должны быть соединены). Это достигнуто тем, что выборку всех команд из памяти производят только МП 8086/8088. Все команды NDCP (группа из восьми команд, обозначаемая общей мнемони­ кой ESC — Escape — переход, переключение на сопроцессор), характеризуются тем, что их

344 Глава 4. Микропроцессоры 8086/8088 и сопроцессор 8087

первый байт равен 1101 lxxx = D8h + DFft, а в системе команд МП такие команды отсутствуют. Если выбранная команда принадлежит NDCP, то МП 8086/8088 не предпринимают более ни­ каких действий кроме возможного считывания операнда для сопроцессора и передачи ему фи­ зического адреса этого операнда (см. § 4.6).

Предназначенная для NDCP команда определяется появлением в программе команды ESC. Хотя выбирать команды могут только (главные) МП, сопроцессор тоже получает все ко­ манды и контролирует выполнение команд МП, используя сигналы на линиях состояния оче­ реди Команда ESC содержит код внешней операции NDCP (три младших разряда перво­ го байта и второй байт), и одновременно дешифрируется сопроцессором и МП. В этой точке МП может просто перейти к выборке следующей команды или считать первое слово из памяти как операнд для NDCP, а затем перейти к выборке следующей команды. Если МП считывает первое слово операнда, NDCP перехватывает это слово данных и его 20-разрядный физический адрес. Когда операнд-источник длиннее одного слова, NDCP получает остальные слова по­ средством запросов циклов шины по линии RQ/GT0 <н> RQ/GT). Если же определенный в ко­ манде ESC операнд является получателем, NDCP игнорирует считанное микропроцессором слово данных, а позднее записывает результат вычислений по перехваченному адресу. В лю­ бом случае NDCP выдает значение сигнала занятости BUSY = 1 на вход TEST МП и пока МП продолжает выполнение программы NDCP производит вычисления, указанные в команде ESC. Такая параллельная работа продолжается до тех пор, пока микропроцессору не понадобится NDCP для выполнения другой операции или микропроцессору не потребуется получить ре­ зультат текущей операции из NDCP. Для этого МП должен выполнить команду WAIT и ожи­ дать, пока NDCP не выдаст значение сигнала занятости BUSY = 0 на вход TEST. Команда WAIT периодически проверяет значение сигнала TEST и, когда он становится активным, осуществля­ ет передачу управления находящейся за ней команде.

Чтобы NDCP мог определить, когда МП выполняет команду ESC, он должен контролиро­ вать состояние МП по линиям S2~о и выборку команды по линиям AD15_0. Так как МП выбирает команды с опережением, выборка команды ESC не означает ее немедленного выполнения, а при наличии перед ней команды перехода она может не выполняться совсем. Сопроцессор должен следить за командным потоком, контролируя биты состояния очереди Q5|_o и управляя своей очередью команд, идентичной очереди МП. Если состояние очереди QSiQSa = 00 (см. табл. 4.5), NDCP ничего не делает, а если QS\QSn = 01, он должен сравнить пять старших разрядов первого байта в очереди с кодом 11011 для обнаружения команды ESC. При обнару­ жении команды ESC сопроцессор выполняет ее. В противном случае байт игнорируется и удаляется из очереди. Состояние очереди QS\QS0 = 10 означает, что очередь в МП сброшена и NDCP также должен очистить свою очередь. Состояние QSiQS0 = 11 указывает, что первый байт в очереди не является первым байтом команды и этот байт NDCP анализирует, если толь­ ко он является частью команды ESC. Когда же он не является частью команды ESC, этот байт игнорируется.

При возникновении ошибок при декодировании и выполнении команд ESC сопроцессор выдает запрос прерывания INT = 1 на контроллер прерываний 8259Л. При необходимости чте­ ния операндов из памяти или записи результата вычислений в память NDCP посылает запросы циклов шины по линии RQ/GTo <н> RQ/GT{.

Очередь команд. Для упреждающей выборки из памяти и временного хранения команд в МП 8086 использован 6-байтный регистр очереди команд (см. рис. 4.2), представляющий со­ бой память типа FIFO 6 x 8 бит (first-in, first-out — первый вошел, первый вышел). Очередь команд непрерывно заполняется в те промежутки времени, когда системная шина не требуется для других операций. Такое опережение выборки команд по отношению к их исполнению значительно увеличивает пропускную способность шины, так как к моменту завершения текущей команды следующая команда чаще всего уже находится в МП. В случае выполнения команды перехода или вызова подпрограммы очередь должна сбрасываться, что уменьшает

4.I. Структурная схема МП 8086

345

перехода или вызова подпрограммы очередь должна сбрасываться, что уменьшает эффектив­ ность ее использования, но в среднем это происходит нечасто.

Хотя МП 8086 может обращаться к словам, младший байт которых расположен как по четному, так и нечетному адресу, но при нечетном адресе для чтения слова требуются два об­ ращения к памяти: сначала читается младший байт по верхней части шины (ВНЕ = 0, Д0 = 1 — см. табл. 4.3), а затем старший байт по нижней части шины (ВНЕ = 1, А0 = 0). Следовательно, возможна некоторая экономия времени, если хранить слова только по четным адресам. Длина команд составляет от одного до шести байт и их можно читать словами по четным адресам, хотя младший байт слова может принадлежать одной команде, а старший байт — другой ко­ манде. Поэтому FIFO организовано так, что позволяет читать команды из памяти словами по четным адресам (рис. 4.16, а). Имеется только одно исключение, связанное с переходом по не­ четному адресу. В этом случае МП производит выборку сначала одного байта по нечетному адресу, а затем продолжает читать слова по четным адресам (рис. 4.16, б).

а)

 

Загрузка команд

б)

Четвертая выборка не

Загрузка команд

 

 

i

 

начинается до освобождения

j,

Третья выборка —р»

Шестой байт

 

в очереди слова ----->

Шестой байт

 

 

Пятый байт

 

Третья выборка

Пятый байт

Вторая выборка

Четвертый байт

 

X

Четвертый байт

 

 

Третий байт

 

Вторая выборка

Третий байт

Первая выборка

—р»

Второй байт

 

X

Второй байт

 

 

Первый байт

 

Первая выборка ---- >

Первый байт

 

 

I

 

 

-I

 

 

Очередь команд

 

 

Очередь команд

Рис. 4.16. Заполнение очереди команд после перехода на четный (а) и нечетный (б) адреса

М икропроцессор 8088. Микропроцессор 8088 имеет 8-разрядную внешнюю шину дан­ ных, как и МП 8080/8085, но его архитектура аналогична архитектуре МП 8086 и разводка кон­ тактов корпуса такая же, как и у МП 8086 (см. рис. 4.4). Системы команд у МП 8088 и 8086 также одинаковы.

Микропроцессор 8088 можно применять в ап­

 

Таблица 4.7. Системные

паратуре, реализованной на базе МП 8080 или 8085.

 

сигналы управления

Поскольку линии управления МП 8088 и 8080/8085

Ю /М DT/R

~SSo

Состояние МП

различаются, при введении МП 8088 в систему на

базе МП 8080/8085 требуется значительно изменить

1

0

0

Interrupt Acknowledge

логику управления шиной. Особенно важно учесть

1

0

1

Read I/O Port

тот факт, что в МП 8088, как и в МП 8085, адреса и

1

1

0

Write I/O Port

данные мультиплексируются. В устройствах памяти

1

1

1

Halt

и ввода-вывода потребуются небольшие изменения,

0

0

0

Code Access

если не увеличивать объем памяти благодаря 20 ли­

0

0

1

Read Memory

ниям адреса.

0

1

0

Write Memory

В отличие от 6-байтной очереди команд МП

0

1

1

Passive

8086 в МП 8088 длина очереди команд равна 4 бай­

 

 

 

 

там. Это связано с тем, что МП 8088 может читать из памяти только байты, что увеличивает время их выборки — 6-байтная очередь использовалась бы не полностью. Алгоритм опережаю­ щей выборки отличается тем, что МП 8088 инициирует выборку команды из памяти, когда в очереди оказывается один свободный байт, а не два, как в МГ1 8086.

346 Глава 4. Микропроцессоры 8086/8088 и сопроцессор 8087

Большая часть сигналов МП 8088 имеет то же назначение, что и соответствующие сигна­ лы МП 8086 (см. рис. 4.4). Поскольку МП 8088 имеет 8-разрядную внешнюю шину данных, то вместо мультиплексных сигналов адреса-данных А Р 15...ц используются адресные сигналы А |5_8 и не требуется сигнал ВНЕ, который заменен сигналом SS0 (Status line), который эквивалентен сигналу So максимального режима. В максимальном режиме значение сигнала SS0 = 1 (High — высокий уровень напряжения). Понятно, что фиксировать адресные сигналы Л ,5_8 во внешнем регистре памяти не требуется. __

Вминимальном режиме работы вырабатывается сигнал Ю/М, инверсный по отношению

ксигналу M/IO МП 8086. Сигнал Ю /М логически эквивалентен инвертированному сигналу S2

максимального режима. Значения сигналов Ю/М, DT/R и SS0 идентифицируют тип передачи в текущем цикле шины (табл. 4.7).

Управление памятью при использовании МП 8086. На рис. 4.17 изображена структур­ ная схема памяти (ПЗУ — EPROM 27256/573РФ8 и статическое ОЗУ — SRAM МТ5С2568), об­ щий объем которой равен 128 Кбайт:

DEN (Data Enable) — сигнал включения приемопередатчиков,

DT/R (Data Transmit/Receive) — сигнал управления направлением передачи данных,

 

MRDC (Memory Read Command) — сиг­

 

нал чтения данных из памяти,

 

 

MWTC (Memory Write Command) — сиг­

 

нал записи данных в память,

 

 

младшая часть мультиплексной

 

шины адреса-данных (от/на МП),

 

 

AD |5_8

— старшая часть мультиплексной

 

шины адреса-данных (от/на МП),

 

 

Ai6_o — разряды шины адреса (от адрес­

 

ного регистра),

 

 

 

ВНЕ — сигнал управления старшей ча­

 

стью шины данных (от адресного регистра).

 

Сигналы

управления приемопередатчи­

 

ками, чтением и записью данных в память

 

поступают от контроллера шин 8288. Для се­

 

лекции БИС SRAM и EPROM используется

 

разряд адреса Л,6 (ЛЭ НЕ в данном устройстве

 

является дешифратором DC 1 х 2), т. е. не

 

предполагается увеличивать объем памяти за

 

счет использования адресных сигналов

 

Статическим оперативным

запоминаю­

 

щим устройством управляют сигналы:

 

СЕ (Chip Enable) — выбор кристалла,

 

WE (Write Enable) — разрешение записи,

 

OE (Output Enable) — разрешение выхода

 

(запись при WE - MWTC = 0

и чтение при

 

Ш. = MRDC = 0, если СЕ{ = Л ,6 = 0).

 

Из рис.4.17 следует, что адреса EPROM

 

заключены

в

диапазоне 00000/г... OFFFF/г

Рис. 4.17. Структурная схема управления

(64 Кбайта),

а

адреса SRAM (Static RAM) в

памятью

диапазоне — 10000h ... lFFFF/г (64 Кбайта).

4.2. Режимы адресации данных и переходов

347

Из-за неполной дешифрации адреса (разряды А19, А|8 и А П могут иметь произвольные зна­ чения — от ООО до 111) памяти могут быть приписаны и другие адреса.

Чтение памяти всегда производится словами, но МП будет принимать слово или только один из двух байт в зависимости от значений сигналов А0 и ВНЕ в соответствии с табл. 4.3. За­ пись же данных следует производить строго в соответствии со значениями сигналов А0 и ВНЕ. Для этого использованы ЛЭ ИЛИ, разделяющие ОЗУ на два банка: младший банк (Low Bank), селектируемый значением сигнала А0= 0, и старший банк (High Bank), выбираемый значением сигнала ВНЕ = 0:

0 - запись при Aq = 0 и MWTC = 1,

1

-н ет

записи данных в младший банк;

Р = ВНЕ ■MWTC =

0 -

запись при ВНЕ = 1 и MWTC = 1,

1 - нет записи данных в старший банк

 

(запись, конечно, возможна только при значении сигнала CEt = 0).

Объем

памяти можно увеличить, добавив еще необходимое число блоков памяти по

64 Кбайта,

селектируемых выходными сигналами адресного дешифратора сигналов А19_,6, по­

строенного, например, на ИС 1533ИД7.

4.2. Режимы адресации данных и переходов

Команды МП 8086/8088 могут содержать от одного до шести байт. В первом байте коман­ ды всегда находится код операции (Opcode — КОП). Во многих командах второй байт команды (постбайт) имеет специальное назначение — задает режим адресации данных, а также может содержать три дополнительных разряда КОП. Это позволило количественно расширить систе­ му команд и разработать гибкую систему адресации операндов. В однобайтных командах мо­ жет указываться неявный операнд или регистр. Команды могут иметь не более двух операндов, причем хотя бы один из операндов должен быть регистром. Исключение составляют цепочеч­ ные команды, оба операнда которых находятся в памяти. Операнд может содержать данное, часть адреса данного, косвенный указатель данного или другую информацию, относящуюся к обрабатываемым командой данным. Наименьшую длину имеют команды, в которых исполь­ зуются только операнды, находящиеся в регистрах МП.

Ф орматы команд. На рис. 4.18 изображены форматы первого байта команд с указанием специальных бит (индикаторов) и групп бит (полей), используемых для адресации операндов:

w (word) — индикатор, определяющий операцию с байтом (w = 0) или словом (w = 1), если команда может оперировать байтом и словом;

d (direction) — индикатор, указывающий направление передачи данных в двухоперандных командах за исключением команд с непосредственным операндом и цепочечных команд. Од­ ним из операндов должен быть регистр, определяемый полем reg во втором байте команды (rf = 0 — регистр является операндом-источником, d = 1 — регистр является операндом-

получателем);

s (sign) — индикатор,

используемый только совместно с индикатором w для расширения

знака непосредственных 8

-разрядных операндов, представленных в дополнительном коде, до

16-разрядных операндов (s:w = 00 — 8-разрядная операция, ,s:iv = 01 —

16-разрядная операция

с 16-разрядным непосредственным операндом без знака, s :w = ll —

16-разрядная операция

с 8-разрядным непосредственным операндом, который расширяется со знаком до 16 разрядов).

348 Глава 4. Микропроцессоры 8086/8088 и сопроцессор 8087

Последний вариант допускает использование однобайтного операнда для чисел -128 ...+127 в 16-разрядных операциях (экономится один байт). Индикатор 5 имеется только в командах сложения, вычитания и сравнения операндов;

у (value) — индикатор, определяющий число сдвигов в командах сдвигов (v = 0 — число сдвигов равно 1, v = 1 — число сдвигов определяется регистром CL);

z (zero) — индикатор, используемый только в команде REP;

reg (register) — 2- или 3-разрядное поле, адресующее сегментные регистры или регистры общего назначения в соответствии с табл. 4.8. Неоднозначности использования поля reg для указания сегментных регистров и регистров общего назначения не возникает, так как они рас­ познаются с помощью КОП.

D l D 6 D 5 D 4 D 3 D 2 D 1 DO D7 D 6 D 5 D 4 D 3 D 2 D 1 DO

 

 

 

 

 

 

КОП

 

 

 

 

 

 

 

 

I__

 

 

 

 

 

 

Т олько одн о б а й т о вы е ком анд ы

 

 

 

 

 

 

КОП

 

reg

 

 

 

 

 

J ______ I______ L.

 

 

 

 

 

 

 

КОП

reg

КОП

 

 

 

 

 

 

 

_I_

 

 

 

 

 

 

КОП

 

 

 

Рис. 4.18. Форматы первого байта команд

 

 

 

Таблица 4.8. Кодирование регистров

 

Адрес регистра

Регистры

Адрес регистра

 

Сегментный

(поле reg)

w = 1

w = 0

(поле reg) *

 

регистр

О О О

АХ

AL

0 0

 

ES

0

0

1

СХ

CL

0

1

 

CS

0

1

0

DX

DL

1

0

 

SS

0

1

1

ВХ

BL

1

1

 

DS

1

0

0

SP

АН

 

 

 

 

1

0

1

ВР

СН

 

 

 

 

1

1

0

SI

DH

 

 

 

 

1

1

1

DI

ВН

 

 

 

 

П р и м е ч а н и е : * старший разряд поля reg равен 0, если поле reg трехразрядное.

На рис. 4.19 показаны форматы всех команд сложения без переноса ADD, содержащие от двух до шести байт (штриховыми линиями изображены операнды, наличие которых определя­ ется режимом адресации операндов и индикаторами s и н>). Один байт disp L задает 8-разрядное смещение disp8 (расширяется со знаком), а два байта clisp Н и disp L — 16-разрядное смещение disp\6, участвующие в вычислении эффективного адреса памяти ЕА. Байт данных L представ­ ляет 8-разрядный непосредственный операнд (операнд, содержащийся в самой команде), а бай­ ты данных data Н и data L — 16-разрядный непосредственный операнд. Второй байт в первых двух командах сложения используется для задания режима адресации операндов. Второй байт второй команды содержит еще 3-разрядный код операции КОП = ООО.

 

 

4.2. Режимы адресации данных и переходов

349

7 6 5 4 3 2 1 0

7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7_6 5_4_3 2 1 0

 

 

O O O O O O a f w

mod reg

r/m

disp L

,\ i|

disp H

,

 

I I I I I I I

I I

I I

 

 

 

 

 

 

С лож ение р еги ст р /п а м я т ь с р е ги с т р о м и на п р а влен и ем сум м ы в лю б о й из них

 

КОП

г/т

1 0 0 0 0 0 i w

mod О О О

I .................

J_L

I I

..................

 

 

7 6 5 4 3 2 1 0

7 6 5 4 3 2 1 0

disp L

\ I

disp Н

d a ta L

data Н

С лож ение не п о ср ед ст вен н о го опер а н да с р еги ст р о м /п а м ят ью

| (data H есть, если s:w = 01) j

0 0 0 0 0 1

Ow

 

I

к— Н еп о ср едст вен ны й о перан д —>i

d a ta L

 

data H

| (data H есть, если w = 1)

....................

 

 

 

 

С лож ение н е п о ср ед ст вен н о го опер а н да с а ккум улят ором

Рис. 4.19. Форматы команд сложения ADD

Режимы адресации данных. Способ определения операнда называется режимом адреса­ ции. Если на код операции и режим адресации отводятся два байта, то второй байт, называемый постбайтом, имеет один из двух форматов, изображенных на рис. 4.20. Первый формат ис­ пользуется в однооперандных командах и таких двухоперандных, в которых один из операндов неявно определяется кодом операции. Второй формат необходим для двухоперандных команд

— поле reg определяет регистр, который в зависимости от значения индикатора d является опе- рандом-источником или операндом-получателем. Операнд, указываемый полями mod и г/т, определяется в соответствии с табл. 4.9. Эта таблица определяет шесть режимов адресации данных, названия и определения которых приведены в примечании.

DI D 6 О 5 О 4 О 3 О 2 О 1 D 0

D7 D 6 О 5 D 4 0 3 0 2 D I DO

mod

КОП

i

r/m

mod

i

reg

i

r/m

|

| I

i

. . i

 

1 1

Рис. 4.20. Форматы постбайтов

Таблица 4.9. Режимы адресации данных и сегментные регистры по умолчанию

r/m

mod = 00

000

D S : BX + S I5

001

D S : BX + DI 5

010

SS : BP + S I5

Oil

S S : BP + D I5

100DS : S I3

101D S : D I3

110DS : displ6 1

111DS : BX 3

mod =01

mod =10

mod = 11

w = 0

w = 1

 

 

DS : BX + SI + dispS 6

DS : BX + SI + displb 6

A L 2

A X 2

DS : BX + DI + dispS, 6

DS : B X + Dl + d isp \6 6

C L 2

C X 2

SS : BP + SI + dispS 6

SS : BP + SI + disp\6 6

D L 2

D X 2

SS : BP + DI + dispS 6

SS : BP + DI + disp\6 6

B L 2

B X 2

DS : SI + disp% 4

DS : SI + displ6 4

A H 2

S P 2

DS : DI + dispS 4

DS : DI + disp 164

C H 2

B P 2

SS : BP + dispS 4

SS : BP + disp 16 4

D H 2

S I2

DS : BX + disp8 4

DS : B X + disp\6*

B H 2

D I2

П р и м е ч а н и е :

1 П рям ая адресация: эф ф ективны й адрес ЕА данного является частью команды .

2 Регист ровая адресация: данное находится в регистре АХ. ВХ, СХ, DX, SI, DI, SP, AL, АН, BL, ВН, CL, CH, DL, DH.

' К освенная регист р ова я адресация: эффективный адрес ЕА = ВХ, SI или DI.

4Косвенная реги ст р ова я от носит ельная адресация: ЕА = {ВХ, BP, SI или DI) + [dispS или disp 16].

5 Б азовая индексная адресация: эф фективны й адрес ЕА = (ВХ или B P) + (SI или DI).

6 О т носит ельная базовая индексная адресация: ЕА = (ВХ или B P } + (SI или DI) + {disp% или disp 16).