한국   대만   중국   일본 
x86 ? Wikipedia, a enciclopedia livre Saltar para o conteudo

x86

Origem: Wikipedia, a enciclopedia livre.
O Intel 8086.
Intel Core 2 Duo - Um exemplo de aquitetura x86 compativel com processadores multicore de 64-bit.
AMD Athlon (primeira versao) - outra implementacao x86 tecnicamente diferentes, mas totalmente compativel.

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.

Cronologia [ editar | editar codigo-fonte ]

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.

Historia [ editar | editar codigo-fonte ]

Antecedentes [ editar | editar codigo-fonte ]

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.

iAPX 432 e a 80286 [ editar | editar codigo-fonte ]

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

Outros fabricantes [ editar | editar codigo-fonte ]

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.

Extensoes do tamanho de bits [ editar | editar codigo-fonte ]

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.

Resumo [ editar | editar codigo-fonte ]

Propriedades basicas da arquitetura [ editar | editar codigo-fonte ]

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.

Ponto Flutuante e SIMD [ editar | editar codigo-fonte ]

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

As implementacoes atuais [ editar | editar codigo-fonte ]

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.

Registradores [ editar | editar codigo-fonte ]

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)

Registradores de Uso Geral [ editar | editar codigo-fonte ]

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.

Registradores de segmento [ editar | editar codigo-fonte ]

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.

Registro das flags [ editar | editar codigo-fonte ]

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 [ editar | editar codigo-fonte ]

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.

Registradores x86 [ editar | editar codigo-fonte ]

16 bits [ editar | editar codigo-fonte ]

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

32 bits [ editar | editar codigo-fonte ]

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.

64 bits [ editar | editar codigo-fonte ]

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.

Diversas funcionalidades [ editar | editar codigo-fonte ]

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

Segmentacao [ editar | editar codigo-fonte ]

Ver artigo principal: Segmentacao (memoria)

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.

Ver tambem [ editar | editar codigo-fonte ]

Referencias

  1. ≪A Rundown of x86 Processor Architecture - Technical Articles≫ . www.allaboutcircuits.com (em ingles) . Consultado em 4 de dezembro de 2020  
  2. ≪x86overview≫ . cs.lmu.edu . Consultado em 4 de dezembro de 2020