Процессор 8088/8086


Предыдущая | Следующая

Процессор 8088/8086
В компьютере IBM PC/XT и его клонах применяется процессор 8088 или 8086. Их выпускает, в основном, фирма Intel, но под разными номерами их же производят и другие фирмы. Эти две микросхемы несколько различаются внутренним устройством и функциями контактов, но система команд у них одинакова.
На рис. 15.3 показана разводка контактов обоих процессоров, которые выпускаются в 40-контактных корпусах DIP. Процессор 8086 имеет 16 линий данных (контакты 2—16 и 39), которые используются в шинах адреса и данных. У процессора 8088 есть только восемь линий данных (контакты 9—16). На первый взгляд кажется, что процессор 8088 является 8-битовым, а процессор 8086 16-битовым, но процессор 8088 оказывается все же 16-битовым. В нем используется интересный прием: к 16-битовому регистру памяти он должен обращаться два раза, передавая одновременно только 8 бит. Процессор 8086 передает 16 бит за одно обращение.
Кроме отличия в шине данных в остальном процессоры 8086 и 8088 одинс-ковы. Для взаимодействия с внешними компонентами в них применяются одинаковые сигналы адреса, данных и управления.
Оба процессора имеют 20 линий адреса А19—АО, что позволяет прямо адресовать 1048576 байт (1 Мбайт). Адресное пространство можно представить также двухбайтовыми регистрами, называемыми словами, поэтому процессоры 8088/8086 прямо адресуют 524288 слов.

Процессоры 8088/8086 имеют 14 16-битовых регистров, показанных на рис. 15.4. Отметим отсутствие регистров, длина которых больше 16 бит, что напоминает 8-битовый процессор. Имеются 8-битовые процессоры, которые во многих отношениях действуют так же, как процессоры 8088/8086. Но процессоры 8088/8086 имеют 20 линий адреса и могут адресовать 1 Мбайт, а 8-битовый процессор имеет 16 линий адреса и может адресовать только 64 Кбайт. В этом состоит одно из главных преимуществ процессоров 8088/8086 над 8-битовыми процессорами, что позволяет считать их 16-битовыми процессорами.
Процессоры 8088/8086 имеют систему из 135 команд. Команды оперируют данными нескольких размеров: байтами, словами и 32-битовыми двойными словами. Однако большинство команд работает с байтами и словами.
Считается, что процессоры 8088/8086 имеют регистровую организацию, т.е. они стремятся максимально использовать для обработки данных внутренние регистры, а не обращаться к памяти. Разумеется, при этом повышается быстродействие. Для этого восемь регистров действуют как регистры общего назначения, и процессор может использовать их как угодно, в том числе и как ЗУПВ.
Частота синхронизации процессоров 8088/8086 составляет от 4 до 8 МГц, а в 8-битовых процессорах она составляет 1 или 2 МГц, поэтому процессоры 8088/8086 значительно быстрее. Например, на частоте 5 МГц короткая команда регистр — регистр выполняется за 400 не, а «длинная» команда знакового деления длится 42 мкс. В процессоре с частотой синхронизации 1 МГц эти команды выполняются значительно дольше.

Регистры. Внутренние регистры процессоров 8088/8086 разделены на несколько групп: аккумуляторная группа обработки данных, указатели и индексы, сегментные регистры. Программная модель процессоров представлена на рис. 15.4. Аккумуляторная группа, указатели и индексы объединяются в регистры общего назначения. Каждый из 16-битовых регистров аккумуляторной группы составлен из двух отдельно адресуемых 8-битовых регистров.
Восемь 8-битовых или четыре 16-битовых регистра аккумуляторной группы предназначены, в основном, для обработки данных, а регистры указательной и индексной группы — для адресации.
В аккумуляторную группу входят регистры аккумулятора, базы, счетчика .и данных. Они состоят из двух 8-битовых половин, называемых младшей и старшей. В общем, во многих командах эти регистры взаимозаменяемы, но некоторые команды определяют конкретные регистры.
Четыре оставшихся регистра общего назначения можно использовать для конкретных целей. Указатель стека содержит 16 младших бит адреса стека, а четыре старших бита берутся из сегментного регистра. Регистры указателя базы, индекса источника и индекса получателя обеспечивают 16 бит из 20-битовых адресов для адресации памяти 1 Мбайт. Допускается суммирование индекса источника или получателя с указателем базы для получения окончательного адреса. Допускается также применять указатель базы и индексы совместно с сегментным регистром данных для формирования адреса. Процессоры 8088/8086 обладают очень гибкой адресацией. Напомним, что восемь 16-битовых регистров применяются,
по существу, как регистры общего назначения во многих операциях. В этих регистрах данные можно передавать, суммировать, вычитать, сдвигать, увеличивать и уменьшать на единицу и т.д.
Четыре сегментных регистра не предназначены для общего применения, хотя некоторые команды могут изменить их содержимое. Эти регистры предназначены, в основном, для адресации пространства 1 Мбайт и содержат 16-битовые сегментные адреса. Рассмотрим процесс формирования 20-битовых адресов с привлечением 16-битовых регистров.
Формирование 20-битового адреса. На рис. 15.5 в центре показан 16-битовый сегментный регистр; 16 бит сегментного регистра занимают разряды 19 — 4 адреса, а разряды 3 — 0 содержат нули. Если прибавить к сегменту адрес, который смещен на четыре разряда, получится 20-битовый адрес. Смещение можно взять из других регистров процессора и при правильном выборе битов можно адресовать все 1 Мбайт адресного пространства.
 

В табл. 15.2 приведены режимы адресации процессоров 8088/8086: непосредственная, регистровая, базовая индексная, индексная, базовая, прямая и относительная. Для адресации памяти суммируются указанные регистры с получением 20-битового адреса.

Фактическая адресация осуществляется программированием на машинном языке. Комбинирование всех этих значений для получения 20-битовых адресов может оказаться довольно сложным. Обычно технику не нужны подробные знания из этой области, но тогда вы не узнаете, что делать при ремонте этих процессоров.
Одно из достоинств суммирования 16-битовых регистров для получения 20-битовых адресов заключается в распределении отдельных областей памяти для кода программы, требуемых данных и стека. В 8-битовом компьютере регистры кода, данных и стека находятся в одной области ЗУПВ 64 Кбайт. Благодаря 16-битовым сегментным регистрам можно выделить отдельные области ЗУПВ по 64 Кбайт для кода, данных и стека. При необходимости можно привлечь также дополнительный сегментный регистр. На рис. 15.6 показано, как с помощью сегментных регистров распределить области памяти.
Режимы адресации. Обратимся к табл. 15.2, показывающей режимы адресации. При непосредственной адресации команда сама содержит 8- или 16-битовые данные, подлежащие обработке. В соответствии с выполняемой командой байт или слово данных можно сохранить в регистре процессора или ячейке памяти. Кроме того, данные можно направить в АЛУ для проведения арифметической или логической операции. Слово «непосредственная» означает, что данные не нужно отдельно считывать из памяти, так как они считываются при выборке команды. Только в этом режиме не привлекаются сегментные адреса, указатели, индексы и т.д.
В режиме регистровой адресации код операции команды содержит имя регистра процессора, содержимое которого подлежит обработке. Процессор быстро обращается к регистру и выполняет определяемую командой операцию над его содержимым. Команда может заключаться просто в передаче содержимого указанного регистра в другой регистр.

Причина появления многочисленных режимов адресации заключается в том, чтобы дать процессору множество способов доступа к памяти и получения операндов. Непосредственная адресация является простейшей из всех. Здесь процессор вообще не имеет адреса. Операнд содержится в команде после кода операции. Регистровая адресация также довольно проста, так как операнд уже находится в одном из внутренних регистров процессора. Код операции определяет регистр, и процессор обращается к этому регистру. Остальные режимы адресации несколько сложнее.
В регистровой косвенной адресации процессор прибавляет содержимое сегментного регистра данных к содержимому одного из следующих регистров: база, указатель базы, индекс источника или индекс получателя. Результатом сложения является 20-битовый адрес, по которому находится нужный операнд. После этого операнд передается в процессор и используется в программе.
Содержимое регистров ВР, SI и DI называется эффективным адресом (Effective Address — ЕА). При сложении эффективного адреса с сегментным регистром получается фактический 20-битовый адрес.

Разновидностью косвенной адресации является прямая адресация. Здесь по-прежнему 20-битовый адрес должен формироваться с участием сегментного регистра. Однако прибавляемые к сегментному регистру биты берутся не из другого регистра, а содержатся в самой команде после кода операции. Такой прием иногда напоминает непосредственную адр\сацию, но в ней команда содержит фактический операнд, а в прямой адресации команда содержит б тгы адреса, прибавляемые к сегментному регистру.
После сложения с сегментным регистром образуется 20-битовый адрес и процессор обращается к ячейке памяти. Он считывает операнд из ячейки и использует его в программе.
В индексной адресации привлекаются другие биты адреса. В предыдущих режимах биты адреса находились в сегментных регистрах, в регистре базы, указателе базы и индексных регистрах, а также в самой команде. Но в команде могут быть биты адреса, называемые смещением в команде (displacement). Их можно сложить с другими указанными регистрами с получением других режимов адресации.
Индексная адресация служит в этом отношении хорошим примером. Когда в команде содержится смещение, его можно сложить с содержимым одного из индексных регистров и получить эффективный адрес ЕА. После этого ЕА суммируется с сегментным регистром и получается 20-битовый адрес. Процессор обращается по этому адресу и считывает операнд. Отметим, что при отсутствии смещения в команде этот режим превращается в регистровую косвенную адресацию. Этих два режима почти одинаковы, за исключением смещения в команде.
Базовая адресация похожа на регистровую косвенную адресацию, но несколько сложнее. В косвенной адресации эффективным адресом служит содержимое базового регистра, указателя базы или индексных регистров. Оно суммируется с сегментным регистром и образуется 20-битовый адрес. Если прибавить к такому ЕА смещение из команды, получится базовая адресация. Операнд определяет 20-битовый адрес, образованный из косвенного ЕА, смещения из команды и сегментного регистра.
Если сделать еще один шаг, получится базовая индексная адресация. Здесь для получения эффективного адреса нужно просуммировать содержимое базового регистра, индексного регистра и необязательное смещение из команды. После этого полученный ЕА суммируется с содержимым сегментного регистра. В результате получается 20-битовый адрес, по которому хранится нужный операнд. Процессор считывает операнд и использует в программе.
Последний режим называется относительной адресацией. Он довольно прост, но важен, и позволяет программистам разрабатывать позиционно независимые программы. Здесь для образования 20-битового адреса нужно прибавить к сегментному регистру смещение из команды. Относительная адресация применяется в командах переходов и вызовов.
Разнообразие способов обращения к операндам является сильной стороной процессоров 8088/8086. Операнды могут находиться везде: во внутренних регистрах процессора как часть команды, в ЗУПВ и ПЗУ. При задании операндов в команде или в регистрах процессора простой доступ к ним обеспечивает непосредственная и регистровая адресация.
Когда операнды находятся к памяти, для обращения к ним применимы другие режимы адресации (косвенная, прямая, индексная, базовая, базовая индексная и относительная), которые формируют 20-битовый адрес для обращения к ячейке с нужным операндом.
Адресация заключается в суммировании комбинаций сегментов, указателей, смещений из команд и индексов. Для выборки команд из памяти содержимое указателя команды суммируется с содержимым сегментного регистра кода. Для локализации байтов в стеке содержимое указателя стека суммируется с содержимым сегментного регистра стека. Для обращения к байтам данных в#памяти базовый регистр при необходимости суммируется с указателем базы, индексом и смещением из команды. Результат суммируется с содержимым сегментного регистра данных. Аналогично можно использовать и дополнительный сегментный регистр. Прибавление суммы базового регистра с индексом и смещением из команды к дополнительному сегментному регистру также локализует данные.
Практическое применение многочисленных режимов адресации оказывается непростым делом. Но чтобы научиться писать программы для процессоров 8088/8086 на машинном языке, вам придется изучить режимы адресации. О них важно знать и специалисту по аппаратным средствам. Чем лучше вы разберетесь в процессоре вашего компьютера, тем легче будет выполнять свою работу.

 

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