11
2012
Programación en ensamblador (Resumen I)
Resumen de la arquitectura x86-64 (AMD64 o Intel 64) , que es la que voy a utilizar en las prácticas que vaya subiendo de ensamblador.
La arquitectura x86-64 fué desarrollada por AMD para manejar direcciones de 64 bits e implementada bajo el nombre de AMD64, que posteriormente adoptó Intel bajo el nombre de Intel64,
Modos de operación
La arquitectura x86-64 mantiene la compatibilidad con los procesadores de la arquitectura IA-32 (x86-32).
Además incorporan un modo extendido en el que podemos trabajar en 64 bits.
De esta manera tenemos el modo heredado (16-32bits) y el modo extendido (64 bits)
También tenemos el modo de gestión de sistema (SMM), este modo sirve para la gestión de energía y micro-hardware entre otras cosas, es utilizado básicamente por la BIOS.
El modo de 64 bits
Para programar utilizaremos el modo de 64 bits, que tienes las siguientes características:
-Espacio de memoria:
Los programas ejecutados en este modo podrán acceder a un espacio de direcciones lineal de 2^64 bytes
(^ elevado), aunque el espacio del procesador será inferior.
- Registros:
Existen 16 registros generales de 64 bits, para realizar operaciones de bite, word, double word, y quad word (8,16,32 y 64 bits respectivamente).
Tenemos otros 6 registros de 16 bits como registros de segmentos.
Y por último un registro de 64 bits para RFLASGS y otro de 64 bits para RIP (El contador del programa)
Orden de los bytes
Los procesadores x86-64 utilizan el sistema little-endian (el byte de menos peso ocupa la dirección mś baja) para almacenar los datos. Comenzando por el byte numero 0 (de 8 en 8), es decir, byte 0 ocupará del 0 al 7, byte 1 del 8 al 15 y así sucesivamente dependiendo del tipo de registro que estés utilizando.
En el modo compatible utilizaran direcciones de 32 bytes, sin embargo, en el modo de 64 generarán direcciones de 64 bytes.
Registros de propósito general
Son 16 registros de datos de 64 bits (8 bytes): RAX, RBX, RCX, RDX, RSI, RDI,RBP, RSP y R8-R15.
Los registros son accesibles de las siguientes formas:
Registros completos, como quad word (64).
Registros double word, 32 bits de menos peso.
Registros word, 16 bits de menos peso.
Registros byte, 8 bits de menos peso.
Limitaciones:
Registro RSP: tiene una función especial, funciona como el puntero de pila, contiene siempre la dirección del primer elemento de la pila.
En una misma instrucción no se pueden usar un registro del conjunto AH, BH, CH, DH junto con uno del conjunto SIL, DIL, BPL, SPL, R8B – R15B.
Registros de propósito específico
Como hemos mencionado antes tenemos varios tipos de registros de proposito específico:
- Seis Registros de segmento:
CS(code segment), DS (data segment), SS (stack segment), ES, FS, GS (extra segment).
En el modo de 64 bits solo se suelen utilizar los registros FS y GS.
- RIP
Es el contador del programa y contiene la dirección de la instrucción siguiente.
-RFLAGS:
Contiene información sobre el estado del procesador, entre otros utilizaremos los siguientes:
Z: Se activa si el resultado a sido 0.
S: Se activa si el resultado tiene signo
C: Se activa si el resultado tiene carry
V: Se activa si el resultado se desborda
Nota: Prácticamente las instrucciones del lenguaje ensamblador concuerdan con las instrucciones binarias del código máquina.
Artículos relacionados
Related Posts
Leave a comment
Entradas recientes
- Suma de polinomios con código ensamblador x86-64
- Desarrollar contenido SEO
- Eliminar campos del perfil administrador
- ORA-02291: integrity constraint | Oracle
- Función JavaScript sin conocer el número de parámetros
- Error 500 | Internal Server Error
- Recopilación de Redes Sociales
- Realidad aumentada Google Project Glass
- Bloquear IPs por .htaccess
- Ensamblador | Cambiar el orden de un Array
- Ensamblador | Algoritmo de la burbuja
- Programación en ensamblador | Arquitectura CISC
- Alternar colores en tablas con PHP y CSS
- Permisos en WordPress
- Programación en ensamblador (Resumen III) – Instrucciones
- Programación en ensamblador (Resumen II)
- Programación en ensamblador (Resumen I)
- Dibujar rutas en Google Maps | v3
- Paginar sin plugin en WordPress
- Tutorial Google Maps II ** Insertar marcas
- Tutorial Google Maps I
- Instalar Java en Ubuntu
- Enviar un email con PHP
- Recuperar Pc Packard Bell
- Claúsula RETURNING
- Paquete DBMS_UTILITY
- Sentencia CONTINUE | SQL
- GPS con Android | Mostrar tu posición
- Tutorial | Primeros pasos con IBM DB2
- Instrucción SAVEPOINT
- Diferencias entre the_excerpt y the_content | Resumir entradas
- Redireccionar Web | Métodos de redirección
- Clase Robot
- Formulario transparente en java | Robot
- Google Zeitgeist | Lo más buscado 2011
- Compartir contenidos Facebook – Tweetter | Blogger
- Plugin imprescindibles en wordpress (10 mejores)
- Resolver problemas de mantenimiento con WordPress
- Widget Hazte Fan para tu blog
- Introducción a la Minería de Datos
- Integrar tu Web en Facebook
- Debugar con ORACLE Forms Builder
- Aplicación Test para Facebook
- Cursor dinámico en ORACLE FORMS
- Publicar en el muro con JavaScript SDK
- Sueldos en Informática
- Tutorial – Cómo crear aplicaciones para Facebook
- Mensajero de Windows con Java
- Tutorial posicionamiento Web SEO I
- AJAX en tres pasos
- Publicar con tu aplicación Facebook
- Aplicacion Facebook en Español
- Facebook vs Google (Adsense)
- Conectar con Facebook (Graph API)
- Conectar con Facebook | Utilizando el Php SDK
- Desarrollar aplicaciones para Facebook
- Como hacer que tu página no se almacene en la caché del navegador
- PAQUETE DBMS_LOB (IV). EJEMPLOS
- Aplicación para gestionar un Videoclub III
- Aplicación para gestionar un Videoclub II
- Aplicación para gestionar un Videoclub I
- PAQUETE DBMS_LOB. BFILE (II)
- Código Hamming | Detectar errores por paridad
- Editar páginas Web desde el navegador | contentEditable
- PAQUETE DBMS_LOB (I)
- PAQUETE DBMS_LOB (III). FUNCIONES
- Insertar código Php en WordPress
- Protocolos dinámicos | Vector-Distancia
- Cambio de dominio | Redirección 301
- Juego de la Serpiente Java (Beta)
- Cadena de conexión php-MySQL
- Realizar conexión entre Java Oracle
- PAQUETE DBMS_SQL. Oracle 10g II
- Función Recursiva sobre JSON con JavaScript
- PAQUETE DBMS_SQL. Oracle 10g I
- Mejorar el rendimiento de tu conexión wifi.
- Cambiar el blog de servidor | para WordPress
- Paquete dbms_scheduler
- Jquery EasyUI : Componente Tree
- Procedimiento de búsqueda de un valor en las tablas de la BBDD
Encuesta Rápida

Recientes
- admin: Hola, Parece que tienes un error de referencias en el código, es posible que el xml dónde deberías tener el...
- antrax: estoy desarrollando lo k es el gps pro al guiarme un poko con tu codigo ami m muestra un error en: id, de...
- admin: Hola, No he entendido bien a que te refieres, si me das más información igual puedo echarte una mano. Saludos
- antrax: oye x k marca error en id mapView = (MapView) findViewById(R.id.mapview); y despues corrijo el id y pasa al...
- Reo: Si es de Google me quedo con el segundo video