IA-32 - IA-32
IA-32 (abreviação de " Intel Architecture, 32-bit ", às vezes também chamada de i386 ) é a versão de 32 bits da arquitetura do conjunto de instruções x86 , projetada pela Intel e implementada pela primeira vez no microprocessador 80386 em 1985. IA-32 é a primeira encarnação do x86 que oferece suporte à computação de 32 bits; como resultado, o termo "IA-32" pode ser usado como metonímia para se referir a todas as versões x86 que oferecem suporte à computação de 32 bits.
Dentro de várias diretivas de linguagem de programação , IA-32 ainda é algumas vezes referido como a arquitetura "i386". Em alguns outros contextos, certas iterações do IA-32 ISA às vezes são rotuladas como i486, i586 e i686, referindo-se aos superconjuntos de instruções oferecidos pelas microarquitetura 80486 , P5 e P6, respectivamente. Essas atualizações ofereceram vários acréscimos junto com o conjunto básico IA-32, ou seja, recursos de ponto flutuante e as extensões MMX .
Intel foi historicamente o maior fabricante de processadores IA-32, com o segundo maior fornecedor tendo sido a AMD . Durante a década de 1990, VIA , Transmeta e outros fabricantes de chips também produziram processadores compatíveis com IA-32 (por exemplo, WinChip ). Na era moderna, a Intel ainda produz processadores IA-32 sob a plataforma de microcontrolador Intel Quark ; no entanto, desde os anos 2000, a maioria dos fabricantes (incluindo Intel) mudou quase que exclusivamente para a implementação de CPUs baseadas na variante de 64 bits do x86, x86-64 . x86-64, por especificação, oferece modos de operação legados que operam no IA-32 ISA para compatibilidade com versões anteriores. Mesmo considerando a prevalência contemporânea de x86-64, a partir de 2018, versões de modo protegido IA-32 de muitos sistemas operacionais modernos ainda são mantidas, por exemplo, Microsoft Windows e a distribuição Debian Linux . Apesar do nome IA-32 (e causando alguma confusão potencial), a evolução de 64 bits do x86 que se originou da AMD não seria conhecida como "IA-64", esse nome pertencente à arquitetura Itanium da Intel .
Características arquitetônicas
A principal característica definidora de IA-32 é a disponibilidade de registros de processador de uso geral de 32 bits (por exemplo, EAX e EBX), operações lógicas e aritméticas inteiras de 32 bits, deslocamentos de 32 bits dentro de um segmento no modo protegido e a tradução de endereços segmentados para endereços lineares de 32 bits. Os designers também aproveitaram a oportunidade para fazer outras melhorias. Algumas das mudanças mais significativas são descritas a seguir.
- Capacidade de número inteiro de 32 bits
- Todos os registradores de uso geral (GPRs) são expandidos de 16 bits para 32 bits, e todas as operações aritméticas e lógicas, operações de memória para registro e registro para memória, etc., podem operar diretamente em inteiros de 32 bits. Pushes e pops na pilha são padronizados para passos de 4 bytes e os ponteiros não segmentados têm 4 bytes de largura.
- Modos de endereçamento mais gerais
- Qualquer GPR pode ser usado como um registro base, e qualquer GPR diferente de ESP pode ser usado como um registro de índice, em uma referência de memória. O valor do registro do índice pode ser multiplicado por 1, 2, 4 ou 8 antes de ser adicionado ao valor do registro base e deslocamento.
- Registros de segmento adicionais
- Dois registros de segmento adicionais, FS e GS, são fornecidos.
- Maior espaço de endereço virtual
- A arquitetura IA-32 define um formato de endereço segmentado de 48 bits, com um número de segmento de 16 bits e um deslocamento de 32 bits dentro do segmento. Os endereços segmentados são mapeados para endereços lineares de 32 bits.
- Paginação por demanda
- Os endereços lineares de 32 bits são endereços virtuais em vez de endereços físicos; eles são traduzidos para endereços físicos por meio de uma tabela de páginas . Nos processadores 80386, 80486 e Pentium originais , o endereço físico era de 32 bits; no Pentium Pro e nos processadores posteriores, a Extensão do Endereço Físico permitia endereços físicos de 36 bits, embora o tamanho do endereço linear ainda fosse de 32 bits.
Modos de operação
Modo operacional | Sistema operacional necessário | Tipo de código sendo executado | Tamanho de endereço padrão | Tamanho padrão do operando | Largura típica de GPR |
---|---|---|---|---|---|
Modo protegido | Sistema operacional de 32 bits ou carregador de boot | Código de modo protegido de 32 bits | 32 bits | 32 bits | 32 bits |
Sistema operacional de modo protegido de 16 bits ou carregador de boot ou carregador de boot de 32 bits | Código de modo protegido de 16 bits | 16 bits | 16 bits | 16 ou 32 bits | |
Modo 8086 virtual | Sistema operacional de modo protegido de 16 ou 32 bits | Código de modo real de 16 bits | 16 bits | 16 bits | 16 ou 32 bits |
Modo real | Sistema operacional de modo real de 16 bits ou carregador de boot ou carregador de boot de 32 bits | Código de modo real de 16 bits | 16 bits | 16 bits | 16 ou 32 bits |
Modo irreal | Sistema operacional de modo real de 16 bits ou carregador de boot ou carregador de boot de 32 bits | Código de modo real de 16 bits | 32 bits | 16 bits | 16 ou 32 bits |