Pregunta

¿Dónde puedo encontrar los nombres de los nuevos registros para el montaje de esta arquitectura?

Me refiero a los registros de X86 como EAX, ESP, EBX, etc, pero me gustaría que en 64 bits.

No creo que son los mismos que cuando desmonte mi código C, consigo r en lugar de de correos.

¿Fue útil?

Solución

Los antiguos registros de 32 bits se han extendido a 64 bits, los registros r (rax, rbx, rsp y así sucesivamente).

Además, hay algunos registros de propósito general adicionales r8 través r15 que también se puede acceder como (por ejemplo) r8d, r8w y r8b (la inferior de 32 bits de palabra doble, palabra de 16 bits y bytes de 8 bits, respectivamente ). El sufijo b es la nomenclatura original de AMD, pero a veces se verá que escribe como l (caso L inferior) para "byte bajo".

Yo tiendo a preferir el sufijo b a mí mismo (a pesar de que los registros actuales de baja byte son al, bl, etc.), ya que coincide con los nombres d/w = double/word y l potencialmente podría confundirse con long. O, peor aún, la 1 dígitos, que le conduce a la pregunta lo que el número de registro diablos 81 es: -)

Las altas bytes de los viejos registros de 16 bits siguen siendo accesibles, en muchas circunstancias, como ah, bh, y así sucesivamente (aunque esto parece no ser el caso para el nuevo r8 a través de registros r15). Hay algunos nuevos codificaciones de instrucción, en concreto los que utilizan el prefijo REX, que no pueden acceder a esos bytes altos originales, pero otros siguen libres para usarlos.

Además, hay algunos nuevos registros de la ESS, aunque xmm8 xmm15.

Los registros eip y eflags también se han extendido a rip y rflags (aunque los altos 32 bits de rflags son, por ahora, todavía no se utiliza).

Vea la Wikipedia página y MSDN para más detalles.

Ya sea que éstas son compatibles con la palabra clave asm para un compilador de C en particular, no podría decirlo. Lo poco ensamblaje yo (y se está convirtiendo en aproximadamente un día al año) se realiza en el montaje en lugar de C.


Relacionado:

Otros consejos

El documentación de MSDN incluye información sobre los registros de 64 bits.

  

x64 extiende 8 de propósito general de x64   registros que se han de 64 bits, y añade 8 nuevo   registros de 64 bits. Los registros de 64 bits   tienen nombres que comienzan con "r", por lo que para   ejemplo la extensión de 64 bits de eax es   rax llamada. Los nuevos registros son   r8 llamado a través de R15.

     

Los inferiores 32 bits, 16 bits, y 8 bits   de cada registro son directamente   direccionable en operandos. Esto incluye   registros, como esi, cuyos inferior 8   los bits no eran previamente direccionable.   La siguiente tabla especifica la   nombres en lenguaje ensamblador para el menor   porciones de registros 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 extiende los registros de propósito general de 32 bits como sigue:

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

X64 también añade los siguientes registros de propósito general de 64 bits:

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

Además, SSE es parte de la especificación X64, por lo que los registros vectoriales xmm0-xmm15 están disponibles, así

Puede encontrar algo de información básica sobre la arquitectura en Wikipedia / x86-64 o vaya al sitio web de Intel.

Vamos a leer el manual de Intel

  

¿Dónde puedo encontrar los nombres de los nuevos registros para el montaje de esta arquitectura.

En el manual del procesador "Intel 64 e IA-32 Arquitecturas de Software Manual del desarrollador Volumen 1: Arquitectura básica", por ejemplo, versión 253665-053US :

  • búsqueda de "registros"
  • el primer partido es el índice "3.4 BÁSICO DE EJECUCIÓN DEL PROGRAMA REGISTRO"
  • dos artículos siguientes "3.4.1.1 Registros de uso general en modo de 64 bits"

En esa sección:

  

si se especifica un tamaño del operando de 64 bits: RAX, RBX, RCX,   RDX, RDI, RSI, RBP, RSP, R8-R15 están disponibles. R8d-R   15D / R8-R15 representan ocho nuevos registros de propósito general.

Recordatorio: modo de bit 64 es el modo "normal" en x86-64. El otro modo principal es "modo de compatibilidad" que emula IA32.

Si se mantiene la búsqueda de "registro" en la tabla de contenido, también encontrará secciones sobre "el número de trituración" registros de punto flotante SIMD y dispersos en el manual:

  • 8.1.2 - x87 FPU registros de datos (STX)
  • 9.9.2 - MMX Registros
  • 10.2.2 - Registros XMM
  • 14.1.1 - 256-bit de ancho SIMD Registro Soporte (YMM)

Hay muchos más registros de control que tienen varios efectos secundarios y puede por lo general no pueden escribir a menos que desee esos efectos (ya menudo requerir anillo 0 ). Estos se resumen en "Volumen 3 Guía de programación del Sistema - 2.1.6 Registros del sistema", que es más para los desarrolladores de OS

.

Una buena aproximación empírica es ejecutar info all-registers en GDB: Cómo imprimir registro valores en GDB?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top