x64 significa saber que mismo como arquitectura assembly x86 x86-64 cpu-registers cpu-architecture

assembly - saber - ¿Qué significa la R en RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP?



x86 que significa (2)

Creo que solo es R para "registro", ya que hay registros adicionales R8 - R15 en x86-64, y R es un prefijo común en muchas arquitecturas de CPU donde los registros están numerados.

El lenguaje del ensamblador x86 ha tenido que cambiar, ya que la arquitectura del procesador x86 ha cambiado de 8 bits a 16 bits a 32 bits y ahora de 64 bits.

Sé que en los nombres de registro de ensamblador de 32 bits (EAX, EBX, etc.), el prefijo E para cada uno de los nombres significa Extendido, que significa la forma de 32 bits del registro en lugar de la forma de 16 bits (AX, BX, etc.).

¿Qué significa el prefijo R para estos nombres de registro en 64 bits?


Los procesadores Intel x86 originales, el procesador 8080, eran procesadores de 8 bits diseñados con un ojo para aplicaciones tales como propósitos especiales, computadoras pequeñas (por ejemplo, cajas registradoras) o controladores de equipos en lugar de computadoras de propósito general (los competidores incluyen el Motorola 6800). La siguiente familia de procesadores 8086 (8086 y 8088 de costo reducido) eran microprocesadores de 16 bits que continuaron con la arquitectura Intel 8080 y la extendieron con adiciones de 16 bits con miras a los usos más generales del procesador.

Los procesadores Intel 8080 e Intel 8086 tenían un número limitado de registros, la mayoría de los cuales tenían propósitos especiales, por lo que tenían nombres específicos como A, B o AX, BX en su lenguaje de ensamblaje (competidores como el Motorola 6800 tenían convenciones similares) . Las computadoras de propósito general, como la familia IBM 360/370 o el DEC VAX, usaron más nombres genéricos para componentes como registros (por ejemplo, R0, R1, etc.) ya que los registros eran de uso general (el procesador Motorola de 32000 bits usó en muchas estaciones de trabajo de gama alta) en la década de 1980 fue similar con ocho registros de datos llamados D0 a D7).

A medida que Intel ha seguido evolucionando el procesador x86 a lo largo de los años desde la década de 1970, también ha intentado mantener la compatibilidad con versiones anteriores, incluso cuando las aplicaciones de destino del x86 se han expandido de aplicaciones especializadas de microcontroladores a computadoras de propósito general. Durante esta evolución, el número de registros se ha expandido y muchos de los registros de propósito original originalmente han evolucionado hacia el uso para propósitos generales, ya que Intel también presentó la idea de los modos de operación de chips de procesador con el 80286 para ayudar con la compatibilidad hacia atrás.

Con los procesadores de 64 bits, Intel necesitaba alguna forma de identificar una transferencia de 64 bits frente a una transferencia de 32 bits u otra en el lenguaje ensamblador. Al mismo tiempo, Intel estaba introduciendo registros adicionales de propósito general. Usando una convención de nomenclatura común de la industria para el registro de propósito general, la letra R, seguida de un número fue una decisión fácil.

Sin embargo, Intel también tuvo que mantener la compatibilidad con versiones anteriores de los registros anteriores. Por lo tanto, la letra R se usó como un prefijo para el nombre del registro de 16 bits, al igual que para los procesadores de 32 bits, la letra E se usó como un prefijo para el nombre del registro de 16 bits. Al mismo tiempo, el diseño de las operaciones de registro de 64 bits se realizó de manera un poco diferente a lo que se hizo para las operaciones de registro de 32 bits para las generaciones anteriores.

Con el cambio de procesador de 8 bits a procesador de 16 bits, los registros se extendieron de 8 bits a 16 bits, por lo que los nombres tienen la letra X después del nombre del registro, como AX, BX, etc. Estos registros podrían tratarse como dos bits de 8 bits. registros (el registro AX de 16 bits estaba compuesto por 8 bits AH y 8 bits AL, donde H representa los bits altos o más significativos del registro AX y L representa los bits bajos o menos significativos del registro AX).

Con el cambio del procesador de 16 bits a 32 bits, los registros se extendieron de 16 bits a 32 bits, por lo que los nombres tienen la letra E como un prefijo como EAX, EBX, etc. Estos registros podrían tratarse como si tuvieran dos bits separados de 16 bits. componentes (menos significativos 16 bits accedidos usando el nombre de 16 bits como EAX -> AX, EBX -> BX, etc.) o cuatro registros de 8 bits (menos significativos 16 bits accedidos como dos registros de 8 bits como EAX -> AH y AL, EBX -> BH y BL, etc.) cuando se utilizaron las operaciones de cambio de registro y bit a bit para mover valores de 16 bits entre los 16 bits superiores y los 16 bits inferiores de un registro de 32 bits como EAX, EBX, etc. Esto se mantuvo Hasta cierto punto, lo que se había hecho con el cambio de 8 bits a 16 bits, sin embargo, el acceso directo a los 16 bits superiores de los registros de 32 bits no estaba disponible de la misma manera que el acceso directo a los 8 bits superiores de los 16 bits se registra en El 8086/8080 había sido proporcionado.

La Sección 3.7.2.1 del Volumen 1: Arquitectura básica del Manual del desarrollador de software de las arquitecturas Intel 64 e IA-32 que tiene esto para decir sobre el modo de 64 bits.

Register operands in 64-bit mode can be any of the following: • 64-bit general-purpose registers (RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP, or R8-R15) • 32-bit general-purpose registers (EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP, or R8D-R15D) • 16-bit general-purpose registers (AX, BX, CX, DX, SI, DI, SP, BP, or R8W-R15W) • 8-bit general-purpose registers: AL, BL, CL, DL, SIL, DIL, SPL, BPL, and R8L-R15L are available using REX prefixes; AL, BL, CL, DL, AH, BH, CH, DH are available without using REX prefixes. • Segment registers (CS, DS, SS, ES, FS, and GS) • RFLAGS register • x87 FPU registers (ST0 through ST7, status word, control word, tag word, data operand pointer, and instruction pointer) • MMX registers (MM0 through MM7) • XMM registers (XMM0 through XMM15) and the MXCSR register • Control registers (CR0, CR2, CR3, CR4, and CR8) and system table pointer registers (GDTR, LDTR, IDTR, and task register) • Debug registers (DR0, DR1, DR2, DR3, DR6, and DR7) • MSR registers • RDX:RAX register pair representing a 128-bit operand

Vea la pregunta y la respuesta para los registros x86_64 rax / eax / ax / al sobreescribiendo el contenido completo del registro , así como ¿Por qué la mayoría de las instrucciones x64 ponen a cero la parte superior de un registro de 32 bits que proporciona una explicación sobre cómo la operación del registro de 64 bits difiere de la Operación de registro de 32 bits.