ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Programacion en ensamblador


Enviado por   •  16 de Septiembre de 2015  •  Apuntes  •  4.697 Palabras (19 Páginas)  •  1.571 Visitas

Página 1 de 19

Programación en ensamblador1  

Como cualquier otro lenguaje de programación, el ensamblador tiene varias versiones, pero entre ellas se conservan un conjunto de reglas para su correcta escritura, que podríamos decirle gramática. Para este curso nos basaremos en el ensamblador de 16 bits y lo emularemos con  emu8086 (Ashkelon, 2014), pues así encapsularemos cualquier error que pudiera llevar al mal funcionamiento de la PC.  

Los archivos de código no son más que archivos de texto plano con extensión *.asm en los cuales se escriben de forma ordenada las instrucciones en secciones determinadas: código, pila, datos. El código se puede comentar utilizando el signo “;”, pues el compilador ignorará todo lo que esté escrito en el renglón desde que se encuentra el “;” (Irvine, 2007, página 57).  

Para la programación en ensamblador es muy importante reconocer la clasificación de las instrucciones relativa a las acciones que ejecutan. Así es que tenemos un conjunto de instrucciones para el movimiento de datos en la memoria, un segundo conjunto de funciones se encarga de todas las operaciones aritméticas y de lógica; finalmente, un tercer grupo se encarga de las funciones de control del proceso, es decir, sus bifurcaciones y decisiones.  

El proceso de creación de un programa ejecutable a partir de un código fuente en ensamblador se da en un proceso de 2 pasos: primero se compila el código fuente y se obtiene un archivo con extensión *.obj al que le llamamos código objeto. Este código objeto debe ser enlazado en un segundo paso para crear el archivo ejecutable (con extensión *.exe).  

Además, cuando requerimos realizar una operación matemática como sumar dos cantidades, restarlas, multiplicarlas e, incluso, dividirlas hacemos uso de las funciones aritméticas. No olvides que primero utilizaremos sólo números enteros positivos en los ejemplos, por lo que cuando hablamos de la división nos referimos a la división por módulo.  

En otras ocasiones requerimos realizar operaciones lógicas (AND, OR, NOT). Estas operaciones siempre actúan a nivel bit, por lo que existe un conjunto de instrucciones que hacen comparaciones a nivel valor, pero éstas se encuentran más relacionadas al conjunto de operaciones de control, pues realizan un salto entre código en función del resultado de la comparación. Para mayor referencia puedes dar una hojeada a los capítulos 4 y 6 (Irvine, 2007).  

                                                        1 Documento elaborado por el Dr. Carlos Jiménez Gallegos.  

 

   

Unidad 2. Programación en ensamblador  

Lenguaje ensamblador  

2

El tercer grupo de instrucciones se encarga de conducir la ejecución del programa otorgándole la capacidad de tomar decisiones numéricas, y ceder el control del programa al exterior – como cuando se ejecutan interrupciones de hardware.  

Formato de un programa en ensamblador  

El modelo de programación para los microprocesadores Intel está basado en los siguientes registros de memoria (reproducción tomada de B. Brey, 2006, página 50):  

 

   

Unidad 2. Programación en ensamblador  

Lenguaje ensamblador  

3

Lo primero que debemos notar es que los registros pueden accederse por partes o grupos de 8, 16 y 32 bits. Por ejemplo, EAX es el registro acumulador de 32 bits, AX representa las 16 bits más bajos de EAX. AH y AL representan la parte alta de 8 bits y la parte baja (últimos 8 bits) del mismo registro AX. Es por ello que debemos diferenciar cuando hacemos una operación de 8 bits, de 16 o de 32. Aquí una breve descripción de cada registro:  

Registro Nombre Uso

EAX, AX, AH, AL Acumulador Es un registro multipropósito que además se utiliza en operaciones como multiplicación, división y ajuste. EBX, BX,BH,BL Índice Base Puede direccionar datos en la memoria o la dirección de desplazamiento de una posición de memoria. Es multipropósito. ECX, CX, CH, CL Contador Aunque es un registro multipropósito se le llama contador porque en algunas instrucciones lo utilizan para contar repeticiones o ciclos. EDX, DX, DH, DL Datos Guarda el resultado de la multiplicación y de la división, pero puede ser usado con otros propósitos. SP Apuntador de Pila Apunta al último valor que se encuentra en la pila. BP Apuntador de Base Apunta a una dirección de memoria. DI Índice Destino Usado para las instrucciones de cadenas o arreglos.  SI Índice Origen Usado para apuntar a datos de cadena de origen para instrucciones de cadena. IP Apuntador de instrucciones Apunta a la siguiente instrucción del programa. FLAGS Banderas El registro de banderas nos informa el estado del microprocesador y de la última instrucción ejecutada. CS Código  Sección de memoria en donde está el código. DS Datos Sección de memoria en donde están los datos. ES Extra Segmento que utilizan algunas funciones de cadena para guardar datos. SS Pila Segmento de memoria donde se localiza la pila.  

 

   

Unidad 2. Programación en ensamblador  

Lenguaje ensamblador  

4

Para el caso del registro de banderas FLAGS, en ellas cada bit representa una señal (bandera) especial. Aquí describimos las más importantes:  

Bit Bandera Nombre Descripción

0 C Acarreo Indica si hubo acarreo en la última operación. También puede indicar errores. 2 P Paridad Indica la paridad del último resultado: 0 para impar, 1 para par.

4 A Acarreo Auxiliar

Guarda el medio acarreo, es decir, si hubo acarreo entre los bits 3 y 4, utilizado en operaciones en BCD. 6 Z Cero Indica si el último resultado fue cero.

7 S Signo Índica si el último bit del resultado es 1.  

8 T Trampa Indica que el programa se detendrá en la condición de depuración.

9 I Interrupción Habilita las interrupciones.

10 D Dirección Indica la dirección (incremento o decremento).  

11 O Sobreflujo Indica que ha habido un desbordamiento en una operación con signo.  

Siguiendo la tradición de todos los lenguajes de programación comenzaremos con el clásico ejemplo “Hola Mundo”. A continuación se encuentra el listado de Hola.asm.    

.MODEL SMALL                    ;Modelo pequeño  

.STACK 100h                     ;Segmento de pila 256 posiciones  

CR EQU 13                       ;Retorno de carro LF EQU 10                       ;nueva línea  

.DATA                           ;Segmento de datos  

TEXTO DB LF,LF,CR,'Hola Mundo!$';Texto  

.CODE                           ;Código del programa

 

   

Unidad 2. Programación en ensamblador  

Lenguaje ensamblador  

5  

MOV AX, @DATA                   ;Cargar la dirección del segmento de datos  

MOV DS,AX                       ;Cargar la dirección en el segmento de datos LEA DX,TEXTO                    ;Carga el texto  

...

Descargar como (para miembros actualizados)  txt (19.9 Kb)   pdf (69.8 Kb)   docx (18.1 Kb)  
Leer 18 páginas más »
Disponible sólo en Clubensayos.com