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.

 

Back