Микропроцессор Intel 8088 (« восемьдесят-восемьдесят восемь », также называемый iAPX 88 ) [2] [3] [4] является вариантом Intel 8086. Представленный 1 июня 1979 года, [5] [6] [7] [8] 8088 имеет восьмибитную внешнюю шину данных вместо 16-битной шины 8086. Однако 16-битные регистры и диапазон адресов в один мегабайт остались неизменными. Фактически, согласно документации Intel, 8086 и 8088 имеют одно и то же исполнительное устройство (EU) — отличается только интерфейсное устройство шины (BIU). 8088 использовался в оригинальном IBM PC и в совместимых с IBM PC клонах .
8088 был разработан в лаборатории Intel в Хайфе , Израиль , как и большое количество процессоров Intel. [9] 8088 был нацелен на экономичные системы, позволяя использовать восьмибитный тракт данных и восьмибитную поддержку и периферийные микросхемы; сложные печатные платы были все еще довольно громоздкими и дорогими, когда он был выпущен. Очередь предварительной выборки 8088 была сокращена до четырех байтов с шести байтов 8086, а алгоритм предварительной выборки был слегка изменен для адаптации к более узкой шине. [a] Эти модификации базовой конструкции 8086 были одной из первых работ, порученных новому конструкторскому бюро и лаборатории Intel в Хайфе.
Варианты 8088 с максимальной тактовой частотой более 5 МГц включают 8088–2, который был изготовлен с использованием нового усовершенствованного процесса nMOS Intel , называемого HMOS , и рассчитан на максимальную частоту 8 МГц. Позже последовал 80C88, полностью статическая конструкция CHMOS , которая могла работать с тактовой частотой от 0 до 8 МГц. Было также несколько других, более или менее похожих, вариантов от других производителей. Например, NEC V20 был совместимым по выводам и немного более быстрым (на той же тактовой частоте) вариантом 8088, разработанным и произведенным NEC . Последующие процессоры NEC 8088 работали на частоте до 16 МГц. В 1984 году Commodore International подписала соглашение на производство 8088 для использования в лицензированном клоне Dynalogic Hyperion , что было расценено как сигнал о новом важном направлении для компании. [10] Доступная версия CMOS была передана на аутсорсинг компании Oki Electronic Industry Co., Ltd. [11] На момент анонса цена на 8088 составляла 124,80 долл. США. [12] [13] Версия в пластиковом корпусе была представлена в июле 1981 года по цене 14,10 долл. США за 100 штук. [14] Intel предоставила этот микропроцессор компании Fujitsu Limited в качестве второго поставщика . [15]
Архитектурно 8088 очень похож на 8086. Главное отличие в том, что вместо 16 линий данных у 8086 имеется всего восемь. Все остальные выводы устройства выполняют ту же функцию, что и у 8086, за двумя исключениями. Во-первых, вывод 34 больше не является BHE (это выбор байта старшего порядка на 8086 — у 8088 нет байта старшего порядка на его восьмибитной шине данных). [16] : 5–97 Вместо этого он выводит состояние максимального режима, SS0 . В сочетании с сигналами IO/ M и DT/ R циклы шины могут быть декодированы (обычно это указывает на то, когда выполняется операция записи или прерывание). Второе изменение заключается в том, что вывод, который сигнализирует о том , осуществляется ли доступ к памяти или доступ к вводу/выводу, имеет обратный смысл. Вывод на 8088 — это IO/ M. В части 8086 это IO /M. Причина изменения заключается в том, что это делает 8088 совместимым с 8085. [ 16] : 5–98
В зависимости от тактовой частоты , количества состояний ожидания памяти , а также характеристик конкретной прикладной программы средняя производительность Intel 8088 составляла примерно от 0,33 до 1 миллиона инструкций в секунду . [17] Между тем, инструкции и , занимающие два и три цикла соответственно, давали абсолютную пиковую производительность от 1 ⁄ 3 до 1 ⁄ 2 MIPS на МГц, то есть где-то в диапазоне 3–5 MIPS при 10 МГц.mov reg,reg
ALU[b] reg,reg
Скорость исполнительного устройства (EU) и шины ЦП 8086 была хорошо сбалансирована; при типичном сочетании инструкций 8086 мог выполнять инструкции из очереди предварительной выборки большую часть времени. Сокращение шины до восьми бит сделало ее серьезным узким местом в 8088. При снижении скорости выборки инструкций на 50% в 8088 по сравнению с 8086 последовательность быстрых инструкций может быстро опустошить четырехбайтовую очередь предварительной выборки. Когда очередь пуста, выполнение инструкций занимает столько же времени, сколько и их выборка. Как 8086, так и 8088 требуют четыре такта для завершения цикла шины; тогда как для 8086 это означает четыре такта для передачи двух байтов, в 8088 это четыре такта на байт. Поэтому, например, двухбайтовая инструкция сдвига или поворота, которая занимает у EU всего два такта для выполнения, на самом деле занимает восемь тактов для выполнения, если она не находится в очереди предварительной выборки. Последовательность таких быстрых инструкций предотвращает заполнение очереди так же быстро, как она опустошается, и в целом, поскольку так много базовых инструкций выполняются менее чем за четыре такта на байт инструкции — включая почти все инструкции ALU и перемещения данных на операндах регистра и некоторые из них на операндах памяти — практически невозможно избежать простоя EU в 8088 по крайней мере 1 ⁄ 4 времени при выполнении полезных реальных программ, и несложно простаивать его половину времени. Короче говоря, 8088 обычно работает примерно вдвое медленнее, чем 8086, тактируемый с той же частотой, из-за узкого места шины (единственное существенное отличие).
Побочным эффектом конструкции 8088 с медленной шиной и небольшой очередью предварительной выборки является то, что скорость выполнения кода может сильно зависеть от порядка инструкций. При программировании 8088 для эффективности ЦП крайне важно чередовать длительные инструкции с короткими, когда это возможно. Например, повторяющаяся строковая операция или сдвиг на три или более потребуют достаточно много времени, чтобы дать время для полного заполнения 4-байтовой очереди предварительной выборки. Если короткие инструкции (т. е. те, которые в общей сложности имеют несколько байт) помещаются между более медленными инструкциями, такими как эти, короткие могут выполняться на полной скорости вне очереди. Если, с другой стороны, медленные инструкции выполняются последовательно, спина к спине, то после первой из них блок шины будет вынужден простаивать, поскольку очередь уже будет заполнена, в результате чего позже большее количество быстрых инструкций будет испытывать задержки выборки, которых можно было бы избежать. Поскольку некоторые инструкции, такие как сдвиги и повороты однобитовых позиций, требуют буквально в 4 раза больше времени для извлечения, чем для выполнения, [c] общий эффект может быть замедлением в два или более раз. Если эти сегменты кода являются телами циклов, разница во времени выполнения может быть очень заметной в человеческой шкале времени.
8088 также (как и 8086) медленный при доступе к памяти. Тот же ALU, который используется для выполнения арифметических и логических инструкций, также используется для вычисления эффективных адресов. Существует отдельный сумматор для добавления смещенного сегментного регистра к смещенному адресу, но само смещение EA всегда вычисляется полностью в основном ALU. Кроме того, слабая связь EU и BIU (шинного блока) вносит накладные расходы на связь между блоками, а цикл передачи шины с четырехтактовым периодом не особенно оптимизирован. Сравните это с двухтактовым циклом шины ЦП 6502 и трехтактовым циклом шины 80286 с конвейеризацией до двух циклов для большинства передач. Большинство инструкций 8088, которые могут работать как с регистрами, так и с памятью, включая общие операции ALU и перемещения данных, по крайней мере в четыре раза медленнее для операндов памяти, чем для только регистровых операндов. Поэтому эффективные программы 8088 (и 8086) избегают повторного доступа к операндам памяти, когда это возможно, загружая операнды из памяти в регистры для работы с ними там и сохраняя обратно только готовые результаты. Относительно большой общий набор регистров 8088 по сравнению с его современниками помогает этой стратегии. Когда регистров недостаточно для всех переменных, которые нужны одновременно, сохранение регистров путем помещения их в стек и извлечения их обратно для восстановления является самым быстрым способом использования памяти для увеличения регистров, поскольку инструкции стека PUSH и POP являются самыми быстрыми операциями с памятью. То же самое, вероятно, не относится к 80286 и более поздним версиям; они имеют выделенные адресные АЛУ и выполняют доступ к памяти намного быстрее, чем 8088 и 8086.
Наконец, поскольку вызовы, переходы и прерывания сбрасывают очередь предварительной выборки, а загрузка регистра IP требует связи между EU и BIU (поскольку регистр IP находится в BIU, а не в EU, где находятся общие регистры), эти операции являются дорогостоящими. Все переходы и вызовы занимают не менее 15 тактов. Любой условный переход требует четырех тактов, если не выполняется, но если выполняется, то требуется 16 тактов в дополнение к сбросу очереди предварительной выборки; поэтому условные переходы должны быть организованы так, чтобы они не выполнялись большую часть времени, особенно внутри циклов. В некоторых случаях последовательность логических и перемещенийных операций выполняется быстрее, чем условный переход, который пропускает одну или две инструкции для достижения того же результата.
В технических описаниях Intel для 8086 и 8088 рекламировались специальные инструкции умножения и деления (MUL, IMUL, DIV и IDIV), но они очень медленные, порядка 100–200 тактов каждая. Многие простые умножения на малые константы (кроме степеней 2, для которых можно использовать сдвиги) можно выполнять намного быстрее, используя специальные короткие подпрограммы. 80286 и 80386 значительно увеличивают скорость выполнения этих инструкций умножения и деления. [d]
Оригинальный IBM PC является самым влиятельным микрокомпьютером, использовавшим 8088. Он имеет тактовую частоту 4,77 МГц (4/3 частоты цветовой синхронизации NTSC ). Некоторые инженеры и другие сотрудники IBM хотели использовать процессор IBM 801 , некоторые предпочитали новый Motorola 68000 , [e] а другие выступали за небольшой и простой микропроцессор, такой как MOS Technology 6502 или Zilog Z80 , которые использовались в более ранних персональных компьютерах. Однако IBM уже имела опыт использования чипов Intel в своих продуктах и также приобрела права на производство семейства 8086. [f]
IBM выбрала 8088 вместо 8086, потому что Intel предложила лучшую цену за первый и могла поставлять больше единиц. [18] Другим фактором было то, что 8088 позволял компьютеру быть основанным на модифицированной конструкции 8085 , поскольку он мог легко взаимодействовать с большинством nMOS-чипов с 8-битными шинами данных. Это были зрелые, и, следовательно, экономичные компоненты. Сюда входили ИС, изначально предназначенные для поддержки и периферийных функций вокруг 8085 и подобных процессоров (не только Intel), которые уже были хорошо известны многим инженерам, что еще больше снижало стоимость. [g]
Потомками 8088 являются процессоры 80188 , 80186 , 80286 , 80386 , 80486 и более поздние программно - совместимые процессоры, включая процессоры Intel Core , которые популярны сегодня.