segmento registros registro que proposito procesador microcontroladores memorias general computadoras computadora banderas arquitectura assembly x86 x86-64

assembly - que - registros del procesador



¿Cuáles son los nombres de los nuevos registros de procesadores X86_64? (4)

¿Dónde puedo encontrar los nombres de los nuevos registros para ensamblar en esta arquitectura?

Me refiero a registros en X86 como EAX, ESP, EBX, etc. Pero me gustaría tenerlos en 64 bits.

No creo que sean iguales a cuando desarmo mi código C, obtengo r''s en lugar de e.


¿Dónde puedo encontrar los nombres de los nuevos registros para ensamblar en esta arquitectura?

En el manual del procesador "Intel 64 y IA-32 Architectures Software Manual de desarrollador Volumen 1: Arquitectura básica", p. Ej., La versión 253665-053US :

  • buscar "registros"
  • el primer partido es el índice "3.4 REGISTRO DE EJECUCIÓN BÁSICA DEL PROGRAMA"
  • dos puntos debajo de "3.4.1.1 Registros de propósito general en modo de 64 bits"

En esa sección:

si se especifica un tamaño de 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: el modo de 64 bits es el modo "normal" en x86-64. El otro modo principal es el "modo de compatibilidad" que emula IA32.

Si continúa buscando "registrarse" en el TOC, también encontrará secciones en los registros de "trituración numérica" ​​para coma flotante y SIMD dispersos en el manual:

  • 8.1.2 - Registros de datos de FPU x87 (STx)
  • 9.9.2 - Registros MMX
  • 10.2.2 - Registros XMM
  • 14.1.1 - Soporte de registro SIMD ancho de 256 bits (YMM)

Hay muchos más registros de control que tienen varios efectos secundarios y generalmente no se pueden escribir a menos que desee esos efectos (y a menudo requieren el anillo 0). Estos se resumen en la "Guía de programación del sistema del Volumen 3 - 2.1.6 Registros del sistema", que es más para los desarrolladores de SO.

Un buen enfoque empírico es ejecutar info all-registers en GDB: ¿Cómo imprimir valores de registro en gdb?


La MSDN incluye información sobre los registros x64.

x64 amplía los registros generales de x64 de 64 bits para ser de 64 bits y agrega 8 nuevos registros de 64 bits. Los registros de 64 bits tienen nombres que comienzan con "r", por lo que la extensión de eax de 64 bits se llama rax. Los nuevos registros se denominan r8 a r15.

Los 32 bits, 16 bits y 8 bits inferiores de cada registro son directamente direccionables en operandos. Esto incluye registros, como esi, cuyos 8 bits inferiores no eran previamente direccionables. La siguiente tabla especifica los nombres de lenguaje ensamblador para las partes inferiores de los 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


Los viejos registros de 32 bits se han extendido a 64 bits, el r registra ( rax , rbx , rbx , etc.).

Además, hay algunos registros de propósito general adicionales r8 a r15 que también se puede acceder como (por ejemplo) r8d , r8w y r8b (la palabra inferior de 32 bits, la palabra de 16 bits y el byte de 8 bits, respectivamente).

El byte alto de los antiguos registros de 16 bits todavía es accesible, en muchas circunstancias, como ah , bh , etc., pero parece que este no es el caso para los registros r8 a r15 . Hay algunas nuevas codificaciones de instrucciones, específicamente las que usan el prefijo REX , que no pueden acceder a esos bytes altos, pero otras aún son libres de usarlas.

Además, hay algunos nuevos registros SSE, xmm8 aunque xmm15 .

Los eip y flags también se han extendido a rip y rflags .

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

No puedo decir si estos son compatibles con la palabra clave asm para un compilador C en particular. La pequeña asamblea que hago (y se está convirtiendo en un día al año) se realiza en ensamblaje en lugar de C.


X64 amplía los registros de propósito general de 32 bits de la siguiente manera:

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

X64 también agrega 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 también

Puede encontrar información básica sobre la arquitectura en Wikipedia / X86-64 o visitar el sitio web de Intel.