Registradores x86 (32 e 64)
Terminologia de tipos
Alguns nomes de tipos serão usados nesta seção. Estes tipos não nescessáriamente tem um padrão de tamanho entre arquiteturas distintas, então serão definidos alguns tamanhos aqui baseados nos valores mais comuns encontrados na linguagem C de arquiteturas modernas.
- float => single-precision (32 bit)
- double => double-precision (64 bit)
- byte => Inteiro 8 bit
- short => Inteiro 16 bit
- int => Inteiro 32 bit
- long => Inteiro 64 bit
Registradores de uso geral (de 64 bit até 8 bit)
Largura | Acumulador | Base | Contador | Dados | Stack Pointer | Stack Base Pointer | Origem | Destino | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
64 bit | RAX | RBX | RCX | RDX | RSP | RBP | RSI | RDI | |||||||||
32 bit | EAX | EBX | ECX | EDX | ESP | EBP | ESI | EDI | |||||||||
16 bit | AX | BX | CX | DX | SP | BP | SI | DI | |||||||||
8 bit | AH | AL | BH | BL | CH | CL | DH | DL | SPL | BPL | SIL | DIL |
Todos tamanhos de registradores de tamanho inferior a arquitetura são acessíveis. Eles apenas são nomes alternativos para pedaços de suas versões maiores. Abaixo segue um diagrama da faixa de bits que cada nome representa, onde x representa o nome base do registrador (A,B,C,D etc…)
Bits | Nome | |||||||
---|---|---|---|---|---|---|---|---|
Bit N | 63 | … | 0 | |||||
64 | RxX | |||||||
32 | ExX | |||||||
16 | xX | |||||||
8 | xH | xL |
Adicionamente em arquiteturas 64 bit, os registradores R8, R9, R10, R11, R12, R13, R14, R15 estão disponíveis, todos em 64 bit sem equivalentes menores.
Registradores MMX (64 bits) [Intel]
A extensão MMX “introduz” 8 registradores novos denominados MMx. Cada um dos registradores podem ser usados como um número de 64 bits ou
Sub-divisão
Dado | Arquitetura |
---|---|
1 long | MMX |
2 int | MMX |
4 short | MMX |
8 byte | MMX |
Compartilhamento de valores
Na extensão MMX, os registradores são compartilhados com a unidade de ponto flutuante (FPU) x87 dos processadores x86, onde os 64 bits do registrador são usados como parte de uma mantissa de 80 bits da FPU x87. Por isso, operações da FPU podem alterar os valores dos registradores MM assim como instruções MMX podem alterar valores da FPU.
Registradores 3DNow (64 bits) [AMD]
A arquitetura 3DNow foi uma melhoria (versão alternativa) da extensão MMX da Intel, onde além da compatibilidade com as mesmas operações, também adicionava instruções de ponto flutuante usando os mesmos registradores. Desta maneira, caso softwares que usavam a FPU x87 fossem reescritos para o uso de 3DNow, um ganho de performance de até 4x era possível.
Sub-divisão
Dado | Arquitetura |
---|---|
1 long | MMX / 3DNow |
2 int | MMX / 3DNow |
4 short | MMX / 3DNow |
8 byte | MMX / 3DNow |
2 float | 3DNow |
Compartilhamento de valores
Assim como na extensão MMX, os valores eram compartilhados com a FPU x87
Registradores de Media (128 bits) [AMD/Intel]
Nas arquiteturas 64 bit existem 16 registradores de 128 bits nomeados XMMx. Esses registradores são geralmente usados para passagem de parâmetros de ponto flutuante float (32 bit) e double (64 bit). Nas arquiteturas 32 bit apenas os 8 primeiros estão disponíveis.
Foram adicionadas com a extensão SSE nos processadores 32 bit e é usado em operações SIMD (Single-instruction Multiple-data) e podem representar vários tipos de dados:
Sub-divisão
Dado | Arquitetura |
---|---|
4 float | SSE |
2 double | SSE2 |
2 long | SSE2 |
4 int | SSE2 |
8 short | SSE2 |
16 byte | SSE2 |
Registradores AVX (256 bits) [AMD/Intel]
Nos processadores com a extensão AVX os registradores XMM foram expandidos para 256 bits e renomeados para YMM. As suas alternativas SSE ainda são acessíveis (bits 0 a 127). Usando a mesma terminologia da seção anterior, as sub-divisões são:
Dado | Arquitetura |
---|---|
8 float | AVX |
4 double | AVX |
4 long | AVX2 |
8 int | AVX2 |
16 short | AVX2 |
32 byte | AVX2 |
Registradores AVX-512 (512 bits) [Intel]
Em alguns processadores como Xeon-Phi, Core-X, Skylake-X e Xeon-D a Intel implementou uma extensão dos registradores YMM para 512 bits desta vez renomeado para ZMM. Além disso foram adicionados mais 16 registradores para a série, totalizando 32 registradores. Todos os 32 registradores podem ser usados no modo EVEX do AVX-512 nos modos 128, 256 e 512 bits
** TODO **