Pergunta

Onde posso encontrar os nomes dos novos registros para a montagem sobre essa arquitetura?

Eu estou me referindo aos registos em X86 como EAX, controlo electrónico de VELOCIDADE, EBX, etc.Mas eu gostaria de 64 bits.

Eu não acho que eles são o mesmo como quando eu desmontar meu código C, recebo r em vez da de e do.

Foi útil?

Solução

Os antigos registros de 32 bits foram estendidos a 64 bits, o r registros (rax, rbx, rsp e assim por diante).

Além disso, existem alguns registros de fins gerais extras r8 Através dos r15 que também pode ser acessado como (por exemplo) r8d, r8w e r8b (o menor palavra de 32 bits, palavras de 16 bits e byte de 8 bits, respectivamente). o b Sufixo é a nomenclatura original da AMD, mas às vezes você verá escrito como l (minúscula L) para "BOW BYTE".

Eu tendem a preferir o b sufixo eu mesmo (mesmo que os atuais registros de bytes baixos sejam al, bl, e assim por diante), pois corresponde ao d/w = double/word nomes e l poderia ser potencialmente confundido com long. Ou, pior, o dígito 1, levando você a questionar o que o número do registro do Heck 81 é :-)

Os bytes altos dos antigos registros de 16 bits ainda estão acessíveis, em muitas circunstâncias, como ah, bh, e assim por diante (embora este pareça não ser o caso do novo r8 Através dos r15 registros). Existem alguns novos codificações de instrução, especificamente aqueles que usam o REX Prefixo, que não pode acessar esses bytes altos originais, mas outros ainda são livres para usá -los.

Além disso, existem alguns novos registros SSE, xmm8 no entanto xmm15.

o eip e eflags Os registros também foram estendidos a rip e rflags(embora os 32 bits altos de rflags são, por enquanto, ainda não utilizados).

Veja o Página da Wikipedia e Msdn para mais detalhes.

Se estes são suportados no asm Palavra -chave para um compilador C específico, eu não poderia dizer. Que pequena montagem eu faço (e está se tornando um dia por ano) é feita na Assembléia, em vez de C.


Relacionado:

Outras dicas

O Documentação do MSDN inclui informações sobre o x 64 registradores.

x64 estende x64 do 8 de propósito geral registradores de 64 bits, e adiciona 8 novos Registradores de 64 bits.Os registradores de 64 bits tem nomes que começam com "r", portanto, para exemplo a extensão de 64 bits eax chamado de rax.Os novos registros são nome r8 através de r15.

O menor de 32 bits, 16 bits e 8 bits de cada registro são diretamente endereçável nos operandos.Isso inclui registra, como esi, cuja menor de 8 bits não foram anteriormente endereçável.A tabela a seguir especifica o assembly-linguagem de nomes para baixo porções de registradores de 64 bits.

64-bit register | Lower 32 bits | Lower 16 bits | Lower 8 bits
==============================================================
rax             | eax           | ax            | al
rbx             | ebx           | bx            | bl
rcx             | ecx           | cx            | cl
rdx             | edx           | dx            | dl
rsi             | esi           | si            | sil
rdi             | edi           | di            | dil
rbp             | ebp           | bp            | bpl
rsp             | esp           | sp            | spl
r8              | r8d           | r8w           | r8b
r9              | r9d           | r9w           | r9b
r10             | r10d          | r10w          | r10b
r11             | r11d          | r11w          | r11b
r12             | r12d          | r12w          | r12b
r13             | r13d          | r13w          | r13b
r14             | r14d          | r14w          | r14b
r15             | r15d          | r15w          | r15b

X64 estende os registros de fins gerais de 32 bits da seguinte forma:

EAX -> RAX
EBX -> RBX
ECX -> RCX
EDX -> RDX
ESI -> RSI
EDI -> RDI
ESP -> RSP
EBP -> RBP

X64 também adiciona os seguintes registros de fins gerais de 64 bits:

R8, R9, R10, R11, R12, R13, R14, R15

Além disso, o SSE faz parte da especificação X64, portanto os registros vetoriais XMM0-XMM15 também estão disponíveis

Você pode encontrar algumas informações básicas sobre a arquitetura em Wikipedia/x86-64 Ou vá para o site da Intel.

Vamos ler o manual da Intel

Onde posso encontrar os nomes dos novos registros para montagem nesta arquitetura.

No manual do processador "Intel 64 e IA-32 Architecture Developer's Manual Volume 1: Basic Architecture", por exemplo, Versão 253665-053US:

  • Pesquise por "Registros"
  • A primeira partida é o índice "3.4 Registro de Execução do Programa Básico"
  • Dois itens abaixo de "3.4.1.1 registros de uso geral no modo de 64 bits"

Naquela seção:

Se um tamanho de operando de 64 bits for especificado: RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP, R8-R15 estão disponíveis. R8D-R 15D/R8-R15 representa oito novos registros de uso geral.

Lembrete: o modo de 64 bits é o modo "normal" em x86-64. O outro modo principal é o "modo de compatibilidade", que emula o IA32.

Se você continuar procurando por "Registrar" no TOC, também encontrará seções sobre registros de "esmagamento numérico" para o ponto flutuante e o SIMD espalhado no manual:

  • 8.1.2 - x87 Registros de dados da FPU (STX)
  • 9.9.2 - registros MMX
  • 10.2.2 - registros XMM
  • 14.1.1 - 256 bits SIMD Register Suporte (YMM)

Existem muito mais registros de controle que têm vários efeitos colaterais e geralmente não podem ser escritos, a menos que você queira esses efeitos (e geralmente requer anel 0). Estes estão resumidos no "Guia de programação do sistema Volume 3 - 2.1.6 Registros do sistema", que é mais para desenvolvedores de SO.

Uma boa abordagem empírica é correr info all-registers no GDB: Como imprimir valores de registro no GDB?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top