Em informatica,
x86
ou
80x86
e o nome generico dada a familia (arquitetura) de
processadores
baseados no Intel 8086, da
Intel Corporation
.
[
1
]
[
2
]
A arquitetura e chamada
x86
porque os primeiros
processadores
desta familia eram identificados somente por numeros terminados com a sequencia "86": o 8086, o
80186
, o
80286
, o
80386
e o
80486
. Como nao se pode ter uma marca registrada sobre numeros, a Intel e a maior parte de seus competidores comecaram a usar nomes que pudessem ser registrados como marca, como
Pentium
para as geracoes de processadores posteriores, mas a antiga nomenclatura tinha forjado um termo para toda a
familia
.
O termo x86 nao e sinonimo de compatibilidade com IBM PC, pois isso sugere uma infinidade de outros hardwares e sistemas embarcados bem como
computadores
usando chips x86 antes do moderno mercado ser compativel com PC, alguns deles antes mesmo do IBM PC em si.
Houve varias tentativas, dentro da
Intel
em si, para quebrar o dominio do mercado da arquitetura x86, que descendia diretamente do simples
microprocessadores
de 8 bits. Exemplos disso sao as iAPX 432 (alias Intel 8800), o Intel 960, Intel 860 e Intel e a arquitetura do Hewlett Packard Itanium. No entanto, o aperfeicoamento continuo de 86 micro arquiteturas, circuitos, e fabricacao de
semicondutores
provaria que e dificil substituir x86 em varios segmentos. O 64, da extensao bit da AMD x86 (que a Intel finalmente respondeu, com um
design
compativel) e a escala de processadores x86, como o eight-core Intel Xeon e 12-core AMD Opteron destaca-se o x86 como um exemplo de continuo aperfeicoamento e como as normas estabelecidas pela
industria
pode resistir a concorrencia das novas arquiteturas.
A tabela abaixo mostra as marcas de processadores e
microprocessadores
na
Hall da Fama
, agrupados por geracoes que destacam pontos importantes na
historia
do x86. Nota: As geracoes de CPU nao sao rigidas, cada geracao e marcada por melhoras significativas ou comercialmente bem sucedidos projetos do processador.
Geracao
|
Introduzido inicialmente em
|
Marcas e Modelos de CPU
|
Linear / Espaco de endereco fisico
|
Novos recursos
|
1
|
1978
|
Intel 8086,
Intel 8088
|
16-bit
/ 20-bit (
segmentados
)
|
Primeiros processadores X86.
|
2
|
1982
|
Intel 80186
,
Intel 80188
,
NEC V20
/V30
|
Hardware para calculos de enderecos rapidos.
|
Intel 80286
|
16-bit
(30-bit
virtual
) / 24-bit (
segmentados
)
|
MMU, para o modo protegido e um maior espaco de endereco.
|
3 (
IA-32
)
|
1985
|
Intel 80386
AMD Am386
|
32-bit
(46-bit
virtual
) / Conjunto de instrucoes com 32-bit, MMU com paginacao.
|
4
|
1989
|
Intel 486 (SX/DS/DX2)
AMD Am486 (SX/SX2/DX/DX2/DX4)
AMD 5x86 (486 DX5)
Cyrix 486 (SX/DX/DX2/DX4)
Cyrix 5x86 (486DX3 e DX5)
|
RISC FPU pipelining, cache integrada, on-chip.
|
5
|
1993
|
Intel Pentium
|
Superscalar, 64-bit databus, faster FPU, MMX.
|
1994
|
NexGen Nx586
|
Inicialmente nao possuia FPU, foi adicionada em modelos posteriores.
|
6
|
1995
|
Pentium Pro
|
|
Execucao Expeculativa, foi substituido pelo Pentium Xeon.
|
5
|
1996
|
AMD K5
, Cyrix 6x86, Rise
mP6
|
como acima
/
36
-bit
Fisico
(PAE)
|
translacao μ-op, PAE Pentium Pro, integrado com cache L2 (Pentium Pro), instrucao de movimentacao condicional.
|
6
|
1997
|
AMD K6
/
-2/3
,
Pentium II
/
III
, IDT/
Centaur
-C6
|
cache L3 suportando, 3DNow, SSE.
|
7
|
1999
|
Athlon
,
Athlon XP
|
superscalar FPU, design wide (
ate tres instrucoes por ciclo de clock
)
|
2000
|
Pentium 4
|
Alta conduta, alta frequencia, SSE2, hyper-threading.
|
6-M/7-M
|
2003
|
Pentium M
,
VIA C7
(2005),
Intel Core
(2006)
|
Otimizados para baixo consumo.
|
8 (
x86-64
)
|
Athlon 64
,
Opteron
|
64-bit
/
40-bit Implementacao fisica do primeiro processador AMD.
|
Conjunto de instrucoes x86-64, controlador de memoria on-die, hypertransport.
|
2004
|
Pentium 4 Prescott
|
Alta contuta, Altissima frequencia, SSE], capacidade de 64 bits esta disponivel somente em soquetes
LGA 775
.
|
9
|
2006
|
Intel Core 2
|
baixo consumo, multi-core, menor frequencia de clock, SSE4 (Penryn)
|
10
|
2007
|
AMD Phenom
|
como acima / 48-bit processador fisico AMD Phenom
|
monolitica quad-core, 128 FPUs bit, SSE4a, HyperTransport 3 ou QuickPath, controlador de memoria nativa, on-die cache L3, design modular.
|
2008
|
Intel Core i3
,
Intel Core i5
,
Intel Core i7
|
Intel Atom
|
Altamente canalisado porem com sua potencia muito baixa.
|
VIA Nano
|
Fora de ordem, superescalar, criptografia baseada em hardware, muito baixa energia, gerenciamento de energia adaptativa.
|
11
|
2010
|
Intel Sandy Bridge, AMD Bulldozer
|
|
SSE5/AVX, design altamente modular.
|
A arquitetura x86 aparece primeiro como o Intel 8086 CPU lancado em 1978, um projeto totalmente de 16 bits baseado na anterior de 8 bits com base 8008, 8080 e 8085. Apesar de nao ser compativeis com o
binario
, ele foi projetado para permitir que programas escritos em
linguagem assembly
serem mecanicamente traduzidos para o conjunto 8086 equivalente. Isso fez com que o novo processador fosse um caminho de migracao tentador, mas nao sem uma remodelagem de
hardware
significativa, principalmente devido ao barramento de dados 16-bit externo. Para resolver isso, a
Intel
lancou o 8088 quase identico, com um barramento de dados externo de 8-bit, o que permitiu o uso de placas de circuito mais simples e exigiu poucas fichas (1-bit de largura) DRAM. O 8088 tambem pode ser conectado ao ja estabelecido (ou seja, de baixo custo) de 8 bits do sistema e
chips
perifericos mais facilmente. Entre outros fatores nao tecnicos, o que contribuiu para o fato de que a
IBM
construisse seu IBM PC usando o 8088, apesar da presenca de microprocessadores de 16 bits da
Motorola
, Zilog, e National Semiconductor. O IBM PC, posteriormente assumiu Z80-based CP/M systems, Apple II, e outros
computadores
populares, e tornou-se um padrao de fato dominante, para computadores pessoais, permitindo assim que os 8088 e os seus sucessores dominassem este ramo importante de microprocessadores no mercado.
Outro fator foi que o
Intel 8800
(alias iAPX 432) nao compativel com 32 bits, falhou no
mercado
na epoca que o IBM-PC foi lancado. O novo e rapido 80286 realmente contribuiu para a decepcao do semi-contemporaneo 8800 no inicio de 1982. (O 80186, lancado em paralelo com o 80286, foi concebido para sistemas embarcados, e, portanto, teve um grande
mercado
de qualquer maneira.) A falha de mercado dos 32 bits 8800, foi um impulso significativo para a Intel continuar desenvolvendo 8086 compativeis mais avancados, como o 80386 (uma extensao de 32 bits do 80286 com bom desempenho).
Por varias vezes, empresas como IBM, NEC, AMD, TI, STM, Fujitsu, OKI, Siemens, Cyrix, Intersil, C & T, NexGen, e a UMC comecaram a fabricacao de processadores x86 destinado a computadores pessoais e de sistemas embarcados. Tais implementacoes x86 raramente sao copias simples, e muitas vezes empregam diferentes microarquiteturas internas, bem como diferentes solucoes ao nivel
eletronico
e
fisico
. Muito naturalmente, os primeiros
chips
compativeis foram de 16 bits, enquanto os projetos de 32 bits apareceram mais tarde. Para o mercado de computadores pessoais, a quantidade real comecou a aparecer por volta de 1990 com o i386 e o i486, processadores compativeis, entao nomeados similarmente como Chip Original
Intel
. Outras empresas, que projetaram ou fabricaram processadores x86 ou x87, foram a ITT Corporation, a National Semiconductor, a ULSI System Technology, e a Weitek.
Apos a pipelined i486, a Intel lancou a marca Pentium para sua nova linha de modelos x86 superescalar. Com o esquema de nomeacao de 86 agora legalmente seguro, a
Intel
fez uma parceria com a IBM para produzir o Cyrix 5x86 e 6x86. Nessa epoca a AMD, estava projetando e fabricando o 5k86, que internamente, foi baseado no
design
da AMD RISC 29K, semelhante ao Nx586 NexGen. A AMD usou uma estrategia em que estagios da pipeline, decodificavam instrucoes x86 e outros manuseios de micro Operacoes, um metodo muito usado como base para o design do x86, da epoca.
Algumas versoes mais antigas desses chips tiveram problemas de dissipacao do
calor
. O 6x86 tambem foi afetado por alguns pequenos problemas de compatibilidade, o Nx586 faltava uma unidade de ponto flutuante (FPU) e a compatibilidade de pinos, enquanto o K5 tinha um desempenho um pouco decepcionante, quando foi lancado. A conscientizacao do cliente para a linha Pentium contribuiu para estes projetos sendo comparativamente melhor, apesar do fato de que o K5 tinha boa compatibilidade com Pentium e 6x86. A AMD conseguiu, mais tarde, estabelecer-se como um grande concorrente com a linha de processadores K6, que deu lugar ao grande sucesso Athlon e Opteron. Houve tambem outros concorrentes, como a Centaur Technology (formerly IDT), a Rise Technology, e a Transmeta. Processadores como o VIA Technologies C3 e C7, que foram projetados pela Centaur, tambem foram vendidos por muitos anos. O mais novo projeto da Centaur, o VIA Nano, e o primeiro processador com a execucao superescalar. Foi interessante, pois foi introduzido na mesma epoca do processador Intel's first "in-order" desde o P5 Pentium, o
Intel
Atom.
A
arquitetura
do conjunto de instrucoes foi prorrogado duas vezes para um tamanho maior. Em 1985, a
Intel
lancou o 32 bits 80386 (ou i386), que gradualmente substituiu o
chip
de 16 bits em computadores. Durante os anos seguintes, este modelo de
programacao
estendida foi originalmente chamado de
arquitetura
i386, mas mais tarde apelidou-se de Intel IA-32, antes da sua versao independente, a arquitetura IA-64. Em 1999-2003, a AMD estendeu essa arquitetura de 32 bits para 64 bits e se refere a ele como x86-64 em documentos antigos e mais tarde como AMD64. a
Intel
logo adotou extensoes da arquitetura da AMD, como o nome IA-32e que foi mais tarde renomeado de Intel EM64T e, finalmente, 64. Entre estes cinco nomes, o original x86-64 e provavelmente o mais utilizado, embora a
Microsoft
e a Sun Microsystems tambem usam o termo x64.
A arquitetura x86 e um comprimento variavel de instrucao, primeiramente sao modelados dois enderecos “CISC” com
enfase
em compatibilidade com versoes anteriores. No entanto o conjunto de instrucoes nao e tipico CISC, mas, basicamente, uma versao estendida e
ortogonal
de simples oito bits, das arquiteturas 8008, 8080 e 8085. O
Byte
de enderecamento e suportado e as palavras sao armazenadas na memoria com ordem de little-endian byte. O acesso a memoria para enderecos desalinhados e permitido em todos os tamanhos de palavras suportadas.
O maior tamanho nativo para
aritmetica
de inteiros e enderecos de memoria (ou deslocamentos) e de 16, 32 ou 64 bits dependendo da geracao da
arquitetura
(processadores mais recentes incluem um suporte direto para inteiros menores tambem). Varios valores escalares podem ser tratados simultaneamente, atraves da unidade SIMD presente em geracoes posteriores, conforme descrito abaixo. Compensacoes imediatas de enderecamento e dados de imediato podem ser expressos em quantidades de 8 bits conforme a frequencia que ocorrem os casos ou contextos em que o
intervalo
de 128 .. 127 e o suficiente. Instrucoes tipicas sao, portanto, de 2 ou 3
bytes
de comprimento (embora alguns sao muito mais longos, e algumas sao de
byte
unico).
Para melhor conservar o espaco de codificacao, a maioria dos registros sao expressos em opcodes usando tres bits, e no maximo um operando em uma instrucao que pode ser um local de memoria (alguns projetos "CISC" altamente
ortogonais
, como o PDP-11, podem utilizar dois). No entanto, esta
memoria
operando tambem pode ser de destinacao (ou a combinacao entre fonte e destinacao), enquanto o outro operando, a fonte, pode ser tanto registrada quanto imediata.
O
numero
relativamente pequeno de registros gerais (tambem herdados de seus antecessores de 8 bits) fez-se enderecamento de registro relativo (usando pequenas compensacoes imediatas) como um importante metodo de acesso a operandos, especialmente na
pilha
. Muito trabalho foi, portanto, investido na
fabricacao
desses acessos de modo tao rapido como registrar os acessos, ou seja, um ciclo de transferencia de instrucao, na maioria dos casos em que os dados acessados estao disponiveis no
cache
de nivel superior.
Um processador de ponto flutuante dedicado com 80 bits de registros internos, o 8087, foi desenvolvido para o original de 8086. Este
chip
foi posteriormente desenvolvido para o estendido 80387 e, mais tarde incorporado a uma versao de processadores compativeis a essa funcionalidade no mesmo
chip
como no processador principal. Alem disso, projetos modernos da x86 tambem incluem uma unidade SIMD em que as instrucoes podem trabalhar em paralelo (uma ou duas) palavras de 128 bits, cada uma contendo 2 ou 4 numeros de ponto flutuante (a cada 64 ou 32 bits de largura, respectivamente), ou, alternativamente, 2, 4, 8 ou 16 numeros inteiros (a cada 64, 32, 16 ou 8 bits de largura, respectivamente).
Os amplos registradores SIMD significam que os processadores existentes x86 podem carregar ou armazenar ate 128 bits de dados de
memoria
em uma unica instrucao e tambem podem executar operacoes bit a bit (embora nao a
aritmetica
de numeros inteiros) sobre as quantidades de 128-bits em paralelo. Planejados
processadores
x86 terao operacoes SIMD de 256 bits (incluindo 256-bit de memoria e armazenamento de carga).
Durante a execucao, processadores x86 atuais empregam uma
decodificacao
extra para dividir a maioria das instrucoes em pedacos menores (micro-operacoes). Estes sao entao entregues a uma unidade de controle que os armazena em buffer e os agenda em conformidade de acordo com a semantica x86, para que possam ser executadas, parcialmente em paralelo, por uma das varias unidades (mais ou menos especializadas) de execucao.
Quando foi introduzida, esta abordagem foi por vezes referida como um "nucleo RISC" ou como "traducao RISC", em parte por razoes de
marketing
, mas tambem porque essas micro-operacoes compartilham algumas propriedades com certos tipos de instrucoes RISC. No entanto, o
microcodigo
tradicional (usado desde a
decada
de 1950) tambem inerentemente compartilha muitas das mesmas propriedades; a nova abordagem difere, principalmente na medida em que a traducao para micro-operacoes agora ocorrem de forma
assincrona
. Nao ter que sincronizar as unidades de execucao com as etapas de decodificacao abre possibilidades para uma analise mais aprofundada do fluxo de codigo (buffer) e, portanto, permite a deteccao de operacoes que podem ser executadas em paralelo, alimentando simultaneamente mais de uma unidade de execucao.
Os mais recentes
processadores
tambem fazem o oposto quando for o caso, pois eles combinam certas sequencias x86 (como uma comparacao seguida de um salto condicional) um processo mais complexo de micro-op, que se encaixa no modelo de execucao melhor e, portanto, pode ser executado mais rapido ou com menos recursos da maquina envolvida.
Outra forma de tentar melhorar o desempenho e o
cache
decodificado de micro-operacoes, de modo que o
processador
pode acessar diretamente o
decodificado
de micro-operacoes a partir de um cache especial, em vez de descodifica-lo novamente. A “Execution Trace Cache” e encontrada na microarquitetura da
Intel
NetBurst (Pentium 4) e ate agora o unico exemplo generalizado desta tecnica.
Transmeta usa um metodo completamente diferente em seus
CPUs
x86 compativeis. Eles usam traducao para converter as instrucoes x86 para instrucoes nativas do
CPU
. Transmeta argumenta que sua abordagem permite projetos de energia mais eficientes, uma vez que a CPU pode abandonar a etapa de
decodificacao
complicada para implementacoes x86 tradicionais.
A
arquitetura
x86 tem 8 registradores de uso geral (General Purpose Registers - GPR), 6 registradores de segmento, 1 registrador de flags e um Apontador de Execucao (Instruction Pointer). (FIXME: no AMD64/EM64T ha mais de 8 GPRs)
Os 8 GPRs, ou Registradores de Uso Geral, sao os seguintes (por ordem de introducao na
pilha
ao executar a instrucao PUSHAD):
- EAX -
Acumulador
. Usado em operacoes
aritmeticas
.
- ECX -
Contador
. Usado em
loops
.
- EDX - Registrador de Dados. Usado em operacoes de entrada/saida e em
multiplicacoes
e
divisoes
. E tambem uma extensao do
Acumulador
.
- EBX - Base. Usado para apontar para dados no segmento DS.
- ESP - Apontador da
Pilha
(Stack Pointer). Aponta para o topo da pilha (endereco mais baixo dos elementos da pilha).
- EBP - Apontador da base do frame. Usado para aceder a argumentos de procedimentos passados pela
pilha
.
- ESI - Indice da fonte de dados a copiar (Source Index). Aponta para dados a copiar para DS:EDI.
- EDI - Indice do destino de dados a copiar (Destination Index). Aponta para o destino dos dados a copiar de DS:ESI.
Estes 8 registradores tem 32 bits cada um e dizem-se Estendidos. Os 16 bits de ordem mais baixa de cada um dos registradores podem ser acedidos atraves das versoes nao estendidas destes. As versoes de 16 bits tem os mesmo nomes que as de 32 bits, com excepcao de a letra E ser retirada (ex: EAX → AX). As
versoes
estendidas dos registradoress nao existem em
geracoes
anteriores a 80386 ― a primeira geracao de
processadores
32 bits da
arquitetura
x86.
As versoes nao estendidas dos quatro primeiros GPRs dividem-se ainda em dois grupos de 8 bits cada um. O octeto (byte) de ordem mais alta e acedido trocando o X por um H (exemplo: AX → AH), e o octeto de ordem mais baixa trocando o X por um L (ex: AX → AL).
Nota: Nos processadores da arquitectura AMD64/EM64T, os GPRs tem 64 bits e pode aceder-se a totalidade dos
bits
atraves dos nomes RAX, RCX, RDX, etc. Adicionalmente, existem ainda mais oito GPRs, de 64 bits cada um. Isto so e valido se o
processador
estiver em Modo Longo.
Ha 6 registradores de segmento.
- CS - Segmento do Codigo
- DS - Segmento de Dados
- ES - Segmento com dados extra
- FS - Segmento com mais dados
- GS - Segmento com ainda mais dados
- SS - Segmento da
Pilha
(Stack)
Os
segmentos
sao uma idiossincrasia da
arquitetura
x86, nao existindo em praticamente mais nenhuma
arquitetura
. Sendo assim, os compiladores de linguagens de alto nivel geralmente optam por ignorar os segmentos. Por essa razao, os sistemas operativos modernos para x86 (incluindo o Windows e o Linux) tipicamente fazem todos os registradores de segmento apontar para o mesmo segmento de 4GB. As excecoes a essa regra sao geralmente o FS e o GS, que sao usados para isolar as seccoes de
dados
das diferentes threads de um mesmo processo. As outras
arquitetura
utilizam registradores especiais chamados registradores de thread para esse efeito, os quais nao existem no x86.
O registrador das flags e chamado EFLAGS (Extended Flags) nas
arquitetura
de 32 bits, sendo a sua versao de 16 bits chamada simplesmente FLAGS. Tal como com os GPRs, os
processador
x86 anteriores ao i386 nao possuem a versao de 32 bits. Nos
processadores
de 64 bits, este registrador tambem tem 64 bits e chama-se RFLAGS.
No esquema abaixo, os 16 bits menos significativos aparecem a
cinza
, enquanto que os bits a azul apenas existem em processadores da geracao do i386 ou posteriores.
31
|
30
|
29
|
28
|
27
|
26
|
25
|
24
|
23
|
22
|
21
|
20
|
19
|
18
|
17
|
16
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
ID
|
VIP
|
VIF
|
AC
|
VM
|
RF
|
|
15
|
14
|
13
|
12
|
11
|
10
|
9
|
8
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
0
|
NT
|
IOPL
|
OF
|
DF
|
IF
|
TF
|
SF
|
ZF
|
0
|
AF
|
0
|
PF
|
1
|
CF
|
Ao carregar um novo valor no EFLAGS, os
bits
que aparecem no esquema como 1 ou 0 devem ser carregados como tal, de modo a preservar a compatibilidade do
software
com geracoes futuras da
arquitetura
.
Note-se que utilizar um metodo convencional para aceder a este registrador produz um erro do montador (assembler), uma vez que o x86 nao fornece nenhuma forma de aceder directamente ao registrador das flags. Para modificar ou ler o eflags e necessario utilizar a instrucao pushf (16 bits) ou pushaf (32 bits).
O apontador de execucao, ou Instruction Pointer (genericamente conhecido na
ciencia da computacao
por Program Counter), do x86 e um registo interno que aponta para a proxima instrucao a ser executada.
O seu nome e EIP e a parte que contem os 16 bits menos significativos denomina-se
IP
. Tal como no caso do registo das flags, nao e possivel utilizar um metodo convencional para aceder ao apontador de Execucao. Ele tem de ser introduzido no stack por meio de uma instrucao call ou semelhante.
O original Intel 8086 e 8088 tem quatorze registros de 16 bits. Quatro deles (AX, BX, CX, DX) sao registradores de proposito geral (GPRS, embora cada um possa ter uma finalidade adicional: por exemplo, apenas CX pode ser usado como um
contador
com a instrucao de
loop
). Cada um pode ser acessado como dois
bytes
separados (dai o byte mais alto BX pode ser acessado como BH e byte baixo como BL). Ha dois registros de ponteiro: SP, que aponta para o topo da
pilha
e da BP (base pointer) que e usado para apontar para algum outro lugar na
pilha
, geralmente acima de variaveis locais. Dois registros (SI e DI) sao para a indexacao de matriz.
Quatro registradores de segmento (CS, DS, SS e ES) sao usados para formar um endereco de memoria. O registrador de flags contem sinalizadores como de proceder com tais flags, overflow de flag e underflow de flag. Finalmente, o ponteiro de instrucao (IP) aponta para a proxima instrucao que sera obtida a partir da memoria e depois executados.
Na Intel 80286, tres registros especiais contem enderecos da tabela descrita (GDTR, LDTR, IDTR), e um registo de quarta tarefa (TR).
Com o advento do
processador
de 32 bits 80386, os registradores de 16 bits, registradores base, registradores de indice, ponteiro de instrucao, e registradores de flag, mas nao os registradores de segmento, foram ampliados para 32 bits. Este e representado por um
prefixo
"E" (para Extended) para registrar os nomes em
linguagem assembly
x86. Assim, o registro AX diferencia o registrador de 16 bits do novo EAX 32-bit, SI corresponde ao menor de 16 bits do ESI, e assim por diante. Os
registradores
de uso geral, registradores de base e registradores de indice podem ser usados como base em modos de enderecamento, e todos os registos, exceto o ponteiro de
pilha
pode ser utilizado como
indice
de enderecamento.
Dois novos registros de segmento (FS e GS) foram adicionados. Com um maior numero de registros, instrucoes e operandos, o formato do binario|codigo de
maquina
foi alargado. Para fornecer compatibilidade com versoes anteriores, os
segmentos
com codigo executavel pode ser marcado como contendo ou 16 bits ou 32 bits de instrucoes. Prefixos especiais permitem a inclusao de instrucoes de 32 bits em um segmento de 16 bits, ou vice-versa.
Com o 80486 uma unidade de processamento de ponto flutuante (FPU) foi adicionada, com oito registros de 80 bits de largura.
Com o Pentium II, oito
registradores
de 64 bits MMX foram adicionados. Com o Pentium III, um de 32 bits Streaming SIMD Extension (SSE) de controle / registrador de status (mxcsr) e oito de 128 bits SSE
registradores
de ponto flutuante (XMM0.. XMM7) foram adicionados [17].
Com o Pentium III, um Streaming SIMD Extension (SSE) de 32 bits, um registrador de controle (MXCSR) e oito registradores SSE de pontos flutuantes de 128 bits (XMM0..XMM7) foram adicionados.
Com o
processador
AMD Opteron, a
arquitetura
x86 estendeu os registradores de 32 bits para registradores de 64 bits de uma forma similar como a extensao de 16 bits para 32 bits foi feita, foram adicionadas oito registradores de 64 bits (R8, R9 R15 ..), entre outras. No entanto, essas extensoes sao apenas utilizaveis em modo de 64 bits. Os modos de enderecamento nao mudaram drasticamente a partir do modo de 32 bits, com excecao que a
resolucao
foi estendida para 64 bits, enderecos
virtuais
foram estendidos para 64 bits, a fim de impedir enderecos
virtuais
que se tem revelado problematicos em outras
arquiteturas
, e mais alguns detalhes foram drasticamente reduzidos.
Processadores
x86 (comecando com o 80386) tambem incluem registradores especiais, tais como registradores de controle (CR0 a 4, CR8 para 64 bits), registradores de
depuracao
(DR0 a 3, mais 6 e 7), os registradores de teste (TR3 atraves 7; apenas 80.486), registradores descritores (GDTR, LDTR, IDTR), um registrador de tarefas (TR), e modelo especifico de
registrador
(MSRs, aparecendo com o Pentium).
Os Minicomputadores durante o final de 1970 estavam em execucao contra o 16-bit com limite de ate 64 KB de endereco. Alguns
microcomputadores
como o PDP-11 utilizavam complexos bancos de
comutacao
de
sistemas
, ou, no caso da Digital VAX, redesenhado processadores muito mais caro que poderia, isso diretamente com enderecamento de 32 bits.O original 8086, desenvolvido a partir do 8085 um
microprocessador
simples e principalmente visado muito pequeno e barato, em vez que registradores de segmento simples o que aumentou a largura de endereco de memoria de apenas 4 bits.
Multiplicando
um endereco de 64 KB por 16, o endereco de 20 bits podera enderecar um total de um
megabyte
(1.048.576 bytes), que foi uma grande quantidade para um pequeno
computador
. O conceito de registradores de segmento nao era nova para mainframes que muitas vezes era usado segmentacao para registar-se e trocar rapidamente as diferentes tarefas. Na pratica, a 86 era (e) uma lamentacao muito criticada, que complicou muito as muitas tarefas comuns de
programacao
e
compiladores
. Mas, como tambem simplificou projeto de hardware e custo, seria a custos competitivos em seus segmentos de mercado dominante. Com o surgimento de padroes como o IBM-PC, os custos de desenvolvimento de
programacao
pode ser espalhado sobre a venda de muitas copias de
software
, e a
arquitetura
acabariam evoluindo para 32 total de memoria e ate mesmo enderecamento de 64 bits por volta do seculo XXI.
Dados e / ou de codigos pode ser administrados dentro de "perto de" nos
segmentos
de 16 bits dentro deste espaco de endereco de 1 MB, ou um
compilador
poderia operar em um modo "more" (muito) com 32 bits de segmento: offset pares alcancar (apenas) 1 MB. Enquanto que tambem pode revelar-se bastante limites em meados da decada de 1980, que estava trabalhando para o
mercado
de PC emergentes e que se tornou muito simples para traduzir o
software
dos antigos 8080, 8085 e Z80 para o novo processador. Em 1985, o modelo de segmento de 16-bit de resolucao foi efetivamente fatorado pela introducao de 32-bit registro offset, no projeto 386.
No modo real, a
segmentacao
e obtida mudando o endereco de segmento deixado por 4 bits e adicionando um deslocamento, a fim de receber um endereco de 20 bits no final. Por exemplo, se o DS e A000h e SI e 5677h, DS: SI vai apontar para o DS endereco absoluto × 10h + SI = A5677h. Assim, o espaco de enderecos em modo real e de 220 bytes, ou 1 MB, uma
figura
bastante impressionante para 1978. Todos enderecos de memoria consistem em um segmento e offset, cada tipo de acesso (codigo, dados ou pilha) tem um
segmento
de registro padrao associado com ele (para os dados do cadastro e geralmente DS, para o codigo e CS, e para a
pilha
e SS). Para acessar os dados, o registrador de segmento pode ser especificado explicitamente (usando um prefixo substituir segmento) para usar qualquer um dos quatro registradores de
segmento
.
Neste
esquema
, dois segmentos de diferentes pares de deslocamento podem apontar em um unico local absoluto. Assim, se o DS e A111h e SI e 4567h, DS: SI vai apontar para o A5677h. Este regime torna impossivel a utilizacao de mais de quatro segmentos de uma vez. CS e SS sao vitais para o funcionamento correto do
programa
, de modo que somente DS e ES pode ser usado para apontar para dados segmentos fora do
programa
(ou, mais precisamente, fora do segmento em execucao atualmente do programa) ou a
pilha
.
No modo protegido, um registrador de segmento, ja nao contem o endereco
fisico
do inicio de um segmento, mas contem um "selector", que aponta para uma estrutura em nivel de sistema chamado de segmento descritor. Um descritor de segmento contem o endereco
fisico
do inicio do segmento, o comprimento do segmento, e permissoes de acesso a esse segmento.
O deslocamento e verificado em relacao ao comprimento do segmento, com deslocamentos referindo-se a localidades fora do segmento que pode causar uma excecao. Compensacoes referindo-se a locais dentro do segmento sao combinados com o endereco
fisico
do inicio do segmento a obter o endereco
fisico
correspondente ao
offset
.
A
segmentacao
da
programacao
e
design
do
compilador
e dificil, pois o uso de ponteiros afeta o desempenho.
Referencias