Intel 8088

D8088 em encapsulamento DIP cerâmico com pinos prateados
Produção1979–1998[1]
Transistores29 000
Processo de fabricação3 µm
Frequência5–16 MHz
Arquiteturax86 (16 bits internos, barramento externo de 8 bits)
Largura de dados8 bits
Largura de endereço20 bits
CoprocessadorIntel 8087
EncapsulamentosDIP 40 pinos
PLCC 44 pinos
SoqueteDIP40
AplicaçõesDesktop, embarcado
FabricantesIntel, AMD, NEC, Fujitsu, Harris (Intersil), OKI, Siemens, Texas Instruments, Mitsubishi
AntecessorIntel 8085
Sucessores80186 e 80286 (ambos lançados em 1982)
Variante deIntel 8086
StatusObsoleto

O microprocessador Intel 8088 ("oitenta e oitenta e oito", também chamado de iAPX 88)[2][3][4] é uma variante do Intel 8086. Introduzido em 1º de junho de 1979,[5][6][7][8] o 8088 possui um barramento de dados externo de oito bits em vez do barramento de 16 bits do 8086. No entanto, os registradores de 16 bits e a faixa de endereçamento de um megabyte permanecem inalterados. De fato, de acordo com a documentação da Intel, o 8086 e o 8088 têm a mesma unidade de execução (EU) — apenas a unidade de interface de barramento (BIU) é diferente. O 8088 foi usado no IBM PC original e em clones compatíveis com o IBM PC.

História e descrição

Die do AMD 8088

O 8088 foi projetado no laboratório da Intel em Haifa, Israel (assim como um grande número de processadores da Intel) como uma versão de baixo custo do 8086.[9]O 8088 foi direcionado a sistemas econômicos, permitindo o uso de um caminho de dados de oito bits e suporte a chips periféricos de oito bits; placas de circuito complexas ainda eram bastante volumosas e caras quando ele foi lançado. A fila de pré-busca (prefetch) do 8088 foi encurtada para quatro bytes, contra os seis bytes do 8086, e o algoritmo de pré-busca foi ligeiramente modificado para se adaptar ao barramento mais estreito.[a] Essas modificações do design básico do 8086 foram um dos primeiros trabalhos atribuídos ao novo escritório e laboratório de design da Intel em Haifa.

As variantes do 8088 com frequência de clock máxima superior a 5 MHz incluem o 8088-2, que foi fabricado usando o novo processo NMOS aprimorado da Intel chamado HMOS e especificado para uma frequência máxima de 8 MHz. Mais tarde seguiu-se o 80C88, um design CHMOS totalmente estático, que podia operar com velocidades de clock de 0 a 8 MHz. Houve também várias outras variantes, mais ou menos similares, de outros fabricantes. Por exemplo, o NEC V20 era uma variante compatível em termos de pinagem e um pouco mais rápida (na mesma frequência de clock) do 8088, projetada e fabricada pela NEC. Os processadores compatíveis com o NEC 8088 subsequentes chegariam a funcionar a até 16 MHz. Em 1984, a Commodore International assinou um acordo para fabricar o 8088 para uso em um clone licenciado do Dynalogic Hyperion, em um movimento que foi considerado como sinalizador de uma nova grande direção para a empresa.[10] A versão CMOS disponível foi terceirizada para a Oki Electronic Industry Co., Ltd.[11] Quando anunciado, o preço de tabela do 8088 era de US$ 124,80.[12][13] A versão em encapsulamento de plástico foi lançada em julho de 1981 por US$ 14,10. Os preços cotados são para quantidades de 100 unidades.[14] A Intel licenciou este microprocessador para a Fujitsu Limited como fonte secundária (second source).[15]

Diferenças em relação ao 8086

Arquitetonicamente, o 8088 é muito semelhante ao 8086. A principal diferença é que existem apenas oito linhas de dados em vez das 16 do 8086. Todos os outros pinos do dispositivo executam a mesma função que no 8086, com duas exceções. Primeiro, o pino 34 não é mais BHE (esta é a seleção de byte de alta ordem no 8086 — o 8088 não tem um byte de alta ordem em seu barramento de dados de oito bits).[16]:5–97 Em vez disso, ele emite um status de modo máximo, SS0. Combinado com os sinais IO/M e DT/R, os ciclos do barramento podem ser decodificados (geralmente indica quando uma operação de gravação ou uma interrupção está em andamento). A segunda mudança é que o pino que sinaliza se um acesso à memória ou acesso de entrada/saída está sendo feito teve seu sentido invertido. O pino no 8088 é IO/M. No 8086 é IO/M. O motivo da inversão é que isso torna o 8088 compatível com o 8085.[16]:5–98

Desempenho

Dependendo da frequência de clock, do número de estados de espera (wait states) da memória e das características do programa aplicativo em particular, o desempenho médio do Intel 8088 variou aproximadamente de 0,33 a 1 milhão de instruções por segundo (MIPS).[17] Enquanto isso, as instruções mov reg,reg e ALU[b] reg,reg, levando dois e três ciclos respectivamente, renderam um desempenho de pico absoluto entre 13 e 12 MIPS por MHz, ou seja, algo na faixa de 3 a 5 MIPS a 10 MHz.

A velocidade da unidade de execução (EU) e do barramento da CPU 8086 era bem equilibrada; com um conjunto típico de instruções, um 8086 poderia executar instruções da fila de pré-busca (prefetch) em grande parte do tempo. A redução do barramento para oito bits o tornou um sério gargalo no 8088. Com a velocidade de busca de instrução reduzida em 50% no 8088 em comparação com o 8086, uma sequência de instruções rápidas pode drenar rapidamente a fila de pré-busca de quatro bytes. Quando a fila está vazia, as instruções levam tanto tempo para serem concluídas quanto para serem buscadas. Tanto o 8086 quanto o 8088 levam quatro ciclos de clock para concluir um ciclo de barramento; enquanto para o 8086 isso significa quatro clocks para transferir dois bytes, no 8088 são quatro clocks por byte. Portanto, por exemplo, uma instrução de deslocamento ou rotação de dois bytes, que leva apenas dois ciclos de clock para ser executada pela EU, na verdade leva oito ciclos de clock para ser concluída se não estiver na fila de pré-busca. Uma sequência de instruções rápidas como essa impede que a fila seja preenchida tão rápido quanto é drenada e, em geral, como tantas instruções básicas são executadas em menos de quatro clocks por byte de instrução — incluindo quase todas as instruções ALU e de movimentação de dados em operandos de registro e algumas destas em operandos de memória — é praticamente impossível evitar deixar a EU inativa no 8088 pelo menos 14 do tempo durante a execução de programas úteis do mundo real, e não é difícil deixá-la inativa metade do tempo. Em suma, um 8088 normalmente funciona com cerca de metade da velocidade de um 8086 com a mesma taxa de clock, por causa do gargalo do barramento (a única diferença importante).

Um efeito colateral do design do 8088, com o barramento lento e a pequena fila de pré-busca, é que a velocidade de execução do código pode ser muito dependente da ordem das instruções. Ao programar o 8088, para fins de eficiência da CPU, é vital intercalar instruções de execução longa com curtas sempre que possível. Por exemplo, uma operação de string repetida ou um deslocamento por três ou mais levará tempo suficiente para permitir que a fila de pré-busca de 4 bytes seja completamente preenchida. Se instruções curtas (ou seja, aquelas totalizando poucos bytes) forem colocadas entre instruções mais lentas como essas, as curtas poderão ser executadas em velocidade total fora da fila. Se, por outro lado, as instruções lentas forem executadas sequencialmente, uma após a outra, após a primeira delas a unidade de barramento será forçada a ficar ociosa porque a fila já estará cheia, com a consequência de que posteriormente mais instruções mais rápidas sofrerão atrasos de busca que poderiam ter sido evitáveis. Como algumas instruções, como deslocamentos de posição de bit único e rotações, levam literalmente 4 vezes mais tempo para serem buscadas do que para serem executadas,[c] o efeito geral pode ser uma lentidão por um fator de dois ou mais. Se esses segmentos de código forem os corpos de loops (laços de repetição), a diferença no tempo de execução pode ser muito perceptível na escala de tempo humana.

O 8088 também é (como o 8086) lento ao acessar a memória. A mesma ALU que é usada para executar instruções aritméticas e lógicas também é usada para calcular endereços efetivos. Há um somador separado para adicionar um registrador de segmento deslocado ao endereço de deslocamento (offset), mas o endereço efetivo (EA) de deslocamento em si é sempre calculado inteiramente na ALU principal. Além disso, o acoplamento flexível da EU e da BIU (unidade de barramento) insere uma sobrecarga (overhead) de comunicação entre as unidades, e o ciclo de transferência do barramento com período de quatro clocks não é particularmente simplificado. Contraste isso com o ciclo de barramento com período de dois clocks da CPU 6502 e o ciclo de barramento com período de três clocks do 80286, com pipeline reduzido a dois ciclos para a maioria das transferências. A maioria das instruções do 8088 que podem operar em registradores ou memória, incluindo operações comuns de ALU e movimentação de dados, são pelo menos quatro vezes mais lentas para operandos de memória do que apenas para operandos de registrador. Portanto, programas eficientes no 8088 (e 8086) evitam o acesso repetido a operandos de memória quando possível, carregando operandos da memória para os registradores para trabalhar com eles lá e armazenando de volta apenas os resultados finais. O conjunto relativamente grande de registradores gerais do 8088 em comparação com seus contemporâneos auxilia nessa estratégia. Quando não há registradores suficientes para todas as variáveis ​​necessárias de uma vez, salvar registradores empurrando-os (PUSH) para a pilha (stack) e retirando-os (POP) de volta para restaurá-los é a maneira mais rápida de usar a memória para aumentar os registradores, pois as instruções PUSH e POP da pilha são as operações de memória mais rápidas. O mesmo provavelmente não se aplica ao 80186 e posteriores; eles têm ALUs de endereço dedicadas e realizam acessos à memória muito mais rápido que o 8088 e o 8086.

Finalmente, como chamadas (CALL), saltos (JUMP) e interrupções (INTERRUPT) redefinem a fila de pré-busca, e como o carregamento do registrador IP requer comunicação entre a EU e a BIU (uma vez que o registrador IP está na BIU, não na EU, onde estão os registradores gerais), essas operações são custosas. Todos os saltos e chamadas levam pelo menos 15 ciclos de clock. Qualquer salto condicional requer quatro ciclos de clock se não for tomado, mas se for tomado, requer 16 ciclos além da redefinição da fila de pré-busca; portanto, saltos condicionais devem ser organizados para não serem tomados na maior parte do tempo, especialmente dentro de loops. Em alguns casos, uma sequência de operações de lógica e movimento é mais rápida do que um salto condicional que ignora uma ou duas instruções para obter o mesmo resultado.

As fichas técnicas (datasheets) da Intel para o 8086 e 8088 anunciavam as instruções dedicadas de multiplicação e divisão (MUL, IMUL, DIV e IDIV), mas elas são muito lentas, na ordem de 100-200 ciclos de clock cada. Muitas multiplicações simples por constantes pequenas (além das potências de 2, para as quais deslocamentos podem ser usados) podem ser feitas muito mais rápido usando sub-rotinas curtas dedicadas. O 80286 e o 80386 aumentam enormemente a velocidade de execução dessas instruções de multiplicação e divisão.[d]

Escolha para uso no IBM PC

IBM PC

O IBM PC original é o microcomputador mais influente a usar o 8088. Ele possui uma frequência de clock de 4,77 MHz (4/3 da frequência colorburst da cor NTSC). Alguns dos engenheiros da IBM e outros funcionários queriam usar o processador IBM 801, alguns preferiam o novo Motorola 68000,[e] e outros defendiam um microprocessador pequeno e simples, como o MOS 6502 ou o Zilog Z80, que estavam em computadores pessoais anteriores. No entanto, a IBM já tinha um histórico de uso de chips da Intel em seus produtos e também havia adquirido os direitos para fabricar a família 8086.[f]

A IBM escolheu o 8088 em detrimento do 8086 porque a Intel ofereceu um preço melhor pelo primeiro e podia fornecer mais unidades.[18] Outro fator foi que o 8088 permitiu que o computador fosse baseado em um design 8085 modificado, pois ele podia facilmente fazer interface com a maioria dos chips nMOS com barramentos de dados de 8 bits. Estes eram componentes maduros e, portanto, econômicos. Isso incluía CIs originalmente destinados a funções de suporte e periféricos em torno do 8085 e processadores similares (não exclusivamente da Intel), que já eram bem conhecidos por muitos engenheiros, reduzindo ainda mais os custos.[g]

Os descendentes do 8088 incluem o 80188, 80186, 80286, 80386, 80486, e os posteriores processadores compatíveis com o software, incluindo os processadores da linha Intel Core, que são populares atualmente.

Galeria

  1. Amostragem no 4º Trimestre de 1985

Periféricos

  • Intel 8237: controlador de acesso direto à memória (DMA)
  • Intel 8253: temporizador de intervalo programável, 3x 16 bits máx 10 MHz
  • Intel 8255: interface de periférico programável, 3x pinos de E/S de 8 bits usados para conexão de impressora, etc.
  • Intel 8259A: controlador de interrupção programável
  • Intel 8282/8283: latch de 8 bits
  • Intel 8284: gerador de clock
  • Intel 8286/8287: driver bidirecional de 8 bits. Ambas as versões I8286/I8287 (grau industrial) da Intel estavam disponíveis por US$ 16,25 em quantidades de 100.[20]
  • Intel 8288: controlador de barramento
  • Intel 8289: árbitro de barramento
  • Intel 8087: coprocessador matemático

Ver também

Notas

  1. Especificamente, a mudança mais óbvia é que a unidade de barramento do 8088 fará o prefetch de um byte quando puder, se pelo menos um byte da fila estiver vazio; a unidade de barramento do 8086 não fará o prefetch a menos que pelo menos dois dos seis bytes da fila estejam vazios, para que possa fazer o prefetch de uma palavra inteira alinhada de 16 bits, o que faz em um ciclo de barramento. O 8088, tendo um barramento de dados externo de 8 bits, só pode buscar um byte por ciclo de barramento, portanto, esperar para fazer o prefetch de uma palavra inteira não traria nenhum benefício e apenas atrasaria, reduzindo a chance de o próximo byte de instrução já estar na fila de prefetch quando for necessário.
  2. ALU significa uma das instruções ADD, ADC, SUB, SBC, CMP, AND, OR, XOR, TEST.
  3. No 8088, uma instrução de deslocamento com uma contagem de deslocamento implícita de 1, que pode ser executada em dois ciclos de clock, tem dois bytes de comprimento e, portanto, leva oito ciclos de clock para ser buscada.
  4. A maioria das informações técnicas nesta seção foi obtida a partir do Intel iAPX 86,88 User's Manual, Agosto de 1981 (Número de Encomenda: 210201-001) da Intel Corporation.
  5. Usado mais tarde para o Laboratory Computer da IBM Instruments.
  6. Em troca de dar à Intel os direitos de seus designs de memória de bolha. No entanto, devido à forte concorrência de fabricantes japoneses, que conseguiram baratear os custos, a Intel logo deixou este mercado e mudou o foco para os microprocessadores.
  7. Os componentes do 68000 não estavam amplamente disponíveis na época, embora ele pudesse usar componentes do Motorola 6800 até certo ponto.

Referências

  1. «CPU History – Life Cycle of the CPU». cpushack.com
  2. «iAPX 86, iAPX 88 user's manual» (PDF). Consultado em 5 de outubro de 2024
  3. «iAPX 86, 88, 186 Microprocessors Part I, Workshop Notebook» (PDF). Junho de 1984
  4. «iAPX 286 Programmers' Reference Manual» (PDF). 1983. página 1-1
  5. «Microprocessor Quick Reference Guide». Intel. Intel. Consultado em 1 de junho de 2019
  6. «Microprocessor Quick Reference Guide». Intel. Intel. Consultado em 1 de junho de 2019
  7. Singh, Renu (2006). Microprocessor Interfacing and Applications. [S.l.]: New Age International. pp. 2–27. ISBN 81-224-1400-1. Consultado em 1 de junho de 2019
  8. Govindarajalu, B. (2002). IBM PC and Clones: Hardware, Troubleshooting and Maintenance 2ª ed. [S.l.]: McGraw-Hill. 248 páginas. ISBN 978-0-07-048286-9. Consultado em 1 de junho de 2019
  9. Liebson, Steven. «How the Intel 8088 Got Its Bus». Electronic Engineering Journal. Consultado em 4 de novembro de 2025
  10. Cook, Karen (17 de abril – 1 de maio de 1984). «Commodore Adds Hyperion, Chips». PC Magazine. 1 (8). p. 52
  11. Intel Corporation, "NewsBit: Intel Licenses Oki on CMOS Version of Several Products", Solutions, Julho/Agosto de 1984, Página 1.
  12. «Intel Brings Out 8-Bit MPU featuring 16-Bit Architecture». Computerworld. XIII (20). 14 de maio de 1979. p. 71. Consultado em 21 de novembro de 2011
  13. Intel Corporation, "Microcomputer Components: Intel Introduces the 8089 IOP, an I/O processor for the advanced 8088/8086 CPU family, the first of a series of new subsystem components", Intel Preview, Maio/Junho de 1979, Pg 9.
  14. Intel Corporation, "News Bits", Solutions, Julho/Agosto de 1981, Página 1
  15. Intel Corporation, "NewsBits: Second Source News", Solutions, Janeiro/Fevereiro de 1985, Página 1
  16. 1 2 Osborne 16 bit Processor Handbook (Adam Osborne & Gerry Kane) ISBN 0-931988-43-8.
  17. «Olympus MIC-D: Integrated Circuit Gallery - Intel 8088 Microprocessor». Cópia arquivada em 19 de maio de 2009
  18. Freiberger, Paul (23 de agosto de 1982). «Bill Gates, Microsoft and the IBM Personal Computer». InfoWorld. 4 (33). 22 páginas. Consultado em 29 de janeiro de 2015
  19. Ashborn, Jim; "Advanced Packaging: A Little Goes A Long Way", Intel Corporation, Solutions, Janeiro/Fevereiro de 1986, Página 2
  20. 8086 Available for industrial environment, Intel Preview Special Issue: 16-Bit Solutions, Intel Corporation, Maio/Junho de 1980, página 29.

Ligações externas