O microprocessador Intel 8088 ("oitenta e oitenta e oito", também chamado de iAPX 88) é uma variante do Intel 8086. Introduzido em 1º de junho de 1979, 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 thumb|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.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. 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. A versão CMOS disponível foi terceirizada para a Oki Electronic Industry Co., Ltd.Intel Corporation, "NewsBit: Intel Licenses Oki on CMOS Version of Several Products", Solutions, Julho/Agosto de 1984, Página 1. Quando anunciado, o preço de tabela do 8088 era de US$ 124,80.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. 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.Intel Corporation, "News Bits", Solutions, Julho/Agosto de 1981, Página 1 A Intel licenciou este microprocessador para a Fujitsu Limited como fonte secundária (second source).Intel Corporation, "NewsBits: Second Source News", Solutions, Janeiro/Fevereiro de 1985, Página 1

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 (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).Osborne 16 bit Processor Handbook (Adam Osborne & Gerry Kane) . Em vez disso, ele emite um status de modo máximo, . Combinado com os sinais IO/ e DT/, 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/. No 8086 é /M. O motivo da inversão é que isso torna o 8088 compatível com o 8085.

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). Enquanto isso, as instruções mov reg,reg e ALU reg,reg, levando dois e três ciclos respectivamente, renderam um desempenho de pico absoluto entre e 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 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, 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.

Escolha para uso no IBM PC thumb|right|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 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.