Intel 8086 - Intel 8086

Intel 8086
Intel C8086.jpg
Um raro processador Intel C8086 em encapsulamento DIP de cerâmica roxa com pinos soldados laterais
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

Imagem da CPU Intel 8086

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

As atribuições de pinos do 8086 no modo mínimo e máximo

Ô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

Registros Intel 8086
1 9 1 8 1 7 1 6 1 5 1 4 1 3 1 2 1 1 1 0 0 9 0 8 0 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0 (posição do bit)
Registros principais
  AH AL AX (acumulador primário)
  BH BL BX (base, acumulador)
  CH CL CX (contador, acumulador)
  DH DL DX (acumulador, acc estendido)
Registros de índice
0 0 0 0 SI S ource I NDEX
0 0 0 0 DI D destno eu NDEX
0 0 0 0 BP B ase P ointer
0 0 0 0 SP S tack P ointer
Contador de programa
0 0 0 0 IP I nstruction P ointer
Registros de segmento
CS 0 0 0 0 C ode S egment
DS 0 0 0 0 D ATA S egment
ES 0 0 0 0 E xtra S egmento
WL 0 0 0 0 S aderência S egment
Registro de status
  - - - - O D eu T S Z - UMA - P - C Bandeiras

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 immedenter

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 _memcpyque 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 REPinstrução faz com que o seguinte MOVSBse repita até que CX seja zero, incrementando automaticamente SI e DI e diminuindo CX conforme ele se repete. Alternativamente, a MOVSWinstruçã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 REPinstrução se usada como um prefixo in-line para a MOVSBinstrução, como em REP MOVSB.

Esta rotina funcionará corretamente se for interrompida, pois o contador do programa continuará a apontar para a REPinstruçã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

Diagrama de blocos simplificado sobre Intel 8088 (uma variante do 8086); 1 = registradores principais de & index; 2 = registradores de segmento e IP; 3 = somador de endereço; 4 = barramento de endereço interno; 5 = fila de instruções; 6 = unidade de controle (muito simplificado!); 7 = interface de barramento; 8 = barramento de dados interno; 9 = ALU; 10/11/12 = endereço externo / barramento de dados / controle.

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).

Tempos de execução para instruções típicas (em ciclos de clock)
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.

Uma variante de cerâmica D8086
Uma variante de plástico P8086

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).

Clone soviético K1810VM86
OKI M80C86A QFP-56
NEC μPD8086D-2 (8 MHz) do ano 1984, semana 19 JAPÃO (clone do Intel D8086-2)

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

Notas

Referências

links externos