A U L E

29-10-2014 ESTRUCTURA DE DATOS ESD-115 APLICACIÓN Y USO DE PILAS EN LENGUAJE ENSAMBLADOR Estructuras de Datos | Grupo

Views 184 Downloads 2 File size 3MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

29-10-2014

ESTRUCTURA DE DATOS ESD-115

APLICACIÓN Y USO DE PILAS EN LENGUAJE ENSAMBLADOR

Estructuras de Datos | Grupo 8

Tabla de contenido INTRODUCCION. ....................................................................................................................... ii OBJETIVOS. ............................................................................................................................... ii OBJETIVO GENERAL ............................................................................................................... ii OBJETIVOS ESPECIFICOS ........................................................................................................ ii Alcances del Proyecto. .............................................................................................................. 0 DESCRIPCION DEL TEMA. .......................................................................................................... 1 Lenguaje Ensamblador del Microprocesador. ........................................................................ 2 Instrucciones de Transferencia de Datos. .............................................................................. 3 Instrucciones de control de Bucles .................................................................................... 4 Instrucciones Aritméticas. ................................................................................................. 4 Formato de las Instrucciones. ............................................................................................ 5 Aplicación de pilas en Lenguaje Ensamblador. ................................................................... 6 RESULTADOS ESPERADOS. ........................................................................................................ 9 PLANTEAMIENTO DEL PROBLEMA. .......................................................................................... 10 ANALISIS DEL PROBLEMA. ....................................................................................................... 11 DISEÑO. .................................................................................................................................. 14 Operación Recorrido: .......................................................................................................... 14 Operación Push: .................................................................................................................. 14 Operación Pop: ................................................................................................................... 15 Operación Búsqueda: .......................................................................................................... 15 Operación Eliminar:............................................................................................................. 15 PRUEBAS. ................................................................................................................................ 17 MANUAL DE USUARIO............................................................................................................. 20 CONCLUSIONES....................................................................................................................... 30 BIBLIOGRAFIA. ........................................................................................................................ 31

INTRODUCCION.

El lenguaje ensamblador es la forma más básica de programar un microprocesador. Con la aparición de los computadores personales (PC) y la reducción de los costos de las mismas, el microprocesador se convirtió en uno de los dispositivos electrónicos más importantes en la historia de la electrónica. Básicamente un microprocesador es un circuito electrónico de muy alta escala de integración, capaza de realizar una infinidad de tareas de forma repetitiva a velocidades muy altas. El lenguaje ensamblador permite que este sea capaz de realizar las tareas o los cálculos que se le requieren. Aprender a programar en lenguaje ensamblador no es fácil, se requiere un cierto nivel de conocimiento de la arquitectura y organización de las computadoras, además del conocimiento de programación en algún otro lenguaje Las pilas son un tipo de estructura de datos que es fácil desarrollar por los sistemas microprocesadores y resulta de gran utilidad para trabajar con listas de datos y es imprescindible para el trabajo interno del microprocesador en las subrutinas e interrupciones. El nombre de PILA no es por otra cosa sino por su forma de uso, es decir, el ultimo que entra es el primero que sale, comúnmente también llamado “Last In First Out” (LIFO). Algunos microprocesadores pueden tener la pila en su interior, representado un sistema muy rápido pero de tamaño limitado, la mayoría de microprocesadores disponen la pila en la memoria externa, hecho que proporciona una gran capacidad de almacenamiento y el control de su ubicación, aunque el acceso sea más lento. Este proyecto está orientado a la aplicación y uso de las pilas en el lenguaje ensamblador, manipulando la entrada y salida de datos en una pila, utilizando las instrucciones del manejo de pilas que son dos, una para apilar un operando fuente y una para desapilar el valor que está en el tope de la pila y colocarlo en un operando distinto.

i

OBJETIVOS. OBJETIVO GENERAL 

Implementar el uso de pilas en lenguaje ensamblador mediante el desarrollo de estructuras de datos en una aplicación en la que se muestre su uso en un entorno real, aplicando todos los conocimientos adquiridos.



Desarrollar una simulación del uso de pilas en una aplicación basada en una calculadora en lenguaje ensamblador, utilizando el compilador MASM32.

OBJETIVOS ESPECIFICOS 

Aplicar los conocimientos teóricos del uso de pilas en forma práctica para así poder identificar un escenario en el cual se implemente el uso de estas en lenguaje ensamblador.



Aprender a codificar de manera correcta en el compilador MASM32, para así poder desarrollar del escenario elegido una aplicación en un entorno real en la cual se utilice el uso de pilas.

ii

Alcances del Proyecto.

 El proyecto desarrollar una aplicación programada en lenguaje ensamblador en un periodo de 3 meses en los cuales espera emular la forma en que se comportan las estructuras de datos de datos en entornos como microprocesadores o micro controladores los cuales ocupan este tipo de estructuras de datos para apilar las direcciones de datos en la arquitectura de la maquina a cual están aplicadas.  La aplicación demostrara no solo el uso de las pilas si no cómo se comportan en este nivel bajo de programación para esto se usara un lenguaje del mismo nivel como lo es el ensamblador el fin es ver como las pilas son una estructura muy útil en este tipo de entornos y como expertos programadores en lenguaje ensamblador recuren a las pilas así como otro tipo de estructura de datos para desarrollar programas que se ejecutaran más fácil y que usaran menos recursos de memoria.

 En resumen el alcance principal es montar una aplicación en lenguaje ensamblador que emula cómo se comportan la estructura de datos pilas las cuales son usadas común mente a niveles de arquitectura de hardware en la asignación de memoria y como esta estructura de dato es altamente útil a la hora de desarrollar arquitectura de maquina como un Kernel o Microcontroladores.

iii

DESCRIPCION DEL TEMA.

Una pila (stack en inglés) es una lista ordenada o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés Last In First Out, último en entrar, primero en salir) que permite almacenar y recuperar datos. Esta estructura se aplica en multitud de ocasiones en el área de informática debido a su simplicidad y ordenación implícita de la propia estructura. Para el manejo de los datos se cuenta con dos operaciones básicas: apilar (push), que coloca un objeto en la pila, y su operación inversa, retirar ( desapilar, pop), que retira el último elemento apilado. En cada momento sólo se tiene acceso a la parte superior de la pila, es decir, al último objeto apilado (denominado TOS, Top of Stack en inglés). La operación retirar permite la obtención de este elemento, que es retirado de la pila permitiendo el acceso al siguiente (apilado con anterioridad), que pasa a ser el nuevo TOS. Por analogía con objetos cotidianos, una operación apilar equivaldría a colocar un plato sobre una pila de platos, y una operación retirar a retirarlo.

Operaciones. Una pila cuenta con 2 operaciones imprescindibles: apilar y desapilar, a las que en las implementaciones modernas de las pilas se suelen añadir más de uso habitual. 

Crear: se crea la pila vacía. (constructor)



Tamaño: regresa el número de elementos de la pila. (size)



Apilar: se añade un elemento a la pila.(push)



Desapilar: se elimina el elemento frontal de la pila.(pop)



Cima: devuelve el elemento que está en la cima de la pila. (top o peek) 1



Vacía: devuelve cierto si la pila está sin elementos o falso en caso de que contenga uno. (empty).

Lenguaje Ensamblador del Microprocesador.

La Unidad Central de Proceso (CPU, por sus siglas en inglés) tiene 14 registros internos cada uno de 16 bits. Los primeros cuatro, AX, BX, CX, y DX, son de uso general y se pueden usar también como registros de 8 bits. Es decir, AX se puede dividir en AH y AL (AH es el byte alto, high, y AL es el byte bajo, low). Lo mismo es aplicable a los otros tres (BX en BH y BL, CX en CH y CL y DX en DH y DL) Estos son los únicos registros que pueden usarse de modo dual (en 8 o 16 bits). Los registros de la CPU son conocidos por sus nombres propios, que son:  AX

(acumulador)

 BX

(registro base)

 CX

(registro contador)

 DX

(registro de datos)

 DS

(registro de segmentos de datos)

 ES

(registro del segmento extra)

 SS

(registro del segmento pila)

 CS

(registro del segmento de código)

 BP

(registro de apuntadores base)

 SI

(registro de índice fuente)

 DI

(registro índice destino)

 SP

(registro del apuntador pila)

 IP

(registro del apuntador de siguiente instrucción)

 F

(registro de banderas)

El registro AX se usa para almacenar resultados, lecturas o escrituras desde o hacia los puertos- el BX sirve como apuntador base, o índice. El CX se utiliza en operaciones de iteración, como un contador que automáticamente se incrementa o decrementa de acuerdo con el tipo de instrucción usada. El DX se usa como puente para el acceso de datos. 2

El DS es un registro de segmento cuya función es actuar como policía donde se encuentran los datos. Cualquier dato, ya sea una variable inicializada o no, debe estar dentro de este segmento. El registro ES tiene el propósito general de permitir operaciones sobre cadenas, pero también puede ser una extensión del DS. El SS tiene la tarea exclusiva de manejar la posición de memoria donde se encuentra la pila (stack). Esta es una estructura usada para almacenar datos en forma temporal, tanto de un programa como de las operaciones internas de la computadora personal (PC, por sus siglas en ingles). En términos de operación interna, la CPU usa este segmento para almacenar las direcciones de retorno de las llamadas a rutinas. El registro de segmentos más importante es el CS o segmento de código. Es aquí donde se encuentra el código ejecutable de cada programa, el cual está directamente ligado a los diferentes modelos de memoria. El registro BP (base pointer) se usan para manipular la pila sin afectar al registro de segmentos SS. Es útil cuando se usa una interfaz entre lenguajes de alto nivel y el ensamblador. Puesto que dicha se basa en el concepto de la pila BP, nos permite acceder parámetros pasados sin alterar el registro de segmento SS. Los registros SI y DI son útiles para manejar bloques de cadenas en memoria, siendo el primero el índice fuente y el segundo el índice destino. En otras palabras, SI representa la dirección donde se encuentra la cadena y Di la dirección donde será copiada. El registro SP apunta a un área específica de memoria que sirve para almacenar datos bajo la estructura LIFO (ultimo en entrar, primero en salir), conocida como pila (stack). El registro de IP (intruction pointer) apunta a la siguiente instrucción que será ejecutada en memoria. Instrucciones de Transferencia de Datos. Estas instrucciones mueven datos de una parte a otra del sistema; desde y hacia la memoria principal, de y a los registros de datos, puertos E/S y registros de segmentación. Las instrucciones de transferencias de datos son las siguientes:  MOV

transfiere

 XCHG

intercambia

 IN

entrada

 OUT

salida

 XLAT

traduce usando una tabla

 LEA

carga la dirección efectiva

3

 LDS

carga el segmento de datos

 LES

carga el segmento extra

 LAHF

carga los indicadores en AH

 SAHF

guarda AH en los indicadores

 PUSH FUENTE

(sp)