Поскольку любой из регистров ВХ и ВР может использоваться в качестве базового, а любой из регистров 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 |



