A
arquitectura AMD x86-64 estende a conhecida arquitectura x86 introduzindo duas
principais características: extensão para 64 bits designada por long mode, e extensão de registos.
Mode |
Operating System Required |
Application Recompile Required |
Defaults1 |
||||
Address Size (bits) |
Operand Size (bits) |
Register Extensions2 |
GPR Width (bits) |
||||
Long Mode3 |
64-Bit Mode |
New 64-bit OS |
Yes |
64 |
32 |
yes |
64 |
Compatibility Mode |
no |
32 |
no |
32 |
|||
16 |
|||||||
Legacy Mode4 |
Legacy 32-bit or 16-bit OS |
no |
32 |
32 |
no |
32 |
|
16 |
16 |
||||||
1. Defaults can
be overridden in most modes using an instruction prefix or system control
bit. 2. Register extensions
includes eight new GPRs and eight new XMM registers (also called SSE registers). 3. Long mode supports
only x86 protected mode. It does not support x86 real mode or virtual-8086
mode. Also, it does not support task switching. 4. Legacy mode
supports x86 real mode, virtual-8086 mode, and protected mode. |
Long Mode
O
long mode é constituído por dois sub-modos:
o 64-bit mode e o compatibility mode. O compatibility mode suporta compatibilidade
binária com aplicações de 16 e 32 bits, desde que seja usado um sistema operativo
de 64 bits.
Para
além do long mode, a arquitectura
também suporta o puro x86 legacy mode,
que preserva a compatibilidade binária não apenas para as aplicações já existentes
de 16 e 32 bits como também para sistemas operativos já existentes de 16 e 32
bits.
64-Bit Mode
Este
modo suporta as seguintes novas características:
Endereçamento
virtual de 64 bits (as implementações poderão ter menos)
Extensão
de registos segundo um novo prefixo (REX):
·
Adiciona 8 registos GPRs (R8-R15)
·
Alargamento dos registos GPRs para 64 bits
·
Adiciona 8 registos de 128 bits denominados
Streaming SIMD Extension (XMM8-XMM-15)
Instruction pointer de 64 bits (RIP)
Novo RIP
para modo relativo de endereçamento de dados
Espaço de
endereçamento plano com espaço único de código, dados e pilha
O
tamanho de endereços utilizado por defeito é de 64 bits, enquanto que o tamanho
dos operandos é de 32 bits. No entanto, estes valores predefinidos podem ser
alterados num contexto de instrução-por-instrução usando prefixos. Um dos novos
prefixos introduzidos é precisamente o prefixo REX que permite especificar operandos
de 64 bits, bem como os novos registos. O modo é activado pelo sistema operativo
num contexto individual de segmento de código.
As
novas extensões de registos, adicionadas através do prefixo REX, disponibilizam
8 novos GPRs de 64-bit, 8 registos Streaming SIMD Extensions (SSE) de 128 bits,
e aumentam todos os registos GPRs, bem como o instruction pointer, para 64 bits. O prefixo REX também implementa
uma nova capacidade byte-register,
que possibilita que o byte menos significativo de qualquer GPRs seja usado para
operações de bytes. A junção de todos estes factores resulta num conjunto uniforme
de registos para byte, word, dword, qword que se adaptam melhor
à tão necessária operação de alocação de registos
por parte dos compiladores.
Devido
ao facto do modo de 64 bits do processador suportar espaço de endereçamento
virtual de 64 bits, será necessário optar por um sistema operativo também de
64 bits, bem como todo o conjunto de aplicações a utilizar, de forma a tirar
total proveito da máquina em causa.
Extensões de Registos
Para
definir o endereçamento lógico dos registos, a arquitectura AMD x86-64 simplesmente
estende o esquema de endereçamento já utilizado nas instruções de 16 e 32 bits.
A imagem abaixo ilustra este conceito:
·
Para as instruções
de 16 bits, os dois bytes do registo A são endereçados como AX
·
Para as instruções
de 32 bits, os quatro bytes do registo A são endereçados como EAX
·
Para as instruções
de 64 bits, os oito bytes do registo A são endereçados como RAX
No
modo de 64 bits, os registos GPR são estendidos para 64 bits. Os registos de
64 bits são designados por RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP, RIP e RFLAGS.
Os novos registos de 64 bits sobrepõem e estendem os registos que já existiam.
Para além disso, oito novos registos GPR de 64 bits foram adicionados perfazendo
assim um total de dezasseis. Estes registos GPR são designados de R8 a R15.
As
extensões de registos também adicionam oito novos registos streaming
SIMD sendo assim no total dezasseis. Estes novos registos são designados de
XMM8 a XMM15.
Os
registos segment
(ES, DS, FS, GS e SS) são simplesmente ignorados no modo de 64 bits. Ainda assim,
os segmentos de código continuam a existir. O CS é necessário para encapsular
o modo por defeito do processador (modo de 16, 32 ou 64 bits) assim como o nível
de privilégio de execução. Tal como já foi referenciado acima, os bits D e L
são utilizados para especificar o tamanho por defeito dos endereços e dos operandos.
O DPL é utilizado para verificações do privilégio de execução. Os campos de
base e limite são ignorados.
Quando
é realizada alguma operação de 32 bits e o registo de destino é um GPR, o valor
de 32 bits é estendido com zeros de modo a perfazer os 64 bits do GPR. Por outro
lado, as operações de 8 e 16 bits realizadas em GPRs preservam os bits, mais
significativos, que não foram escritos. Deste modo é preservada a semântica
de 16 e 32 bits para os resultados de comprimento parcial. O passo final é simplesmente
definir um conjunto de prefixos de instruções que especifiquem um operando de
64 bits e que permitam o acesso aos novos registos. Este processo é semelhante
ao método utilizado para estender a arquitectura x86 a outras funcionalidades,
como por exemplo a tecnologia AMD 3DNow!TM. Deste modo, a AMD torna
possível que fornecedores, investigadores e outros utilizadores utilizem ferramentas,
aplicações e conhecimentos já existentes, enquanto promove uma transição suave
para as aplicações de 64 bits, à medida que, tanto o hardware como o software,
se vão tornando acessíveis.
Compatibility Mode
O
modo de compatibilidade permite que os sistemas operativos disponham de compatibilidade
binária com as aplicações x86 já existentes de 16 e 32 bits. Assim, este modo
permite que as aplicações sejam corridas, sem necessidade de recompilação, sob
um sistema operativo de 64 bits em long mode. No modo de compatibilidade, as aplicações apenas conseguem
aceder aos primeiros 4GBytes de espaço de endereçamento virtual. Os prefixos
das instruções x86 standards alternam entre endereços e operadores de 16 e 32
bits.
Tal
como no modo de 64 bits, o modo de compatibilidade é activado pelo sistema operativo
num contexto de segmento de código individual. No entanto, ao contrário do modo
de 64 bits, a segmentação x86 funciona normalmente, usando a semântica de modo-protegido
de 16 ou 32 bits. Do ponto de vista das aplicações, o modo de compatibilidade
assemelha-se a um ambiente legacy x86
protected-mode. Do ponto de vista do sistema operativo,
tradução de endereços, tratamento de interrupções e excepções, e estruturas
de dados do sistema usam os mecanismos do long
mode de 64 bits.
Legacy Mode
Quando
LMA for igual a zero, diz-se que o processador está a correr em legacy mode. Neste modo nenhuma das capacidades
relacionadas com os 64 bits está disponível e o processador funciona como um
processador normal x86. O legacy mode
é completamente compatível com as já existentes implementações de 32 bits da
arquitectura x86. Assim, está incluído também o suporte a tecnologias correntes,
como memória segmentada, GPRs de 32 bits e instruction pointer também de 32 bits.