Поскольку любой из регистров ВХ и ВР может использовать­ся в качестве базового, а любой из регистров SI и DI может слу­жить индексным, имеется четыре различные комбинации регист­ров, которые могут реализовать адресацию по базе с индексиро­ванием. Кроме того, адресация по базе с индексированием может быть дополнена 8- или 16-разрядным смещением, которое являет­ся третьим слагаемым при вычислении исполнительного адреса ЕА; 8-разрядное смещение, как и ранее, рассматривается как число со знаком, находящемся в диапазоне от -128 до +127.

Относительная адресация. Исполнительный адрес вычисляет­ся как сумма содержимого указателя команд IP и 8- или 16-раз­рядного смещения со знаком, заданного непосредственно в команде (рис. 1.7, е). Следует подчеркнуть, что в момент вычис­ления исполнительного адреса значение указателя команд IP равно адресу первого байта следующей команды. Способ относи­тельной адресации так же, как и прямая адресация, имеет огра­ниченное применение и используется только в командах перехо­дов, вызова подпрограмм и управления циклами.

В завершение рассмотрения различных способов адресации отметим, что исполнительные адреса ЕА, получаемые описанны­ми выше способами, являются в действительности 16-разрядными смещениями в сегменте. Как было показано на рис. 1.3, 20-раз­рядный физический адрес получается путем сложения смещения в сегменте с предварительно сдвинутым на четыре разряда влево базовым адресом сегмента. Поскольку имеется четыре сегмент­ных регистра CS, DS, SS и ES, для выполнения каждого преоб­разования логического адреса в физический должен быть выбран определенный регистр, содержащий базовый адрес соответствую­щего сегмента. Это осуществляют аппаратные средства микро­процессора, которые автоматически выбирают сегментный регистр согласно цели каждого обращения к памяти, как показано в табл. 1.2. В таблице указан также источник логического адреса, определяющий смещение в сегменте.

НЕ нашли? Не то? Что вы ищете?

В ряде случаев для эффективной передачи данных между сег­ментами удобно извлекать операнды, находящиеся в стековом сегменте, не прибегая к операциям со стеком. Это относится, на­пример, к извлечению параметров подпрограмм, которые нахо­дятся глубоко в стеке. Для подобных целей существует специ­альный вид обращения к памяти с использованием базового ре­гистра ВР. Данные, для доступа к которым используется регистр ВР, выбираются из стекового сегмента, причем содержимое регистра SS служит в этом случае базовым адресом, а смещение задается исполнительным адресом ЕА, в формировании которого участвует содержимое регистра ВР.

Таблица 1.2

Вид обращения к памяти

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

Логический адрес

Выборка команды

Операции со стеком

Обращение к исходной строке

Обращение к строке - результату

ВР - базовый регистр

Прочие обращения к переменной

CS

SS

DS*

ES

SS*

DS*

IP

SP

SI

DI

EA

EA

Примечание. Знаком * отмечены регистры, которые могут быть заменены на любые сегментные регистры при смене сегмента памяти с помощью префикса замены.

При выполнении команд обработки данных может появиться необходимость адресовать операнды, находящиеся вне текущего сегмента, выбираемого процессором автоматически. Для этих це­лей, как уже отмечалось, применяется префикс замены сегмента, имеющий размерность 1 байт. Префикс помещается непосредст­венно перед байтом кода операции и содержит код сегментного регистра, используемого в качестве замены.

Одной из особенностей Intel 8086 является наличие двух режи­мов - максимального и минимального, существенно отличаю­щихся по функциональным возможностям. Для минимального режима ЦП характерно использование только тех управляющих сигналов, которые вырабатываются непосредственно на выводах микросхемы.

Режим ЦП устанавливается путем соответствующего под­ключения вывода MN/MX к уровню «1» для минимального режима и к уровню «0» для максимального. В зависимости от выбранного режима изменяется назначение некоторых выводов ЦП. На рис. 1.8 приведены обозначения выводов микропро­цессора, соответствующие минимальному режиму (MN/MX=1), а в табл. 1.3 указаны назначения выводов.

Режим ЦП устанавливается путем соответствующего под­ключения вывода MN/MX к уровню «1» для минимального режима и к уровню «0» для максимального. В зависимости от выбранного режима изменяется назначение некоторых выводов ЦП. На рис. 1.8 приведены обозначения выводов микропро­цессора, соответствующие минимальному режиму (MN/MX=1), а в табл. 1.3 указаны назначения выводов.

 

Рис. 1.8. Условно-графическое обозначение микросхемы ЦП Intel 8086

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

Область применения ЦП в максимальном режиме и по­строенных на его основе ВМ определяется их способностью с большой скоростью выполнять сложные и высокоточные вычис­ления. При установке максимального режима изменяется назначе­ние восьми выводов микропроцессора, что отражается в измене­нии их обозначений (рис. 1.8). На выходах s0, s1, s2 присутствует код состояния микропроцессора, характеризующий текущий цикл работы и определяющий способ использования ША/Д. Ис­пользование информации о состоянии ЦП позволяет в дальней­шем выработать все сигналы, необходимые для управления внешними устройствами ВМ.

Выводы RQ/GT0 и RQ/GT1 являются двунаправленными линиями, предназначенными для организации захвата системной шины другими устройствами. Вход запроса захвата RQ/GT0 имеет более высокий приоритет, а в остальном эти входы функ­ционально эквивалентны. Захват начинается с поступления на один из входов RQ/GT запроса захвата шин длительностью в один такт от внешнего устройства (если запрос поступит одно­временно на оба входа RQ/GT0 и RQ/GT1, то будет обслужи­ваться запрос по RQ/GT0). Во время очередного такта на этот вывод микропроцессор подает выходной сигнал, который информирует запросившее устройство о разрешении захвата. В следующем такте ЦП входит в режим захвата и устанавливает соответствующие выводы в высокоимпедансное состояние. По окончании использования системных шин ВУ информирует об этом ЦП сигналом освобождения шин, который также подается на вывод RQ/GT микропроцессора и имеет дли­тельность 1 такт. Получив этот сигнал, ЦП возобновляет работу.

Таблица 1.3

Обозначение вывода

Вход/выход

Назначение вывода

AD15-ADO

Вход/выход

Мультиплексированная ША/Д

AI6/S3-A19/S6

Выход

Линии адреса или состояния

BHE/S7

Выход

Разрешение старшего байта шины

RD

Выход

Управление чтением

WR

Выход

Управление записью

M/IO

Выход

Выбор памяти или ВУ

ALE

Выход

Разрешение фиксации адреса

DT/R

Выход

Управление пересылкой данных

DEN

Выход

Разрешение пересылки данных

MN/MX

Вход

Установка режима

TEST

Вход

Сигнал окончания режима ожидания

HOLD

Вход

Запрос захвата шин

HLDA

Выход

Подтверждение захвата

INTR

Вход

Запрос прерывания

NMI

Вход

Запрос немаскируемого прерывания

INTA

Выход

Подтверждение прерывания

READY

Вход

Готовность памяти или ВУ

RESET

Вход

Сброс (начальная установка)

CLK

Вход

Такты ГТИ

GND, +5 в

Вход

Общий (земля), питание

Вывод LOCK, так же как и рассмотренные выводы RQ/GT0 и RQ/GT1, служит для организации взаимодействия ЦП с внешними устройствами. Активный сигнал LOCK=0 вырабаты­вается с помощью специальной команды и позволяет в случае необходимости запре­тить захват шин ЦП внешними устройствами. Выводы QS0 и QS1 несут информа­цию о состоянии очереди из байтов команд. Для декодирования сигна­лов состояния микропроцес­сора s0, s1, s2 в систему (при использовании ЦП в максимальном режиме) включается системный контроллер Intel 8288, позволяющий осу­ществить полную развязку управляющей, адресной и информа­ционной шин, а также различение ВУ и ЗУ при обращении к этим устройствам. Это позволяет полностью реализовать воз­можности адресации, предусмотренные в ЦП, т. е. возможно­сти обращения к 1М байт памяти и 64К байт портов ввода-вывода.

1.3. Общая характеристика системы команд

Для удобства рассмотрения систему команд ЦП разбивают на шесть групп: команды пересылки данных, арифметические команды, логические команды и сдвиги, команды анализа и пре­образования строк, команды передачи управления и команды управления микропроцессором. При изучении системы команд целесообразно пользоваться мнемокодом, т. е. символическим обозначением кода операции, и для каждого мнемокода давать набор всех форматов, определяющих различные способы его использования в программах.

В ряде случаев, особенно при разработке программного обес­печения для систем реального времени, важным является время выполнения той или иной программы, поэтому для каждой команды указывается число тактов n, требуемых для ее выполнения. Поскольку один и тот же формат команды мо­жет быть использован для задания различных способов адреса­ции и, следовательно, различных способов вычисления исполни­тельного адреса ЕА (см. 1.2), то время выполнения такой команды будет равно n + Ta, где Ta - время, необходимое для вычисления исполнительного адреса. Конкретное значение Ta зависит от используемого способа адресации, расположения 16-разрядного операнда в памяти (с четного или нечетного адреса) и наличия или отсутствия префикса замены сегмента. Для определения Ta могут быть использованы следующие данные (способ адресации – число тактов):

Прямая с 16-разрядным смещением - 6

По базе или с индексированием - 5

По базе или с индексированием при наличии константы смещения - 9

По базе с индексирование - 7

По базе с индексированием при наличии константы смещения - 11

Здесь приведены значения Ta для 8- или 16-разрядных операн­дов, расположенных по четным адресам. Если 16-разрядный операнд расположен с нечетного адреса, то к указанному выше значению времени следует прибавить еще четыре такта, а в случае использования префикса замены сегмента добавляется еще два такта.

1.4. Команды пересылки данных

Различают четыре типа пересылок: общего назначения, с уча­стием аккумулятора, адреса операнда и флагов. Ни одна из команд этой группы не влияет на флаги, за исключением двух команд, которые осуществляют явную загрузку регистра фла­гов F.

Пересылки общего назначения. Задаются с помощью четырех мнемокодов: MOV (переслать), PUSH (занести в стек), POP (извлечь из стека) и XCHG (обменять).

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

Команда PUSH служит для занесения содержимого 16-раз­рядного источника в стек. Источником операнда может являться регистр, сегментный регистр или память. Выполнению команды предшествует формирование адреса вершины стека: (SP) = (SP) – 2.

Команда POP служит для извлечения 16-разрядного операнда из стека и пересылки его в регистр, память или сегментный регистр. Операция извлечения из стека завершается формированием нового адреса вершины стека (SP) = (SP) + 2.

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

Пересылки с участием аккумулятора. Состоят из трех команд: IN (ввод), OUT (вывод) и XLAT (трансляция). В отли­чие от рассмотренных выше пересылок общего типа эти коман­ды обязательно используют аккумулятор в качестве источника или места назначения операнда.

Команда IN служит для пересылки данных (байта или слова) из порта ввода в аккумулятор (в AL или АХ). Номер порта ввода может быть задан как непосредственно, во втором байте команды, так и косвенно, в регистре DX, причем только регистр DX из всех РОН может использоваться для этой цели. Если первый формат команды ввода позволяет адресоваться к 256 портам, то второй - к 216 = 65536 портам. Косвенное за­дание порта хотя и требует предварительной загрузки его номе­ра в DX, однако позволяет организовывать программные цик­лы, в которых используется изменяющийся номер портов ввода.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27