Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Uma vis˜ao geral da arquitetura x86-64 e de processadores ..., Notas de aula de Arquitetura

A ISA (instruction set architecture) x86-64, também con- hecido como AMD64, EMT64 e x64 consiste de uma ex- tens˜ao e limpeza da ISA IA32, introduzida pela ...

Tipologia: Notas de aula

2022

Compartilhado em 07/11/2022

Andre_85
Andre_85 🇧🇷

4.5

(124)

218 documentos

1 / 6

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Uma vis˜
ao geral da arquitetura x86-64 e de processadores
que a implementam
Alan Kleiman
RA 041438
ABSTRACT
O prop´osito desse artigo ´e oferecer uma vis˜ao geral das mu-
dan¸cas introduzidas pela ISA x86-64, utilizado nos proces-
sadores Athlon 64 e Pentium 4 com EMT64. Entre as mu-
dan¸cas nessa arquitetura est˜ao altera¸oes no n ´umero de reg-
istradores, que passa a ser 16 registradores de uso geral.
Al´em disso, o umero de registradores XMM (utilizados em
instru¸oes SSE) tamb´em aumentou de 8 para 16. Os reg-
istradores de uso geral passam a ter um comprimento de
64 bits. O mecanismo de endere¸camento tamb´em mudou,
permitindo um espa¸co de endere¸camento de 64 bits, plano
(sem a segmenta¸ao presente na ISA x86). Al´em disso, agora
´e poss´ıvel endere¸car a mem´oria a partir do RIP (ponteiro
de instru¸ao). Outra mudan¸ca que vale mencionar foi a
ado¸ao das instru¸oes SSE e SSE2 como padr˜ao na arquite-
tura, na pr´atica tornando outros mecanismos de ponto flutu-
ante (MMX, x87 FPU, 3DNow!) obsoletos, e aproximando
o tratamento de ponto flutuante ao encontrado em arquite-
turas RISC.
1. INTRODUC¸ ˜
AO
A ISA (instruction set architecture) x86-64, tamb´em con-
hecido como AMD64, EMT64 e x64 consiste de uma ex-
tens˜ao e limpeza da ISA IA32, introduzida pela Intel com
o processador 386. Como o pr´oprio nome indica, ele foi ex-
pandido para trabalhar com dados de 64 bits de largura e
endere¸car 64 bits de mem´oria (embora implementa¸oes at-
uais do processador sejam mais limitadas que isso). Al´em
disso, o umero de registradores foi aumentado: antes eram
8 registradores de uso geral (GPR) e 8 pra instru¸oes Stream-
ing SIMD (XMM). Agora ao 16 registradores de uso geral
e 16 XMM.
Mas al´em dessa expans˜ao foram feitas arias limp ezas de
modo a remover arias das idiossincrasias presentes na ISA
IA32; contanto, devido `a necessidade de se manter a com-
patibilidade essas mudan¸cas apenas est˜ao presentes quando
o processador opera em modo 64 bits.
Dentre essas mudan¸cas est´a o mo delo de mem´oria “achatado”1.
Esse foi implementado devido ao fato de que a maior parte
da segmenta¸ao do espa¸co de endere¸camento em sistemas
modernos ´e feito em software, pelo sistema operacional. Ent˜ao
a mem´oria ´e acessada como um blo co conınuo de 64 bits,
ao contr´ario do que havia nos processadores anteriores, em
que se mantinha um apontador para segmentos de odigo e
dados.
Outra altera¸ao importante ´e que instru¸oes das fam´ılias
SSE (Streaming SIMD Extensions 1/2/3) foram inclusas na
especifica¸ao do processador; devido a esse fato a Microsoft,
no Windows XP x86-64 a preferˆencia `as instru¸oes SSE so-
bre as instru¸oes de outras extens˜oes, como MMX, 3dNow! e
o pr´oprio FPU x87. O sistema operacional simplesmente ao
salva os dados contidos nesses registradores em mudan¸cas de
contexto.
Al´em disso, a arquitetura do x86-64 especifica o bit NX
(No eXecute) como um mecanismo para prevenir erros de
buffer overflow. Consiste de um bit na tabela de aginas
que especifica se os dados em dada tabela podem ou ao
serem executados.
Um coment´ario: esse artigo ao vai tratar de mudan¸cas no
hardware em si, e sim focar no conjunto de instru¸oes e
arquitetura associada desenvolvida pela AMD e depois ado-
tada pela Intel, a ISA x86-64. Portanto detalhes como o
gerenciamento de mem´oria embutida do Athlon 64 ou o au-
mento do umero de est´agios de pipeline adotados nessa
implementa¸ao ao receber˜ao aten¸ao.
2. MODOS DE EXECUC¸ ˜
AO
A arquitetura provˆe dois modos principais de execu¸ao: Long
mode e modo legado. O long mode ´e o modo de execu¸ao
pretendido para o processador; ´e nele que executa o odigo
de 64 bits. Esse modo tem dois submodos: modo de com-
patibilidade, no qual odigo de 32 bits pode ser executado
sem nenhuma perda de desempenho, e modo 64 bits, no
qual executa odigo de 64 bits, como o pr´oprio nome indica.
Vale notar que os outros modos de execu¸ao (modo virtual
e real) ao ao mo dos alidos, enquanto o processador est´a
em long mode apenas odigo do modo protegido pode ser
executado no modo de compatibilidade.
O outro modo de execu¸ao ´e o modo legado; ele executa
como um processador x86, inclusive permitindo executar
1Flat., em inglˆes
pf3
pf4
pf5

Pré-visualização parcial do texto

Baixe Uma vis˜ao geral da arquitetura x86-64 e de processadores ... e outras Notas de aula em PDF para Arquitetura, somente na Docsity!

Uma vis ˜ao geral da arquitetura x86-64 e de processadores

que a implementam

Alan Kleiman

RA 041438

ABSTRACT

O prop´osito desse artigo ´e oferecer uma vis˜ao geral das mu- dan¸cas introduzidas pela ISA x86-64, utilizado nos proces- sadores Athlon 64 e Pentium 4 com EMT64. Entre as mu- dan¸cas nessa arquitetura est˜ao altera¸c˜oes no n´umero de reg- istradores, que passa a ser 16 registradores de uso geral. Al´em disso, o n´umero de registradores XMM (utilizados em instru¸c˜oes SSE) tamb´em aumentou de 8 para 16. Os reg- istradores de uso geral passam a ter um comprimento de 64 bits. O mecanismo de endere¸camento tamb´em mudou, permitindo um espa¸co de endere¸camento de 64 bits, plano (sem a segmenta¸c˜ao presente na ISA x86). Al´em disso, agora ´e poss´ıvel endere¸car a mem´oria a partir do RIP (ponteiro de instru¸c˜ao). Outra mudan¸ca que vale mencionar foi a ado¸c˜ao das instru¸c˜oes SSE e SSE2 como padr˜ao na arquite- tura, na pr´atica tornando outros mecanismos de ponto flutu- ante (MMX, x87 FPU, 3DNow!) obsoletos, e aproximando o tratamento de ponto flutuante ao encontrado em arquite- turas RISC.

1. INTRODUC¸ ˜AO

A ISA (instruction set architecture) x86-64, tamb´em con- hecido como AMD64, EMT64 e x64 consiste de uma ex- tens˜ao e limpeza da ISA IA32, introduzida pela Intel com o processador 386. Como o pr´oprio nome indica, ele foi ex- pandido para trabalhar com dados de 64 bits de largura e endere¸car 64 bits de mem´oria (embora implementa¸c˜oes at- uais do processador sejam mais limitadas que isso). Al´em disso, o n´umero de registradores foi aumentado: antes eram 8 registradores de uso geral (GPR) e 8 pra instru¸c˜oes Stream- ing SIMD (XMM). Agora s˜ao 16 registradores de uso geral e 16 XMM.

Mas al´em dessa expans˜ao foram feitas v´arias limpezas de modo a remover v´arias das idiossincrasias presentes na ISA IA32; contanto, devido `a necessidade de se manter a com- patibilidade essas mudan¸cas apenas est˜ao presentes quando o processador opera em modo 64 bits.

Dentre essas mudan¸cas est´a o modelo de mem´oria “achatado”^1. Esse foi implementado devido ao fato de que a maior parte da segmenta¸c˜ao do espa¸co de endere¸camento em sistemas modernos ´e feito em software, pelo sistema operacional. Ent˜ao a mem´oria ´e acessada como um bloco cont´ınuo de 64 bits, ao contr´ario do que havia nos processadores anteriores, em que se mantinha um apontador para segmentos de c´odigo e dados.

Outra altera¸c˜ao importante ´e que instru¸c˜oes das fam´ılias SSE (Streaming SIMD Extensions 1/2/3) foram inclusas na especifica¸c˜ao do processador; devido a esse fato a Microsoft, no Windows XP x86-64 d´a preferˆencia `as instru¸c˜oes SSE so- bre as instru¸c˜oes de outras extens˜oes, como MMX, 3dNow! e o pr´oprio FPU x87. O sistema operacional simplesmente n˜ao salva os dados contidos nesses registradores em mudan¸cas de contexto.

Al´em disso, a arquitetura do x86-64 especifica o bit NX (No eXecute) como um mecanismo para prevenir erros de buffer overflow. Consiste de um bit na tabela de p´aginas que especifica se os dados em dada tabela podem ou n˜ao serem executados.

Um coment´ario: esse artigo n˜ao vai tratar de mudan¸cas no hardware em si, e sim focar no conjunto de instru¸c˜oes e arquitetura associada desenvolvida pela AMD e depois ado- tada pela Intel, a ISA x86-64. Portanto detalhes como o gerenciamento de mem´oria embutida do Athlon 64 ou o au- mento do n´umero de est´agios de pipeline adotados nessa implementa¸c˜ao n˜ao receber˜ao aten¸c˜ao.

2. MODOS DE EXECUC¸ ˜AO

A arquitetura provˆe dois modos principais de execu¸c˜ao: Long mode e modo legado. O long mode ´e o modo de execu¸c˜ao pretendido para o processador; ´e nele que executa o c´odigo de 64 bits. Esse modo tem dois submodos: modo de com- patibilidade, no qual c´odigo de 32 bits pode ser executado sem nenhuma perda de desempenho, e modo 64 bits, no qual executa c´odigo de 64 bits, como o pr´oprio nome indica. Vale notar que os outros modos de execu¸c˜ao (modo virtual e real) n˜ao s˜ao modos v´alidos, enquanto o processador est´a em long mode — apenas c´odigo do modo protegido pode ser executado no modo de compatibilidade.

O outro modo de execu¸c˜ao ´e o modo legado; ele executa como um processador x86, inclusive permitindo executar (^1) Flat., em inglˆes

c´odigo em modo virtual e real.

Referimos a [2] para detalhes de como cada modo de ex- ecu¸c˜ao ´e acionado. A tabela 2 ilustra os diferentes modos.

Quase todas as mudan¸cas mencionadas nesse artigo se ref- erem ao modo 64 bits, uma vez que os outros modos s˜ao idˆenticos, no n´ıvel da ISA, aos modos presentes nos proces- sadores x86-32. Os long mode pode ser acessado apenas por um sistema operacional de 64 bits, enquanto que o modo legado ´e pretendido para sistemas operacionais mais antigos e programas que precisam executar em 8 ou 16 bits.

Table 1: Modos de opera¸c˜ao do x86- Modo de opera¸c˜ao Sistema operacional Endere¸camento Operando Padr˜ao Modo Submodo Long 64-bit 64-bit 64-bit 32-bit Long Compatibilidade 64-bit 32/16-bit 32/16-bits Legado Protegido 32-bit 32/16-bit 32/16-bit Legado Virtual 32-bit 16-bit 16-bit Legado Real 16-bit 16-bit 16-bit

3. REGISTRADORES

Em modo de 64 bits a ISA x86-64 introduz 16 novos reg- istradores: 8 GPRs, que deixam o n´umero total de GPRs presentes no processador em 16. Os outros 8 registradores s˜ao registradores XMM, reservados para instru¸c˜oes Stream- ing SIMD, tamb´em conhecidos como SSE/SSE2/SSE3. Esse aumento de registradores ajuda a atenuar a falta de reg- istradores presentes na arquitetura x86-32, apesar de que ainda s˜ao significativamente menos registradores do que se encontra em muitas m´aquinas RISC (o MIPS, por exemplo, tem 32).

A extens˜ao dos registradores est´a exibido na figura 1, re- tirado do AMD64 Architecture Programmer’s Manual, Vol- ume 1. Os registradores de uso geral de 32 bits, de EAX a ESP foram aumentados, e seus nomes, quando acessados em 64 bits v˜ao de RAX a RSP. Al´em disso, foram acrescentados novos registradores, que tem nomes de R8 a R15.

Como a figura indica, registradores de tamanho menor (por exemplo, AX para os 16 bits menos significativos de EAX e AL para os 8 bits menos significativos de EAX) podem ser acessados da mesma maneira que eram na arquitetura de 32 bits. Existe uma diferen¸ca, por´em, que ´e o prefixo REX.

O prefixo REX permite um acesso mais consistente aos reg- istradores. Ele informa ao processador qual ser´a o tamanho do operando de uma instru¸c˜ao: se n˜ao for utilizado, os mecanismos de acesso presentes na arquitetura de 32 bits s˜ao utilizados, com a diferen¸ca de que os registradores de 64 bits (Rxx) podem ser acessados. O problema desse m´etodo ´e que ele n˜ao ´e consistente. Apenas os registradores AX, BX, CX e DX podem ter os seus 8 bits mais e menos significativos acessados. Utilizando os prefixos REX podemos acessar os 8, 16, 32 ou 64 bits menos significativos de qualquer proces- sador. Perdemos a habilidade de acessar os registradores AH a DH, mas em troca o mecanismo se torna mais consistente — o que pode ser muito importante para o desenvolvimento de um compilador eficiente.

Vale notar que na maioria dos casos as instru¸c˜oes tem 32 bits de largura, como padr˜ao. Para efetuar opera¸c˜oes sobre os registradores de 64 bits de largura ´e necess´ario utilizar um

Figure 1: Os registradores presentes na arquitetura de 64 bits

prefixo REX. Vamos ver outros detalhes sobre os prefixos REX na subse¸c˜ao 5.1, quando tratarmos dos formatos de instru¸c˜ao utilizados pelo x86-64.

4. ENDEREC¸ AMENTO E ORGANIZAC¸ ˜AO

DA MEM ´ORIA

Como mencionado anteriormente, no modo 64-bits o mod- elo de endere¸camento ´e “achatado”. A mem´oria virtual ´e vista como um bloco sem quebras de 64 bits, que ´e ma- peada para o n´umero correspondente de bits da mem´oria real. No momento da escrita desse artigo, a mem´oria real tinha 52 bits. O mecanismo de segmenta¸c˜ao est´a ilustrado na figura 2. Embora os registradores de segmento ainda existem no modo 64-bits, o endere¸co contido nos mesmos ´e tratado como sendo 0 na maioria dos casos pra efeito de c´alculo de endere¸camento.

A raz˜ao dessa mudan¸ca ´e que em sistemas operacionais mod- ernos o espa¸co de endere¸camento j´a ´e visto como um bloco cont´ıguo achatado e a segmenta¸c˜ao ´e desempenhada total- mente em software. Isso permite que sistemas operacionais de 64 bits sejam codificados de uma maneira mais simples, e permite um manejamento mais simples de um ambiente multiprogramado do que era poss´ıvel na arquitetura x86-32.

Embora o espa¸co de endere¸camento ´e visto como um bloco cont´ıguo, algumas caracter´ısticas de segmenta¸c˜ao do x86- ainda persistem. Ainda s˜ao utilizados segmentos de c´odigo

Figure 4: C´alculo de endere¸co complexo.

Instru¸c˜oes que cont´em endere¸cos de 32 e 16 bits e est˜ao sendo executados em long mode s˜ao expandidos para endere¸cos de 64 bits da seguinte forma: os valores s˜ao truncados para o n´umero correto de bits (32 ou 16) e ent˜ao s˜ao extendidos com 0s at´e completar os 64 bits. Dessa forma, um aplicativo de 16 ou 32 bits executando em modo de compatiblidade pode apenas acessar os 4 Gigabytes mais baixos do espa¸co de 64 bits. Da mesma forma, um endere¸co de 32 bits gerado em modo 64-bits pode apenas acessar os 4 Gigabytes mais baixos.

Al´em disso, o maior valor para um imediato ou desloca- mento na arquitetura de 64 bits ´e de 32 bits. Dependendo da instru¸c˜ao e do endere¸camento, um imediato ou desloca- mento pode ter 8, 16 ou 32 bits. No modo de 64-bits deslo- camentos s˜ao extendidos para 64-bits, como mencionado acima. Por´em para efeito de representa¸c˜ao o m´aximo con- tinua sendo 32 bits. O mesmo vale para instru¸c˜oes imedi- atas. Contanto, existem algumas exce¸c˜oes: alguns formatos da instru¸c˜ao MOV podem acessar mais do que 32 bits.

5. INSTRUC¸ ˜OES DE USO GERAL

A arquitetura x86-64 adota, na grande maioria, todas as in- stru¸c˜oes presentes na arquitetura de 32 bits, com extens˜oes que permitem acesso a operandos e endere¸cos de mem´oria de 64 bits, como seria de se esperar. Contanto, algumas in- stru¸c˜oes que fazem parte da ISA x86-32 n˜ao fazem parte da arquitetura de 64 bits. Em particular, as instru¸c˜oes mais idiosincr´aticas n˜ao fazem mais parte da arquitetura, como por exemplo as instru¸c˜oes que lidam com valores BCD (Binary-coded Decimal) ou valores ASCII. Al´em disso, in- stru¸c˜oes de jump ou branch “longes” de maneira direta n˜ao s˜ao mais instru¸c˜oes v´alidas. Instru¸c˜oes que inserem ou re- movem os registradores de segmento da pilha tamb´em pas- sam a n˜ao ser mais v´alidos. As instru¸c˜oes para chamadas de sistema tamb´em mudou: as instru¸c˜oes SYSENTER e SY- SEXIT n˜ao s˜ao mais v´alidas: SYSCALL e SYSRET devem ser usadas no seu lugar.

Como mencionado anteriormente, instru¸c˜oes utilizam operan- dos de 32 bits como padr˜ao, esse comportamento podendo ser alterado pela utiliza¸c˜ao de um prefixo REX. J´a algumas instru¸c˜oes n˜ao precisam de um prefixo REX para operar sobre valores de 64 bits. Instru¸c˜oes de branch em particu- lar operam automaticamente com valores de 64 bits; como

dito na se¸c˜ao anterior, o valor m´aximo para um imediato ´e de 32 bits, portanto para acessar posi¸c˜oes mais distantes ´e necess´ario fazer um acesso indireto – atrav´es de uma posi¸c˜ao em mem´oria.

N˜ao vamos entrar em detalhes quanto `as instru¸c˜oes alter- adas por quest˜oes de espa¸co. Referimos ao manual de pro- grama¸c˜ao de aplicativos[1] e ao manual de instru¸c˜oes de uso geral e de sistema[3] para mais detalhes.

Como indicado na figura 1 opera¸c˜oes feitas sobre valores de 32 bits s˜ao extendidos para 0; ou seja, os 32 bits mais significativos dos registradores recebem o valor 0. Isso ´e diferente do que acontece com instru¸c˜oes que manipulam os registradores de 8 ou 16 bits. Nesses casos, os bits mais signi- ficativos n˜ao s˜ao alterados pela instru¸c˜ao. Isso ´e consistente com a opera¸c˜ao em 32 bits, na qual manipula¸c˜ao dos reg- istradores de 8 e 16 bits n˜ao alterava o resto do registrador. Vale notar, inclusive, que os 32 bits mais significativos n˜ao s˜ao preservados durante mudan¸cas de contexto, para modo de compatibilidade ou legado.

Como na arquitetura de 32 bits, v´arios dos registradores tem fun¸c˜oes impl´ıcitas. Por exemplo, durante multiplica¸c˜ao e divis˜ao os registradores RAX e RDX s˜ao utilizados jun- tos como operandos ou para armazenar os valores resul- tantes. O registrador RCX ´e utilizado em opera¸c˜oes de la¸co e os registradores RBP e RSP s˜ao os registradores de pilha. Isso apesar de que os registradores s˜ao supostamente de uso geral. N˜ao vamos mencionar cada um dos usos impl´ıcitos de registradores; inv´es disso referimos `a [1].

O registrador EFLAGS, utilizado na arquitetura de 32 bits foi ampliado para o registrador RFLAGS, apesar de que a arquitetura x86-64 n˜ao adicionou nenhum flag novo. Os 32 bits mais significantes de RFLAGS no momento est˜ao reservados, e o sistema garante que qualquer leitura deles, no momento, retornar´a 0. Novamente, n˜ao iremos entrar em detalhes e referimos a [1, 4].

A arquitetura oferece duas instru¸c˜oes para chamada de c´odigo privilegiado: SYSCALL e SYSRET. As instru¸c˜oes con- tam com o fato de que o espa¸co de endere¸camento vai ser plano, e dispensam v´arias checagens adicionais, al´em de car- regarem valores pr´e-determinados nos segmentos apropria- dos, como endere¸cos das chamadas. Essas chamadas con- seguem executar em um quarto dos ciclos que levariam as instru¸c˜oes CALL e RET. As instru¸c˜oes SYSENTER e SYSEXIT tamb´em executam com baixa latˆencia, mas s˜ao opera¸c˜oes proibidas em modo de 64 bits.

5.1 Formato de instruc¸ ˜ao e o prefixo REX

O formato da instru¸c˜ao na arquitetura x86-64 ´e o mesmo da arquitetura de 32 bits: instru¸c˜oes podem ter de 1 a 15 bytes, com um prefixo de at´e 4 bytes, um opcode de at´e 3 bytes, seguido pelo byte ModR/M, o byte SIB, o deslocamento de at´e 4 bytes e um valor imediato, tamb´em de 4 bytes. Todas os argumentos s˜ao opcionais, com exce¸c˜ao do opcode. O arranjo da instru¸c˜ao pode ser visto na figura 5[5].

Mesmo em modo 64-bits, sem um prefixo REX a maioria das instru¸c˜oes n˜ao pode acessar mais do que os 8 registradores da arquitetura x86-32, e n˜ao consegue acessar dados com

Figure 5: Formato de instru¸c˜ao na arquitetura x86-

largura maior que 32 bits. Em contrapartida, como men- cionado anteriormente, sem o bit REX ´e poss´ıvel acessar os bytes altos dos registradores AX a DX.

O prefixo REX tem o prop´osito de permitir n˜ao apenas que 16 registradores de uso geral sejam acessados, mas que seus operandos tenham 16 bits. Como dito anteriormente ele garante que todos os registradores possam ser acessados de maneira uniforme, a um pequeno custo de flexibilidade. Em- bora n˜ao ´e poss´ıvel acessar os bytes altos dos registradores AX a DX, ´e poss´ıvel acessar os bytes baixos de cada um dos registradores de uso geral, o que antes n˜ao era poss´ıvel. A especifica¸c˜ao de acesso de registradores menores que 64 bits ´e idˆentico ao da arquitetura x86-32.

Na tabela 5.1 vemos os bits do prefixo REX, e na figura 6 vemos exemplos do uso do prefixo no endere¸camento de instru¸c˜oes, retirados de [3]. Referimos a esse texto para mais detalhes.

5.2 Instruc¸ ˜oes de ponto flutuante

A arquitetura x86-64 oferece trˆes maneiras de operar so- bre dados de ponto flutuante. Uma pelas instru¸c˜oes SSE (Streaming SIMD^3 Extension), pelas instru¸c˜oes multim´ıdia de 64 bits (3dNow!, MMX) e pelas instru¸c˜oes de ponto flutu- ante x87. Embora a funcionalidade seja replicada, a pr´opria descri¸c˜ao da arquitetura recomenda que as instru¸c˜oes SSE

(^3) Single Instruction Multiple Data

Mnemˆonico Posi¸c˜ao Defini¸c˜ao

  • 7-4 0100 REX.W 3 0=Tamanho de operando padr˜ao 1=Tamanho de operando de 64 bits REX.R 2 1=Extens˜ao do campo reg do byte ModR/M, permitindo acesso a 16 registradores REX.X 1 1=Extens˜ao do campo index do byte SIB, permitindo acesso a 16 registradores REX.X 0 1=Extens˜ao do campo r/m do byte ModR/M, permitindo acesso a 16 registradores

Table 2: Os bits do prefixo REX.

Figure 6: Exemplos do uso do prefixo REX em modo 64-bits.