Intel 8086 - Intel 8086
Informação geral | |
---|---|
Lançado | 1978 |
Interrompido | 1998 |
Fabricante (s) comum (is) | |
atuação | |
Máx. Taxa de clock da CPU | 5 MHz a 10 MHz |
Largura de dados | 16 bits |
Largura do endereço | 20 bits |
Arquitetura e classificação | |
Min. tamanho do recurso | 3 µm |
Conjunto de instruções | x86-16 |
Especificações físicas | |
Transistores | |
Coprocessador | Intel 8087 , Intel 8089 |
Pacote (s) | |
Tomadas) | |
Produtos, modelos, variantes | |
Variante (s) | |
História | |
Antecessor | Intel 8085 |
Sucessor | 80186 e 80286 (ambos introduzidos no início de 1982) |
O 8086 (também chamado de iAPX 86 ) é um chip microprocessador de 16 bits projetado pela Intel entre o início de 1976 e 8 de junho de 1978, quando foi lançado. O Intel 8088 , lançado em 1o de julho de 1979, é um chip ligeiramente modificado com um barramento de dados externo de 8 bits (permitindo o uso de ICs mais baratos e com menos suporte ) e é notável como o processador usado no design original do IBM PC .
O 8086 deu origem à arquitetura x86 , que eventualmente se tornou a linha de processadores de maior sucesso da Intel. Em 5 de junho de 2018, a Intel lançou uma CPU de edição limitada comemorando o 40º aniversário do Intel 8086, chamada Intel Core i7-8086K .
História
Fundo
Em 1972, a Intel lançou o 8008 , o primeiro microprocessador de 8 bits. Ele implementou um conjunto de instruções projetado pela Datapoint corporation com terminais CRT programáveis em mente, que também provou ser de uso geral. O dispositivo precisava de vários ICs adicionais para produzir um computador funcional, em parte devido a ser empacotado em um pequeno "pacote de memória" de 18 pinos, que descartava o uso de um barramento de endereço separado (a Intel era principalmente um fabricante de DRAM na época )
Dois anos depois, a Intel lançou o 8080 , empregando os novos pacotes DIL de 40 pinos originalmente desenvolvidos para CIs de calculadora para permitir um barramento de endereço separado. Ele tem um conjunto de instruções estendido que é compatível com a origem (não compatível com o binário ) com o 8008 e também inclui algumas instruções de 16 bits para tornar a programação mais fácil. O dispositivo 8080 foi eventualmente substituído pelo 8085 (1977) baseado em carga de depleção , que era suficiente com uma única fonte de alimentação de +5 V em vez das três tensões operacionais diferentes dos chips anteriores. Outros microprocessadores de 8 bits bem conhecidos que surgiram durante esses anos são Motorola 6800 (1974), General Instrument PIC16X (1975), MOS Technology 6502 (1975), Zilog Z80 (1976) e Motorola 6809 (1978).
O primeiro design x86
O projeto 8086 começou em maio de 1976 e foi originalmente planejado como um substituto temporário para o ambicioso e atrasado projeto iAPX 432 . Foi uma tentativa de chamar a atenção dos processadores menos atrasados de 16 e 32 bits de outros fabricantes (como Motorola , Zilog e National Semiconductor ) e ao mesmo tempo combater a ameaça do Zilog Z80 (projetado pelo ex Funcionários da Intel), que teve muito sucesso. Tanto a arquitetura quanto o chip físico foram, portanto, desenvolvidos rapidamente por um pequeno grupo de pessoas, e usando os mesmos elementos básicos de microarquitetura e técnicas de implementação física empregadas para o 8085 um pouco mais antigo (e para o qual o 8086 também funcionaria como uma continuação) .
Comercializado como compatível com o código-fonte , o 8086 foi projetado para permitir que a linguagem assembly para 8008, 8080 ou 8085 seja automaticamente convertida em código-fonte 8086 equivalente (subótimo), com pouca ou nenhuma edição manual. O modelo de programação e o conjunto de instruções são (vagamente) baseados no 8080 para tornar isso possível. No entanto, o design do 8086 foi expandido para suportar o processamento total de 16 bits.
Novos tipos de instruções também foram adicionados; suporte total para inteiros assinados, endereçamento de base + deslocamento e operações de auto-repetição eram semelhantes ao design do Z80 , mas foram todos um pouco mais gerais no 8086. As instruções que suportam diretamente linguagens da família ALGOL aninhadas , como Pascal e PL / M também foram adicionado. De acordo com o arquiteto principal Stephen P. Morse , isso foi resultado de uma abordagem mais centrada no software do que no design dos processadores Intel anteriores (os designers tinham experiência em trabalhar com implementações de compiladores). Outros aprimoramentos incluíram instruções microcodificadas de multiplicação e divisão e uma estrutura de barramento melhor adaptada a futuros coprocessadores (como 8087 e 8089 ) e sistemas multiprocessadores.
A primeira revisão do conjunto de instruções e arquitetura de alto nível ficou pronta depois de cerca de três meses e, como quase nenhuma ferramenta CAD foi usada, quatro engenheiros e 12 pessoas de layout trabalharam simultaneamente no chip. O 8086 levou um pouco mais de dois anos desde a ideia até o produto funcionar, o que foi considerado bastante rápido para um design complexo em 1976-1978.
O 8086 foi sequenciado usando uma mistura de lógica aleatória e microcódigo e foi implementado usando circuitos nMOS de carga de depleção com aproximadamente 20.000 transistores ativos (29.000 contando todos os sites ROM e PLA ). Ele logo foi transferido para um novo processo de fabricação nMOS refinado chamado HMOS (para MOS de alto desempenho), que a Intel desenvolveu originalmente para a fabricação de produtos de RAM estática rápida . Em seguida, vieram as versões HMOS-II, HMOS-III e, eventualmente, uma versão CMOS totalmente estática para dispositivos alimentados por bateria, fabricados com os processos CHMOS da Intel . O chip original media 33 mm² e o tamanho mínimo do recurso era de 3,2 μm.
A arquitetura foi definida por Stephen P. Morse com a ajuda de Bruce Ravenel (o arquiteto da década de 8087) no refinamento das revisões finais. O designer lógico Jim McKevitt e John Bayliss foram os engenheiros líderes da equipe de desenvolvimento de hardware e Bill Pohlman, o gerente do projeto. O legado do 8086 é duradouro no conjunto de instruções básicas dos computadores pessoais e servidores de hoje; o 8086 também emprestou seus dois últimos dígitos a versões estendidas posteriores do design, como o Intel 286 e o Intel 386 , que eventualmente ficaram conhecidos como família x86 . (Outra referência é que o ID do fornecedor PCI para dispositivos Intel é 8086 h .)
Detalhes
Ônibus e operação
Todos os registros internos, bem como barramentos de dados internos e externos, têm 16 bits de largura, o que estabeleceu firmemente a identidade de "microprocessador de 16 bits" do 8086. Um barramento de endereço externo de 20 bits fornece um espaço de endereço físico de 1 MB (2 20 = 1.048.576). Este espaço de endereçamento é endereçado por meio da "segmentação" da memória interna. O barramento de dados é multiplexado com o barramento de endereço para caber todas as linhas de controle em um pacote padrão dual em linha de 40 pinos . Ele fornece um barramento de endereço de E / S de 16 bits, suportando 64 KB de espaço de E / S separado. O espaço de endereço linear máximo é limitado a 64 KB, simplesmente porque os registros de endereço / índice internos têm apenas 16 bits de largura. A programação acima dos limites de memória de 64 KB envolve o ajuste dos registradores de segmento (veja abaixo); essa dificuldade existiu até que a arquitetura 80386 introduziu registros mais amplos (32 bits) (o hardware de gerenciamento de memória no 80286 não ajudou nesse aspecto, já que seus registros ainda têm apenas 16 bits de largura).
Modos de hardware
Alguns dos pinos de controle, que transportam sinais essenciais para todas as operações externas, têm mais de uma função, dependendo se o dispositivo é operado no modo mínimo ou máximo . O primeiro modo destina-se a pequenos sistemas com um único processador, enquanto o último é a sistemas médios ou grandes que usam mais de um processador (uma espécie de modo multiprocessador). O modo máximo é necessário ao usar um coprocessador 8087 ou 8089. A tensão no pino 33 (MN / MX ) determina o modo. Mudar o estado do pino 33 muda a função de alguns outros pinos, a maioria dos quais tem a ver com como a CPU lida com o barramento (local). O modo é geralmente conectado ao circuito e, portanto, não pode ser alterado pelo software. O funcionamento desses modos é descrito em termos de diagramas de tempo nas planilhas de dados e manuais da Intel. No modo mínimo, todos os sinais de controle são gerados pelo próprio 8086.
Registros e instruções
|
O 8086 tem oito registros mais ou menos gerais de 16 bits (incluindo o ponteiro da pilha, mas excluindo o ponteiro da instrução, o registrador do sinalizador e os registradores do segmento). Quatro deles, AX, BX, CX, DX, também podem ser acessados com o dobro de registradores de 8 bits (consulte a figura), enquanto os outros quatro, SI, DI, BP, SP, são apenas de 16 bits.
Devido a uma codificação compacta inspirada em processadores de 8 bits, a maioria das instruções são operações de um ou dois endereços, o que significa que o resultado é armazenado em um dos operandos. No máximo um dos operandos pode estar na memória, mas esse operando memória também pode ser o destino , enquanto o outro operando, a origem , pode ser registrador ou imediato . Muitas vezes, um único local de memória também pode ser usado como origem e destino , o que, entre outros fatores, contribui ainda mais para uma densidade de código comparável (e geralmente melhor que) à maioria das máquinas de oito bits da época.
O grau de generalidade da maioria dos registros é muito maior do que no 8080 ou 8085. No entanto, os registros 8086 eram mais especializados do que na maioria dos minicomputadores contemporâneos e também são usados implicitamente por algumas instruções. Embora perfeitamente sensato para o programador de montagem, isso torna a alocação de registro para compiladores mais complicada em comparação com os processadores mais ortogonais de 16 e 32 bits da época, como o PDP-11 , VAX , 68000 , 32016 , etc. Por outro lado , sendo mais regulares do que os microprocessadores de 8 bits bastante minimalistas, mas onipresentes, como 6502 , 6800 , 6809 , 8085 , MCS-48 , 8051 e outras máquinas baseadas em acumulador contemporâneas, é significativamente mais fácil construir um gerador de código eficiente para a arquitetura 8086.
Outro fator para isso é que o 8086 também introduziu algumas instruções novas (não presentes no 8080 e no 8085) para melhor suportar linguagens de programação de alto nível baseadas em pilha, como Pascal e PL / M ; algumas das instruções mais úteis são , e ret tamanho , apoiando o "Pascal convenção de chamada " diretamente. (Vários outros, como e , foram adicionados nos processadores 80186, 80286 e 80386 subsequentes.)
push mem-op
push immed
enter
Uma pilha de 64 KB (um segmento) crescendo em direção a endereços inferiores é suportada no hardware ; Palavras de 16 bits são colocadas na pilha e o topo da pilha é apontado por SS: SP. Existem 256 interrupções , que podem ser invocadas por hardware e software. As interrupções podem ser cascateadas, usando a pilha para armazenar os endereços de retorno .
O 8086 tem 64 K de 8 bits (ou alternativamente 32 K de palavras de 16 bits) de espaço de porta de E / S.
Bandeiras
O 8086 tem um registro de sinalizadores de 16 bits . Nove desses sinalizadores de código de condição estão ativos e indicam o estado atual do processador: Sinalizador de transporte (CF), Sinalizador de paridade (PF), Sinalizador de transporte auxiliar (AF ), Sinalizador zero (ZF), Sinalizador (SF), Trap sinalizador (TF), sinalizador de interrupção (IF), sinalizador de direção (DF) e sinalizador de estouro (OF). Também conhecido como palavra de status, o layout do registro de sinalizadores é o seguinte:
Pedaço | 15-12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Bandeira | DO | DF | E SE | TF | SF | ZF | AF | PF | CF |
Segmentação
Existem também quatro registradores de segmento de 16 bits (veja a figura) que permitem que a CPU do 8086 acesse um megabyte de memória de uma maneira incomum. Em vez de concatenar o registro de segmento com o registro de endereço, como na maioria dos processadores cujo espaço de endereço excede seu tamanho de registro, o 8086 desloca o segmento de 16 bits apenas quatro bits restantes antes de adicioná-lo ao deslocamento de 16 bits (segmento de 16 × + deslocamento ), produzindo, portanto, um endereço externo (ou efetivo ou físico) de 20 bits do segmento de 32 bits: par de deslocamento. Como resultado, cada endereço externo pode ser referido por 2 12 = 4096 pares de segmento: deslocamento diferentes.
0110 1000 1000 0111 0000 | Segmento , | 16 bits, deslocados 4 bits para a esquerda (ou multiplicado por 0x10) |
+ 0011 0100 1010 1001 | Offset , | 16 bits |
0110 1011 1101 0001 1001 | Endereço , | 20 bits |
Embora considerado complicado e incômodo por muitos programadores, esse esquema também tem vantagens; um pequeno programa (menos de 64 KB) pode ser carregado a partir de um deslocamento fixo (como 0000) em seu próprio segmento, evitando a necessidade de realocação , com no máximo 15 bytes de desperdício de alinhamento.
Compiladores para a família 8086 geralmente suportam dois tipos de ponteiro , próximo e distante . Os ponteiros próximos são deslocamentos de 16 bits implicitamente associados ao código do programa ou segmento de dados e, portanto, podem ser usados apenas em partes de um programa pequenas o suficiente para caber em um segmento. Os ponteiros distantes são segmentos de 32 bits: pares de deslocamento resolvendo para endereços externos de 20 bits. Alguns compiladores também suportam ponteiros enormes , que são como ponteiros distantes, exceto que a aritmética de ponteiro em um ponteiro enorme o trata como um ponteiro linear de 20 bits, enquanto a aritmética de ponteiro em um ponteiro distante envolve seu deslocamento de 16 bits sem tocar na parte do segmento do endereço.
Para evitar a necessidade de especificar próximo e distante em vários ponteiros, estruturas de dados e funções, os compiladores também suportam "modelos de memória" que especificam tamanhos de ponteiro padrão. Os modelos minúsculo (máximo de 64 K), pequeno (máximo de 128 K), compacto (dados> 64 K), médio (código> 64 K), grande (código, dados> 64 K) e enorme (matrizes individuais> 64 K) cobrem combinações práticas de quase , far e enormes ponteiros para código e dados. O modelo minúsculo significa que o código e os dados são compartilhados em um único segmento, assim como na maioria dos processadores baseados em 8 bits, e podem ser usados para construir arquivos .com, por exemplo. Bibliotecas pré-compiladas geralmente vêm em várias versões compiladas para diferentes modelos de memória.
De acordo com Morse et al.,. os designers realmente consideraram o uso de um deslocamento de 8 bits (em vez de 4 bits), a fim de criar um espaço de endereço físico de 16 MB. No entanto, como isso teria forçado os segmentos a começarem em limites de 256 bytes, e 1 MB era considerado muito grande para um microprocessador por volta de 1976, a ideia foi descartada. Além disso, não havia pinos suficientes disponíveis em um pacote de 40 pinos de baixo custo para os quatro pinos de barramento de endereço adicionais.
Em princípio, o espaço de endereço da série x86 poderia ter sido estendido em processadores posteriores, aumentando o valor de deslocamento, desde que os aplicativos obtivessem seus segmentos do sistema operacional e não fizessem suposições sobre a equivalência de diferentes segmentos: pares de deslocamento. Na prática, o uso de ponteiros "enormes" e mecanismos semelhantes foi generalizado e o endereçamento plano de 32 bits tornado possível com os registradores de deslocamento de 32 bits no 80386 acabou estendendo o intervalo de endereçamento limitado de uma maneira mais geral (veja abaixo).
A Intel poderia ter decidido implementar a memória em palavras de 16 bits (o que teria eliminado o sinal BHE (Bus High Enable) junto com muitas das complexidades do barramento de endereço já descritas). Isso significaria que todos os dados e códigos de objetos de instrução teriam que ser acessados em unidades de 16 bits. Os usuários do 8080 perceberam há muito tempo, em retrospecto, que o processador faz um uso muito eficiente de sua memória. Por ter um grande número de códigos de objeto de 8 bits, o 8080 produz código de objeto tão compacto quanto alguns dos minicomputadores mais poderosos do mercado na época.
Se o 8086 deve reter códigos de objeto de 8 bits e, portanto, o uso de memória eficiente do 8080, então ele não pode garantir que os opcodes e dados (de 16 bits) ficarão em um limite de endereço de byte ímpar par. O primeiro opcode de 8 bits mudará a próxima instrução de 8 bits para um byte ímpar ou uma instrução de 16 bits para um limite de byte ímpar-par. Ao implementar o sinal BHE e a lógica extra necessária, o 8086 permite que as instruções existam como códigos de objeto de 1 byte, 3 bytes ou qualquer outro byte ímpar.
Simplificando: esta é uma troca. Se o endereçamento da memória for simplificado para que a memória seja acessada apenas em unidades de 16 bits, a memória será usada com menos eficiência. A Intel decidiu tornar a lógica mais complicada, mas o uso da memória mais eficiente. Isso ocorreu em uma época em que o tamanho da memória era consideravelmente menor, e valioso, do que os usuários estão acostumados hoje.
Portando software mais antigo
Programas pequenos podem ignorar a segmentação e usar apenas o endereçamento de 16 bits. Isso permite que o software de 8 bits seja facilmente portado para o 8086. Os autores da maioria das implementações DOS tiraram vantagem disso ao fornecer uma Interface de Programação de Aplicativo muito semelhante ao CP / M , além de incluir o formato de arquivo executável .com simples , idêntico para CP / M. Isso foi importante quando o 8086 e o MS-DOS eram novos, porque permitiu que muitos aplicativos CP / M (e outros) existentes fossem disponibilizados rapidamente, facilitando muito a aceitação da nova plataforma.
Código de exemplo
O seguinte código-fonte do assembler 8086/8088 é para uma sub-rotina chamada _memcpy
que copia um bloco de bytes de dados de um determinado tamanho de um local para outro. O bloco de dados é copiado um byte de cada vez e a movimentação de dados e a lógica de loop utilizam operações de 16 bits.
0000:1000 0000:1000 0000:1000 55 0000:1001 89 E5 0000:1003 06 0000:1004 8B 4E 06 0000:1007 E3 11 0000:1009 8B 76 04 0000:100C 8B 7E 02 0000:100F 1E 0000:1010 07 0000:1011 8A 04 0000:1013 88 05 0000:1015 46 0000:1016 47 0000:1017 49 0000:1018 75 F7 0000:101A 07 0000:101B 5D 0000:101C 29 C0 0000:101E C3 0000:101F |
; _memcpy(dst, src, len)
; Copy a block of memory from one location to another.
;
; Entry stack parameters
; [BP+6] = len, Number of bytes to copy
; [BP+4] = src, Address of source data block
; [BP+2] = dst, Address of target data block
;
; Return registers
; AX = Zero
org 1000h ; Start at 0000:1000h
_memcpy proc
push bp ; Set up the call frame
mov bp,sp
push es ; Save ES
mov cx,[bp+6] ; Set CX = len
jcxz done ; If len = 0, return
mov si,[bp+4] ; Set SI = src
mov di,[bp+2] ; Set DI = dst
push ds ; Set ES = DS
pop es
loop mov al,[si] ; Load AL from [src]
mov [di],al ; Store AL to [dst]
inc si ; Increment src
inc di ; Increment dst
dec cx ; Decrement len
jnz loop ; Repeat the loop
done pop es ; Restore ES
pop bp ; Restore previous call frame
sub ax,ax ; Set AX = 0
ret ; Return
end proc
|
O código acima usa o registrador BP (ponteiro de base) para estabelecer um quadro de chamada , uma área na pilha que contém todos os parâmetros e variáveis locais para a execução da sub-rotina. Este tipo de convenção de chamada suporta código reentrante e recursivo e tem sido usado pela maioria das linguagens do tipo ALGOL desde o final dos anos 1950.
A rotina acima é uma maneira complicada de copiar blocos de dados. O 8086 fornece instruções dedicadas para copiar sequências de bytes. Essas instruções assumem que os dados de origem são armazenados em DS: SI, os dados de destino são armazenados em ES: DI e que o número de elementos a serem copiados é armazenado em CX. A rotina acima requer que a origem e o bloco de destino estejam no mesmo segmento, portanto, o DS é copiado para o ES. A seção de loop acima pode ser substituída por:
0000:1011 FC 0000:1012 F3 0000:1013 A4 |
cld ; Copy towards higher addresses
loop rep ; Repeat until CX = 0
movsb ; Move the data block
|
Isso copia o bloco de dados um byte de cada vez. A REP
instrução faz com que o seguinte MOVSB
se repita até que CX seja zero, incrementando automaticamente SI e DI e diminuindo CX conforme ele se repete. Alternativamente, a MOVSW
instrução pode ser usada para copiar palavras de 16 bits (bytes duplos) de cada vez (nesse caso, CX conta o número de palavras copiadas em vez do número de bytes). A maioria dos montadores reconhecerá corretamente a REP
instrução se usada como um prefixo in-line para a MOVSB
instrução, como em REP MOVSB
.
Esta rotina funcionará corretamente se for interrompida, pois o contador do programa continuará a apontar para a REP
instrução até que a cópia do bloco seja concluída. A cópia, portanto, continuará de onde parou quando a rotina de serviço de interrupção retornar o controle.
atuação
Embora parcialmente obscurecido por outras opções de design neste chip específico, o endereço multiplexado e os barramentos de dados limitam ligeiramente o desempenho; as transferências de quantidades de 16 ou 8 bits são feitas em um ciclo de acesso à memória de quatro clock, que é mais rápido em 16 bits, embora mais lento em quantidades de 8 bits, em comparação com muitas CPUs contemporâneas baseadas em 8 bits. Como as instruções variam de um a seis bytes, a busca e a execução são tornadas simultâneas e desacopladas em unidades separadas (como permanece nos processadores x86 de hoje): A unidade de interface de barramento alimenta o fluxo de instruções para a unidade de execução através de uma fila de pré-busca de 6 bytes ( uma forma de pipelining fracamente acoplado ), acelerando as operações em registradores e imediatos , enquanto as operações de memória tornaram-se mais lentas (quatro anos depois, esse problema de desempenho foi corrigido com o 80186 e o 80286 ). No entanto, a arquitetura de 16 bits completa (em vez de parcial) com uma ALU de largura total significava que as instruções aritméticas de 16 bits agora podiam ser realizadas com um único ciclo de ALU (em vez de dois, via transporte interno, como no 8080 e no 8085) , acelerando consideravelmente essas instruções. Combinado com ortogonalizações de operações versus tipos de operando e modos de endereçamento , bem como outras melhorias, isso tornou o ganho de desempenho em relação ao 8080 ou 8085 bastante significativo, apesar dos casos em que os chips mais antigos podem ser mais rápidos (veja abaixo).
instrução | registrar-registrar | registrar imediatamente | registrar-memória | registro de memória | memória imediata |
---|---|---|---|---|---|
mov | 2 | 4 | 8 + EA | 9 + EA | 10 + EA |
ALU | 3 | 4 | 9 + EA, | 16 + EA, | 17 + EA |
pular | registrar ≥ 11; rótulo ≥ 15; condição, rótulo ≥ 16 | ||||
multiplicação inteira | 70 ~ 160 (dependendo dos dados do operando , bem como do tamanho) incluindo qualquer EA | ||||
divisão inteira | 80 ~ 190 (dependendo dos dados do operando , bem como do tamanho) incluindo qualquer EA |
- EA = tempo para calcular o endereço efetivo, variando de 5 a 12 ciclos.
- Os tempos são os melhores, dependendo do status de pré-busca, alinhamento da instrução e outros fatores.
Como pode ser visto nessas tabelas, as operações em registradores e imediatos foram rápidas (entre 2 e 4 ciclos), enquanto as instruções de operando de memória e saltos foram bastante lentos; os saltos levaram mais ciclos do que no 8080 e 8085 simples , e o 8088 (usado no IBM PC) foi adicionalmente prejudicado por seu barramento mais estreito. As razões pelas quais a maioria das instruções relacionadas à memória eram lentas eram três:
- As unidades de busca e execução fracamente acopladas são eficientes para pré-busca de instruções, mas não para saltos e acesso aleatório a dados (sem medidas especiais).
- Nenhum somador de cálculo de endereço dedicado foi fornecido; as rotinas de microcódigo tiveram que usar a ALU principal para isso (embora houvesse um segmento dedicado + somador de deslocamento ).
- O endereço e os barramentos de dados foram multiplexados , forçando um ciclo de barramento um pouco mais longo (33 ~ 50%) do que nos processadores contemporâneos típicos de 8 bits.
No entanto, o desempenho do acesso à memória foi drasticamente aprimorado com a próxima geração de CPUs da família 8086 da Intel. O 80186 e o 80286 tinham hardware de cálculo de endereço dedicado, economizando muitos ciclos, e o 80286 também tinha endereços separados (não multiplexados) e barramentos de dados.
Ponto flutuante
O 8086/8088 pode ser conectado a um coprocessador matemático para adicionar desempenho de ponto flutuante baseado em hardware / microcódigo . O Intel 8087 foi o coprocessador matemático padrão para 8086 e 8088, operando em números de 80 bits. Fabricantes como Cyrix (compatível com 8087) e Weitek ( não compatível com 8087) eventualmente criaram coprocessadores de ponto flutuante de alto desempenho que competiram com o 8087.
Versões de chip
A frequência do clock foi originalmente limitada a 5 MHz, mas as últimas versões em HMOS foram especificadas para 10 MHz. HMOS-III e CMOS versões foram fabricados por um longo tempo (pelo menos um, enquanto na década de 1990) para sistemas embarcados , embora o seu sucessor, o 80186 / 80188 (que inclui alguns periféricos on-chip), tem sido mais popular para uso incorporado .
O 80C86, a versão CMOS do 8086, foi usado no GRiDPad , Toshiba T1200 , HP 110 e, finalmente, no Lunar Prospector 1998–1999 .
Para a embalagem, o Intel 8086 estava disponível em embalagens DIP de cerâmica e plástico.
Lista de Intel 8086
Número do modelo | Frequência | Tecnologia | Faixa de temperatura | Data de lançamento | Preço (USD) |
---|---|---|---|---|---|
8086 | 5 MHz | HMOS | 0 ° C a 70 ° C | 8 de junho de 1978 | $ 86,65 |
8086-1 | 10 MHz | HMOS II | Comercial | ||
8086-2 | 8 MHz | HMOS II | Comercial | Janeiro / fevereiro de 1980 | $ 200 |
8086-4 | 4 MHz | HMOS | Comercial | $ 72,50 | |
I8086 | 5 MHz | HMOS | Industrial −40 ° C a +85 ° C | Maio / junho de 1980 | $ 173,25 |
M8086 | 5 MHz | HMOS | Grau militar -55 ° C a +125 ° C | ||
80C86 | CMOS |
Derivados e clones
Versões compatíveis - e, em muitos casos, aprimoradas - foram fabricadas pela Fujitsu , Harris / Intersil , OKI , Siemens , Texas Instruments , NEC , Mitsubishi e AMD . Por exemplo, o par NEC V20 e NEC V30 eram compatíveis com hardware com o 8088 e 8086, embora a NEC tenha feito clones originais da Intel μPD8088D e μPD8086D respectivamente, mas incorporou o conjunto de instruções do 80186 junto com alguns (mas não todos) do 80186 aprimoramentos de velocidade, fornecendo uma capacidade imediata para atualizar o conjunto de instruções e a velocidade de processamento sem que os fabricantes precisem modificar seus projetos. Esses processadores compatíveis com 8086 relativamente simples e de baixo consumo em CMOS ainda são usados em sistemas embarcados.
A indústria de eletrônicos da União Soviética foi capaz de replicar a 8086, através tanto de espionagem industrial e engenharia reversa . O chip resultante, K1810VM86 , era binário e compatível com o pino 8086.
i8086 e i8088 foram respectivamente os núcleos dos desktops compatíveis com PC EC1831 e EC1832 de fabricação soviética . (EC1831 é a identificação EC do IZOT 1036C e EC1832 é a identificação EC do IZOT 1037C, desenvolvido e fabricado na Bulgária. EC significa Единая Система.) No entanto, o computador EC1831 (IZOT 1036C) tinha diferenças de hardware significativas em relação ao protótipo do IBM PC . O EC1831 foi o primeiro computador compatível com PC com dimensionamento de barramento dinâmico (US Pat. No 4.831.514). Posteriormente, alguns dos princípios EC1831 foram adotados em PS / 2 (Patente US No. 5.548.786) e algumas outras máquinas (Pedido de Patente no Reino Unido, Publicação No. GB-A-2211325, Publicado em 28 de junho de 1989).
Chips de suporte
- Intel 8237 : controlador de acesso direto à memória (DMA)
- Intel 8251 : receptor / transmissor síncrono / assíncrono universal a 19,2 kbit / s
- Intel 8253 : temporizador de intervalo programável, 3x 16 bits máx. 10 MHz
- Intel 8255 : interface periférica programável, 3 pinos de E / S de 8 bits usados para conexão de impressora, etc.
- Intel 8259 : controlador de interrupção programável
- Intel 8279 : controlador de teclado / tela, verifica uma matriz de teclado e uma matriz de tela como 7-seg
- Intel 8282 / 8283 : 8-bit trava
- Intel 8284 : gerador de relógio
- Intel 8286 / 8287 : motorista de 8 bits bidirecional. Em 1980, ambas as versões Intel I8286 / I8287 (nível industrial) estavam disponíveis por US $ 16,25 em quantidades de 100.
- Intel 8288 : controlador de barramento
- Intel 8289 : árbitro de barramento
- NEC µPD765 ou Intel 8272A : controlador de disquete
Microcomputadores usando o 8086
- A Intel Multibus -Compatível único computador de bordo ISBC 86/12 foi anunciado em 1978.
- O Xerox NoteTaker foi um dos primeiros designs de computador portátil em 1978 e usava três chips 8086 (como CPU, processador gráfico e processador de E / S), mas nunca entrou em produção comercial.
- A Seattle Computer Products despachou sistemas 8086 baseados em barramento S-100 (SCP200B) já em novembro de 1979.
- O Mycron 2000 norueguês , lançado em 1980.
- Um dos microcomputadores mais influentes de todos, o IBM PC , usava o Intel 8088 , uma versão do 8086 com um barramento de dados de 8 bits (como mencionado acima).
- O primeiro Compaq Deskpro usava um 8086 rodando a 7,16 MHz, mas era compatível com placas de expansão projetadas para o IBM PC XT de 4,77 MHz e podia diminuir a velocidade da CPU (que também trocava em um buffer de barramento de memória para simular o Acesso mais lento do 8088) para evitar problemas de sincronização do software.
- Um 8 MHz 8086-2 foi usado no AT&T 6300 PC (construído pela Olivetti e conhecido globalmente por várias marcas e números de modelo), um microcomputador de desktop compatível com IBM PC. O M24 / PC 6300 tem slots de expansão de 8 bits compatíveis com IBM PC / XT, mas alguns deles têm uma extensão proprietária que fornece o barramento de dados de 16 bits completo da CPU 8086 (semelhante em conceito aos slots de 16 bits da IBM PC AT , mas diferente nos detalhes de design e fisicamente incompatível), e todos os periféricos do sistema, incluindo o sistema de vídeo integrado, também desfrutam de transferências de dados de 16 bits. O último Olivetti M24SP apresentou um 8086-2 rodando no máximo de 10 MHz.
- Os modelos 25 e 30 do IBM PS / 2 foram construídos com 8 MHz 8086.
- Os Amstrad PC1512 , PC1640 , PC2086, PC3086 e PC5086 usaram CPUs 8086 a 8 MHz.
- O NEC PC-9801 .
- As máquinas da série Tandy 1000 SL e RL usavam CPUs 8086 de 9,47 MHz.
- A máquina de processamento de texto IBM Displaywriter e o Wang Professional Computer, fabricado pela Wang Laboratories , também usavam o 8086.
- A NASA usou CPUs 8086 originais em equipamentos para manutenção terrestre do Space Shuttle Discovery até o final do programa do ônibus espacial em 2011. Esta decisão foi tomada para evitar a regressão do software que pode resultar da atualização ou da troca para clones imperfeitos.
- Monitores de área e processo KAMAN
Veja também
- Contagem de transistores
- iAPX , para o nome iAPX
Notas
Referências
links externos
- Fichas técnicas da Intel
- Lista de CPUs 8086 e seus clones em CPUworld.com
- Pinouts 8086
- Interface de modo máximo
- O manual do usuário do 8086 Outubro de 1979 INTEL Corporation ( documento PDF )
- Códigos de programa 8086 usando o emulador emu8086 (versão 4.08)
- Emulador Intel 8086/80186 escrito em C, este arquivo é parte de um emulador de PC maior
-
Shirriff, Ken (junho de 2020). "Uma olhada na matriz do processador 8086" .
- - (junho de 2020). "Die Shrink: Como a Intel reduziu a escala do processador 8086" .
- - (julho de 2020). "Os registros do processador Intel 8086: do chip aos transistores" .
- - (agosto de 2020). "Faça engenharia reversa do somador dentro do Intel 8086" .
- - (agosto de 2020). "Faça engenharia reversa da unidade aritmética / lógica do 8086 a partir das fotos" .