Работа микропроцессора 8086 с памятью и регистрамиустройств ввода-вывода1. Организация памяти
Микропроцессор 8086 обеспечивает адресацию памяти емкостью 1 Мбайт. Адресное пространство памяти представляет собой одномерный массив байт, каждый из которых имеет 20-битный физический адрес. Минимальной адресуемой единицей памяти является байт. Любые два смежных байта в памяти образуют 16-битное слово. 16-битовое слово всегда заносится в память так, что старший байт находится в ячейке с большим номером. Адресом слова считается адрес его младшего байта. Четыре смежных байта памяти образуют 32-битное слово (двойное слово), именуемое указателем и представляющее собой полный адрес памяти "сегмент:смещение". Старшее слово при этом задает базовый адрес (начало сегмента), а младшее - смещение. Такие указатели применяются для адресации данных и команд, находящихся вне текущих сегментов. Команды, байты и слова данных можно свободно размещать по любому адресу. Однако в некоторых случаях целесообразно размещать слова в памяти по четным адресам, так как процессор может передавать такие слова за один цикл шины (слова с нечетными адресами передаются за два цикла шины). Слово с четным адресом называется выровненным на границе слова. Особенно важно иметь выровненные слова для операций со стеком, так как в них участвуют только слова. Следовательно, указатель стека SP всегда необходимо инициализировать на четный адрес. Отметим, что выравнивание команд незначительно увеличивает производительность процессора, так как устройство шинного интерфейса выбирает их в очередь команд с опережением.
Сегментация
Программы используют пространство памяти в 1 Мбайт в виде сегментов. Сегмент представляет собой логическую единицу памяти размером 64 Кбайт. Он состоит из смежных ячеек памяти и является независимой и отдельно адресуемой единицей памяти. Каждому сегменту программой назначается базовый (начальный) адрес, являющийся адресом его первого байта в адресном пространстве памяти. Все сегменты начинаются на 16-байтных границах памяти, называемых границами параграфов. Других ограничений на размещение сегментов в памяти нет. Сегменты могут быть соседними (смежными), неперекрывающимися (непересесекающимися), частично или полностью перекрывающимися. Физическая ячейка памяти может принадлежать одному или нескольким сегментам. Зарезервированные области памятиДве области адресного пространства памяти зарезервированы для выполнения особых функций, связанных с обработкой прерываний и системным сбросом. Этими областями являются первые 128 байт (физические адреса 00000-0007F) и последние 16 байт (физические адреса FFFF0-FFFFF). Данные области использовать для других целей нельзя.
2. Ввод-вывод
Процессор 8086 имеет большое адресное пространство ввода-вывода, изолированное от пространства памяти, и специальные команды, которые передают данные между регистрами процессора и портами в пространстве ввода-вывода. Допускается также организация ввода-вывода, отображенного на память, чтобы использовать для ввода-вывода всю систему команд и допустимые режимы адресации памяти. Для быстрых передач блоков данных применяются контроллеры прямого доступа к памяти и специализированные процессоры ввода-вывода. Адресное пространство ввода-вывода содержит до 64К 8-битовых портов или до 32К 16-битовых портов. Команды IN (ввод) и OUT (вывод) передают данные между аккумуляторами AL (байты) или AX (слова) и адресуемыми портами. Восемь ячеек F8-FF в пространстве ввода-вывода зарезервированы для системных целей, и использовать их в прикладных программах не рекомендуется. 3. Организация памяти ЭВМ типа IBM PC
Память ЭВМ IBM PC организована следующим образом: Первые 640 Кбайт адресного пространства с адресами от 00000 до 9FFFF выделены под оперативную память, а остальные 384 Кбайт c адресами от A0000 до FFFFF используются для размещения ПЗУ и отображаемого на память ввода-вывода. В начале области ОЗУ размещена область векторов прерываний: 256 векторов, занимающих по 4 байта памяти. После них расположены области данных и программ операционной системы. Оставшуюся часть ОЗУ занимают программы пользователя. Адреса в области ПЗУ и отображаемого ввода-вывода распределены следующим образом: A0000-AFFFF - отображенная на память область ввода вывода дисплея в графическом режиме; B0000-B7FFF - отображенная на память область ввода вывода дисплея в текстовом монохромном режиме; B8000-BFFFF - отображенная на память область ввода вывода дисплея в цветном текстовом режиме; C0000-EFFFF - область ПЗУ жесткого диска, видеоадаптера и других устройств; F0000-FFFFF - область ПЗУ программ тестирования ЭВМ при запуске, начальной загрузки операционной системы и базовой системы ввода-вывода. В ЭВМ IBM PC используются порты с адресами 0000-03FF, причем адреса 0000-00FF используются системной платой, а остальная область выделена для устройств пользователей.
4. Режимы адресации микропроцессора Intel 8086
Команда разделяется на группы бит (поля), причем поле кода операции (КОП) показывает, что должен делать процессор, а остальные поля, называемые операндами, идентифицируют требуемую команде информацию. Операнд может содержать данное, часть адреса данного, косвенный указатель данного или другую информацию, относящуюся к обрабатываемым командой данным. Общий формат команды:
Команды могут содержать несколько операндов, но чем больше операндов и чем они длиннее, тем больше места занимает команда в памяти и тем больше времени для ее считывания требуется процессору. Чтобы сократить длину команды, в большинстве команд используются один или два операнда, причем в двухоперандной команде одним из операндов является регистр. Способ определения операнда называется режимом адресации. Рассмотрим наиболее типичные режимы адресации микропроцессора 8086. Они разделяются на два класса - режимы адресации данных и режимы адресации переходов. 1. Режимы адресации даных
Различают следующие режимы адресации данных: 1) Непосредственный - данное длиной 8 или 16 бит является частью команды. 2) Прямой - 16-битный эффективный адрес данного является частью команды. 3) Регистровый - данное содержится в определяемом командой регистре. 16-битный операнд может находиться в регистрах AX, BX, CX, DX, SI, DI, SP или BP, а 8-битный - в регистрах AL, AH, BL, BH, CL, CH, DL или DH. 4) Регистровый косвенный - эффективный адрес данного находится в базовом регистре BX или одном из индексных регистров. 5) Регистровый относительный - эффективный адрес равен сумме 8- или 16-битного смещения и содержимого базового или индексного регистров. 6) Базовый индексный - эффективный адрес равен сумме содержимого базового и индексного регистров. 7) Относительный базовый индексный - эффективный адрес равен сумме 8- или 16-битного смещения и базово-индексного адреса. Допустим, что регистр BX содержит число 0158 в 16-ричном коде, регистр DI - число 10A5, смещение равно 1B57, сегментный регистр данных DS содержит число 21000. Тогда, если в качестве сегментного регистра применяется DS, различные режимы адресации дают следующие эффективные и физические адреса: 1) Прямой: Эффективный адрес EA = 1B57, Физический адрес = 1B57 + 21000 = 22B57. 2) Регистровый косвенный (с участием регистра BX): Эффективный адрес EA = 0158, Физический адрес = 0158 + 21000 = 21158. 3) Регистровый относительный (с участием регистра BX): Эффективный адрес EA = 0158 + 1B57 = 1CAF, Физический адрес = 01CAF + 21000 = 22CAF. 4) Базовый индексный (с участием регистров BX и DI): Эффективный адрес EA = 0158 + 10A5 = 11FD, Физический адрес = 011FD + 21000 = 221FD. 5) Относительный базовый индексный (с участием регистров BX и DI): Эффективный адрес EA = 0158 + 10A5 + 1B57 = 2D54, Физический адрес = 02D54 + 21000 = 23D54. 2. Режимы адресации переходов
Различают следующие режимы адресации переходов: 1) Внутрисегментный прямой - эффективный адрес перехода равен сумме 8- или 16-битного смещения и текущего содержимого IP. Когда смещение имеет длину 8 бит, этот режим называется коротким переходом. Этот режим допустим в условных и безусловных переходах, но в команде условного перехода смещение может иметь длину только 8 бит. 2) Внутрисегментный косвенный - эффективный адрес перехода есть содержимое регистра или ячейки памяти, которые указываются в любом режиме (кроме непосредственного) адресации данных. Содержимое IP заменяется эффективным адресом перехода. Данный режим допустим только в командах безусловного перехода. 3) Межсегментный прямой - заменяет содержимое IP первым операндом команды, а содержимое CS - вторым операндом. Назначение данного режима адресации - обеспечить переход из одного сегмента кода в другой. 4) Межсегментный косвенный - заменяет содержимое регистров IP и CS содержимым двух смежных слов из памяти, которые определяются в любом режиме адресации данных, кроме непосредственного и регистрового. Межсегментный переход может быть только безусловным. Допустим, что регистр BX содержит число 1256 в 16-ричном коде, регистр SI - число 528F, смещение равно 20A1. Тогда при прямой адресации эффективный адрес перехода равен 20A1 + (DS)*0010. При регистровой косвенной адресации (с участием регистра BX) эффективный адрес перехода 1256 + 20A1 + (DS)*0010. При базовой индексной адресации (с участием регистров BX и SI) эффективный адрес перехода 1256 + 528F + (DS)*0010. 7. Форматы команд микропроцессора 8086
Рассмотрим типичные форматы команд микропроцессора 8086. Длина команд варьируется от 1 до 6 байт. Длина смещений и непосредственных данных может быть 8 или 16 бит в зависимости от кода команды. Один или два байта в начале кода команды занимают код операции и указание режима адресации. После них могут находиться: - ни одного дополнительного байта; - двухбайтный эффективный адрес EA (только для прямой адресации); - одно- или двухбайтное смещение; - одно- или двухбайтный непосредственный операнд; - одно- или двухбайтное смещение с последующим одно- или двухбайтным непосредственным операндом; - двухбайтное смещение и двухбайтный сегментный адрес (только для прямой межсегментной адресации). Применение одной из перечисленных возможностей определяется кодом операции и режимом адресации. Если длина смещения или непосредственного операнда составляет 2 байта, первым всегда следует младший байт. Обычно код операции занимает первый байт команды, но в некоторых командах в первом байте также указывается регистр, а в некоторых других командах три бита кода операции находятся во втором байте. Далее используются следующие условные обозначения: REG - регистр, MOD - режим, R/M - регистр или память, DISP - смещение, DATA - непосредственные данные, LO - младший байт, HI - старший байт.
Пример однобайтной команды с неявными операндами: КОП Пример однобайтной команды с регистровым режимом адресации: КОП REG Операция регистр-регистр: КОП 1 1 REG R/M Операция регистр-память без смещения: КОП MOD REG R/M Операция регистр-память со смещением: КОП MOD REG R/M DISP-LO DISP-HI Непосредственный операнд в регистр: КОП MOD КОП R/M DATA-LO DATA-HI Непосредственный операнд в память с 16-битным смещением: КОП MOD КОП R/M DISP-LO DISP-HI DATA-LO DATA-HI
В большинстве кодов операций имеются следующие однобитные индикаторы: Бит W. Если команда может оперировать и байтом, и словом, то в коде операции имеется бит W. Бит D. Содержится в двухоперандных командах (за исключением команд с непосредственным операндом и цепочечных команд). Одним из операндов должен быть регистр, определяемый полем REG. В таких командах бит D показывает, чем является регистр: операндом-источником (D=0) или операндом-получателем (D=1). Бит S. 8-битное число в дополнительном коде можно расширить до 16-битного в дополнительном коде, если сделать все биты старшего байта равными старшему биту младшего байта. Такая операция называется расширением знака. Бит S появляется вместе с битом W в командах сложения, вычитания и сравнения с непосредственным операндом и расшифровывается следующим образом: - 8-битная операция - S=0 и W=0; - 16-битная операция с 16-битным непосредственным операндом - S=0, а W=1; - 16-битная операция с 8-битным непосредственным операндом, который расширяется со знаком до 16 бит - S=1 и W=1. При работе с небольшими числами последний вариант допускает использование однобайтного непосредственного операнда. Бит V. Применяется в командах сдвигов для определения числа сдвигов. Бит Z. Используется в команде REP. Сегментный регистр определяется двумя битами, а любой другой регистр - тремя.
Таблица адресов регистров:
Если на код операции и режим адресации отводится два байта, то второй байт имеет одну из следующих форм:
Первая из них предназначена для однооперандных команд или для двухоперандных команд с неявным заданием одного из операндов. Вторая форма характерна для двухоперандных команд, причем поле REG определяет регистр, который в зависимости от значения бита D является операндом-источником или операндом-получателем. Операнд, указываемый полями MOD и R/M, определяется в соответствии со следующей таблицей:
D8 - восьмибитное смещение, D16 - шестнадцатибитное смещение.
Если MOD не равно 11, эффективный адрес вычисляется согласно таблице. Отметим, что MOD = 00 означает отсутствие смещения, за исключением случая R/M = 110, который обозначает прямую адресацию. Комбинация MOD = 01 означает, что третий байт команды содержит 8-битное смещение, которое до вычисления эффективного адреса автоматически расширяется со знаком до 16 бит. Если MOD = 10, то третий и четвертый байты команды содержат 16-битное смещение. Наконец, в случае MOD = 11 операндом является регистр, адрес которого определяется полем R/M. В таблице также показаны сегментные регистры, используемые в каждой из комбинаций полей MOD и R/M. Эффективный адрес операнда в памяти определяется полями MOD и R/M, но 20-битный физический адрес равен сумме эффективного адреса и содержимого сегментного регистра, умноженного на 16. В режимах адресации с привлечением регистра BP с эффективным адресом суммируется содержимое сегментного регистра SS, а в остальных режимах адресации участвует регистр DS. Чтобы изменить используемые в соответствии с таблицей сегментные регистры, предусмотрена специальная однобайтная команда, называемая префиксом переопределения (замены) сегмента. Она имеет следующий формат:
Если команде предшествует префикс переопределения сегмента, при обращении к данным в процессе ее выполнения участвует сегментный регистр REG. Регистр DS можно заменить на CS, SS или ES, а регистр SS при участии регистра BP - на DS, CS или ES. Замену нельзя производить в следующих специальных случаях: - при вычислении адреса следующей выполняемой команды в качестве сегментного регистра всегда применяется CS; - при участии в адресации регистра SP сегментным регистром всегда служит SS; - в цепочечных командах в качестве сегментного регистра операнда-получателя всегда используется ES. 8. Время выполнения командЗатраты времени на выполнение одной команды можно определить, умножая число тактов синхронизации, необходимых для выполнения команды, на период синхронизации. Это время можно выразить в виде суммы базового времени выполнения (которое зависит от команды и режима адресации) и времени вычисления эффективного адреса, если привлекается операнд из памяти. Базовое время выполнения предполагает, что выполняемая команда уже выбрана и находится в очереди команд. В противном случае требуется учесть дополнительные такты синхронизации, необходимые для выборки команды. Базовое время выполнения некоторых типичных команд микропроцессора 8086/8088:
Третий столбец таблицы показывает число обращений к памяти, необходимых для выполнения команд. Чтобы определить время выполнения команды, в которой осуществляется обращение к полному слову памяти, следует учесть выравнивание операнда. Если слово имеет нечетный адрес, микропроцессор 8086 считывает его за два цикла шины, длящихся по 4 такта синхронизации. В микропроцессоре 8088 на передачу каждого слова необходимо прибавить 4 такта синхронизации, так как в цикле шины он может передать только один байт
|
Скачано с www.znanio.ru
© ООО «Знанио»
С вами с 2009 года.