El lenguaje de ensamblador para la arquitectura x64
3.1. Qu es lenguaje de ensamblador? Es un lenguaje de programacin de bajo nivel para los computadores, microprocesadores, microcontroladores y otros circuitos integrados programables.
NIVELES DE LENGUAJES:
Ensamblador: Es usado para traducir sentencias del lenguaje ensamblador al
cdigo de mquina del computador objetivo. Refleja directamente la arquitectura y las instrucciones en lenguaje de mquina de la CPU, y pueden ser muy diferentes de una arquitectura de CPU a otra.
Arquitectura
Dado que los registros de 64-bit permiten el acceso de muchos tamaos y
ubicaciones, definimos un byte como 8 bits, una palabra como 16 bits, una palabra doble como 32 bits, una palabra cudruple como 64 bits, y una doble palabra cudruple como 128 bits. Intel almacena bytes Little endian, lo que significa que menos bytes significantes son almacenados en direcciones de memoria inferiores.
La figura muestra 16 registros de 64-bits de uso general, de los cuales los
primeros 8 estn etiquetados (por razones histricas) RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP. Los siguientes 8 son nombrados R8-R15. Al reemplazar la R inicial con una E en los primeros 8 registros, es posible accesar a los 32 bits inferiores (EAX para RAX). De manera similar, para RAX, RBX, RCX y RDX, accesar a los 16 bits inferiores es posible removiendo la inicial R (AX para RAX), y el byte inferior de estos cambiando la X por L (AL para AX), y el byte superior de los 16 bits inferiores usando una H (AH para AX). Los nuevos registros R8 a R15 pueden ser accesados de una manera similar asi: R8 (qword), R8D (dword inferior), R8W (la Word ms bajo), R8B (el byte ms bajo estilo MASM, en estilo Intel sera R8L). Ntese que no hay R8H.
3.2 Herramientas
Ensambladores
Una bsqueda en internet revela que los ensambladores capaces de manejar
x64 son el NASM, una reescritura del NASM llamada YASM, el rpido FASM, y el tradicional MASM. Incluso existe un IDE para ensamblador gratuito para x86 y x64 llamado WinASM. Cada ensamblador tiene soporte variado para las macros y la sintaxis de los otros ensambladores, pero el cdigo ensamblador no es compatible de origen a travs de ensambladores tal como lo hacen el C+ + y el Java.
Compiladores de C/C++
Estos compiladores seguido permiten empotrar ensamblador en el cdigo
usando ensamblado en lnea, pero Microsoft Visual Studio C/C++ removi esto para el cdigo x64, probablemente para simplificar la tarea del optimizador de cdigo. Esto deja 2 opciones: usar archivos de ensamblador por separado y un ensamblador externo, o usar caractersticas intrnsecas del archivo de encabezado intrn.h. Otros compiladores ofrecen opciones similares.
Algunas razones para usar caractersticas intrnsecas:
Ensamblador por lnea no est soportado en x64
Facilidad de uso: puedes usar nombres de variables en lugar de hacer
malabares con la asignacin de registros de manera manual.
Mayor multiplataforma que el ensamblador: El fabricante del compilador
puede portar las caractersticas intrnsecas haca varias arquitecturas.
El optimizador funciona mejor con estas caractersticas.