Resumen
- carlooscapistran
- 1 mar 2016
- 4 Min. de lectura
Los programadores durante años, utilizan ensamblador x86 para escribir código de rendimiento crítico. sin embargo, las PC de 32 bits están siendo reemplazadas por otras de 64 bits, y el código de montaje subyacente cambia.
Sin necesidad alguna de conocimiento previo de código x86, a pesar de que hace más fácil la transición. 64 es un nombre genérico para las extensiones de 64 bits a Intel y la arquitectura del conjunto de instrucciones x86 de 32 bits de AMD (ISA). AMD presentó la primera versión de x64, x86-64 inicialmente llamada y más tarde rebautizado AMD64. Intel nombró su ejecución IA-32e y luego EMT64.
El montaje se utiliza a menudo para las piezas de rendimiento crítico de un programa, aunque es difícil de superar a un buen compilador de C ++ para la mayoría de los programadores. Conocimiento de la asamblea es útil para depurar código y a veces un compilador hace el código de montaje incorrecto y recorrer el código en un depurador ayuda a localizar la causa.
Arquitectura
Es el aprendizaje de montaje para una plataforma determinada, el primer lugar para comenzar es aprender el conjunto de registros. General de Arquitectura Desde los registros de 64 bits permiten el acceso de muchos tamaños y ubicaciones, definimos un byte como 8 bits, una palabra como de 16 bits, una palabra doble con 32 bits, una palabra cuádruple como 64 bits, y un doble quadword como 128 bits. Tiendas de Intel bytes "Little Endian", es decir inferiores bytes significativos se almacenan en direcciones de memoria más bajos.

En la figura nos muestra dieciséis registros de propósito general de 64 bits, el primero de los cuales ocho están etiquetados (por razones históricas) RAX, RBX, RCX, RDX, RBP, RSI, RDI, y RSP. El segundo ocho son nombrados R8-R15.
Mediante la sustitución de la inicial R con una E en los primeros ocho registros, es posible acceder a los 32 bits inferiores (EAX para RAX). Del mismo modo, para RAX, RBX, RCX, y RDX, el acceso a los 16 bits más bajos es posible mediante la eliminación de la R inicial (AX para RAX), y el byte inferior de la éstos cambiando el X para L (AL para AX), y el byte más alto de los 16 bits más bajos utilizando una H (AH) para AX.
Ensambladores
Una búsqueda en internet revela que los ensambladores capaces de manejar x64 son el NASM, una reescritura del NASM llamada YASM, el rápido 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 código ensamblador no es compatible de origen a través de ensambladores tal como lo hacen el C++ y el Java.
Compiladores de C/C++
Estos compiladores seguido permiten empotrar ensamblador en el código usando ensamblado en línea, pero Microsoft Visual Studio C/C++ removió esto para el código x64, probablemente para simplificar la tarea del optimizador de código. Esto deja 2 opciones: usar archivos de ensamblador por separado y un ensamblador externo, o usar características intrínsecas del archivo de encabezado “intrn.h”. Otros compiladores ofrecen opciones similares.
Algunas razones para usar características intrínsecas:
· Ensamblador por línea no está soportado en x64
· Facilidad de uso: puedes usar nombres de variables en lugar de hacer malabares con la asignación de registros de manera manual.
· Mayor multiplataforma que el ensamblador: El fabricante del compilador puede portar las características intrínsecas hacia varias arquitecturas.
Instrumentos
Aquí nos dice sobre la búsqueda que en Internet revela que los ensambladores compatibles con x64, como el Netwide ensamblador (NASM) , una reescritura NASM llamada YASM , el ayuno plana ensamblador FASM , y el tradicional Microsoft MASM. Hay incluso un IDE libre para x86 y x64 asamblea llamada WinASM. Cada ensamblador tiene soporte variable para las macros y sintaxis otros ensambladores, pero el código de montaje no es compatible fuente través ensambladores como C ++ o Java * son. Para los siguientes ejemplos, utilizo la versión de 64 bits de MASM, ML64.EXE, libremente disponible en el SDK de la plataforma.
Fundamentos de instrucción
Antes de cubrir algunas instrucciones básicas, es necesario entender los modos de direccionamiento, que son formas de una instrucción puede tener acceso a los registros o la memoria. Los siguientes son los modos de direccionamiento común con ejemplos:
Inmediata: el valor se almacena en la instrucción. ADD EAX, 14; añadir 14 a 32 bits EAX
Register para registrar ADD R8L, AL; añadir 8 bits AL en R8L
Indirecta: esto permite el uso de un desplazamiento 8, 16, o 32 bits, cualquier registros de propósito general para la base y el índice, y una escala de 1, 2, 4, 8 o para multiplicar el índice.Técnicamente, estos también pueden tener el prefijo segmento FS: o GS: pero esto rara vez se requiere. MOV R8W de 1234 [8 * RAX + RCX]; Transferir palabra en la dirección 8 * RAX + + RCX 1234 en R8W Hay muchas maneras legales para escribir esto. Los siguientes son equivalentes
MOV ECX, mesa dword ptr [RBX] [RDI]
MOV ECX, mesa dword ptr [RDI] [RBX]
MOV ECX, mesa dword ptr [RBX + RDI]
MOV ECX, dword ptr [Tabla RBX + + RDI]
El PTR DWORD indica al ensamblador cómo codificar el MOV instrucción.
RIP-direccionamiento relativo: esto es nuevo para x64 y permite el acceso tablas de datos y tal en el código en relación con el puntero de la instrucción actual, haciendo código independiente de posición más fácil de implementar.
MOV AL, [RIP]; PIR apunta a la siguiente instrucción NOP también conocido como NOP
Sistemas Operativos
Los Sistemas de 64 bits permiten hacer frente a las 2 bytes de potencia 64 o de datos en la teoría, pero sin chips actuales permiten el acceso a los 16 exabytes (18,446,744,073,709,551,616 bytes). Por ejemplo, la arquitectura de AMD utiliza sólo los 48 bits de una dirección, y los bits 48 a 63 debe ser una copia del bit 47 o el procesador genera una excepción. Así direcciones son del 0 al 00007FFF`FFFFFFFF, y desde FFFF8000`00000000 través FFFFFFFF`FFFFFFFF, para un total de 256 TB (281,474,976,710,656 bytes) de espacio de direcciones virtuales utilizable.

Entradas recientes
Ver todoUna macro es una serie de instrucciones que se almacenan para que se puedan ejecutar de manera secuencial mediante una sola llamada u...
Hola Mundo: http://nuyoo.utm.mx/~jjf/le/pe04_hol.pdf Identidad: http://nuyoo.utm.mx/~jjf/le/pe05_id2.pdf Borrar pantalla:...
Comments