Este post es un extracto de:
Introduction to X86-64 Assembly for Compiler Writers por Prof. Douglas Thain
Registros y tipos de datos
Los procesadores X86-64 tienen 16 registros entero de uso general
%rax | %rbx | %rcx | %rdx | %rsi | %rdi | %rbp | %rsp | %r8 | %r9 | %r10 | %r11 | %r12 | %r13 | %r14 | %r15 |
Los programadores acostumbrados al modo de 32 bits, notarán que los primeros ocho extienden los registros de 16 bits anteriores.
%eax | %ebx | %ecx | %edx | %esi | %edi | %ebp | %esp |
Analicemos un poco más la estructura de los nuevos ocho registros, que siguen el siguiente esquema:
%r8l 8 bits |
||||
%r8w 16 bits |
||||
%r8d 32 bits |
||||
%r8 64 bits |
Cuando convenga aclarar (yo casi siempre lo hago). Se utiliza el sufijo Q en los comandos de ensamblador. La siguiente tabla ilustra los modos de direccionamiento:
Modo | Ejemplo |
Símbolo global | MOVQ x, %rax |
Inmediato | MOVQ $56, %rax |
Registro | MOVQ %rbx, %rax |
Indirecto | MOVQ (%rsp), %rax |
Base-Relativo | MOVQ -8(%rbp), %rax |
Desplazado-Escalado-Base-Relativo | MOVQ -16(%rbx,%rcx,8), %rax |
Recordemos que no todas las combinaciones son permitidas.