Professional Documents
Culture Documents
ESTRUCTURA
DE DATOS
ESD-115
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 Aritmticas. ................................................................................................. 4
Formato de las Instrucciones. ............................................................................................ 5
Aplicacin de pilas en Lenguaje Ensamblador. ................................................................... 6
RESULTADOS ESPERADOS. ........................................................................................................ 9
PLANTEAMIENTO DEL PROBLEMA. .......................................................................................... 10
ANALISIS DEL PROBLEMA. ....................................................................................................... 11
DISEO. .................................................................................................................................. 14
Operacin Recorrido: .......................................................................................................... 14
Operacin Push: .................................................................................................................. 14
Operacin Pop: ................................................................................................................... 15
Operacin Bsqueda: .......................................................................................................... 15
Operacin Eliminar:............................................................................................................. 15
PRUEBAS. ................................................................................................................................ 17
MANUAL DE USUARIO............................................................................................................. 20
CONCLUSIONES....................................................................................................................... 30
BIBLIOGRAFIA. ........................................................................................................................ 31
INTRODUCCION.
OBJETIVOS.
OBJETIVO GENERAL
Desarrollar una simulacin del uso de pilas en una aplicacin basada en una
calculadora en lenguaje ensamblador, utilizando el compilador MASM32.
OBJETIVOS ESPECIFICOS
Aplicar los conocimientos tericos del uso de pilas en forma prctica para as
poder identificar un escenario en el cual se implemente el uso de estas en
lenguaje ensamblador.
ii
iii
Una pila (stack en ingls) es una lista ordenada o estructura de datos en la que el
modo de acceso a sus elementos es de tipo LIFO (del ingls 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 informtica debido a su simplicidad y
ordenacin implcita de la propia estructura.
Para el manejo de los datos se cuenta con dos
operaciones bsicas: apilar (push), que coloca
un objeto en la pila, y su operacin
inversa, retirar ( desapilar, pop), que retira el
ltimo elemento apilado.
En cada momento slo se tiene acceso a la
parte superior de la pila, es decir, al ltimo
objeto apilado (denominado TOS, Top of
Stack en ingls). La operacin retirar permite
la obtencin 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 analoga con objetos cotidianos, una
operacin apilar equivaldra a colocar un
plato sobre una pila de platos, y una
operacin 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 aadir ms de uso habitual.
Vaca: devuelve cierto si la pila est sin elementos o falso en caso de que
contenga uno. (empty).
La Unidad Central de Proceso (CPU, por sus siglas en ingls) 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 tambin 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
ES
SS
CS
BP
SI
DI
SP
IP
(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
iteracin, como un contador que automticamente se incrementa o decrementa de
acuerdo con el tipo de instruccin usada. El DX se usa como puente para el acceso de
datos.
2
transfiere
XCHG
intercambia
IN
entrada
OUT
salida
XLAT
LEA
LDS
LES
LAHF
SAHF
PUSH FUENTE
POP DESTINO
incrementar
DEC
decrementar
LOOP
realizar un bucle
LOOPZ, LOOPE
LOOPNZ, LOOPNE
JCXZ
salta si CX es cero.
Instrucciones Aritmticas.
A. Grupo de adicin:
ADD
suma
ADC
AAA
DAA
B. Grupo de sustraccin:
SUB
resta
SBB
ASS
DAS
C. Grupo de multiplicacin:
MUL
multiplicacin
IMUL
multiplicacin entera
AAM
D. Grupo de divisin
DIV
divisin
IDIV
divisin entera
AAD
AX
AL
001
CX
CL
010
DX
DL
011
BX
BL
100
SP
AH
101
BP
CH
110
SI
DH
Declaraciones y definiciones.
Segmento de datos.
Segmento de pila.
Segmento de cdigo.
Declaraciones y definiciones
Segmento de datos
Segmento de pila
Todos los programas han de llevar pila, con el fin de depositar la informacin necesaria
para las llamadas a funciones, o bien almacenar datos temporalmente. En este bloque
se define un tamao para la pila.
El segmento de pila se define como cualquier otro segmento, pero especificando la
palabra reservada STACK.
En este segmento reservamos nicamente espacio para la pila, es decir, definimos su
tamao.
Segmento de cdigo
Instruccin PUSH
Propsito: Coloca una palabra en la pila.
Sintaxis: PUSH fuente
La instruccin PUSH decrementa en dos el valor de SP y luego transfiere el contenido
del operando fuente a la nueva direccin resultante en el registro recin modificado.
El decremento en la direccin se debe a que al agregar valores a la pila sta crece de la
direccin mayor a la direccin menor del segmento, por lo tanto al restarle 2 al valor
del registro SP lo que hacemos es aumentar el tamao de la pila en dos bytes, que es la
nica cantidad de informacin que puede manejar la pila en cada entrada y salida de
datos.
RESULTADOS ESPERADOS.
Cada pila tiene un lugar fijo en la memoria en la que comienza, en nuestro caso hemos
de aadir los datos a la pila, el puntero de pila ser desplazado para indicar el estado
actual de la pila, apuntando a la prxima celda, y copia el nuevo elemento de la cima
en rea de la pila. Desapilando es simplemente la inversa de apilar. El primer elemento
es eliminado y el puntero de la pila se actualiza, en el orden opuesto de la utilizada en
la operacin de apilar. Tomando en cuenta lo que ya sabemos de la estructura, hemos
de aplicar la pila en lenguaje ensamblador, enfocndonos en estas dos operaciones
que son tan bsicas en una pila, apilar y desapilar, as el programa comenzara en
incluyendo unos datos en la pila y luego retirando los datos de la pila.
El segundo problema sera derivar las funciones que ya conocemos de la pila, y su
ejecucin aplicndolo a una operacin como es la de sumar.
10
11
mov
ah
02h
Instruccin MOV
Transfiere un byte desde el operando fuente al operando destino.
Es decir, teniendo el siguiente formato:
12
MOV
MOV
Destino
CX
Fuente
03h
13
DISEO.
Pseudocdigo:
________________________________________
Operacin Recorrido:
Apuntador toma el Top, despus ve si la condicin cumple para efectuar un Ciclo
mientras Apuntador sea diferente de Nulo, si cumple lo que hace es que despliega el
contenido de la Pila(Pila[Apuntador]), despus Apuntador se le resta 1. Este proceso se
repite hasta que Apuntador sea igual Nulo(Cuando llega a este punto la Pila ya fue
Recorrida).
Recorrido(Pila, Top)
Apuntador - Top
Repetir mientras Apuntador ≠ Nulo
Imprimir Pila[Apuntador]
Apuntador - Apuntador - 1
Fin del ciclo
Operacin Push:
Compara en un principio el Top con Max, si la condicin no cumple es imposible
insertar mas datos a la Pila, de otra forma lo que hace es Incrementar el valor de Top, y
copia el valor de Elemento en Pila[Top]. De esta forma el dato ya esta insertado.
Push(Pila, Top, Max, Elemento)
Si Top ≠ Max
Top - Top + 1
Pila[Top] - Elemento
Si no:
Imprimir Pila Llena
Salir
14
Operacin Pop:
Compara para determinar si la pila esta vaco, de otra forma lo que hace es Imprimir el
valor de Pila[Top] (Que es el dato que est apunto de Eliminar) y enseguida a Top le
resta 1, de esta forma el dato ya no existe.
Pop(Pila, Top)
Si Top ≠ Nulo
Imprimir Pila[Top]
Top - Top - 1
Si no:
Imprimir Pila Vaca
Salir
Operacin Bsqueda:
Busqueda(Pila, Top, Elemento)
Si Top ≠ Nulo
Apuntador - Top
Repetir mientras Apuntador ≠ Nulo
Si Pila [Apuntador] = Elemento
Imprimir El Dato fue encontrado y Salir
Apuntador - Apuntador - 1
Fin del ciclo
Imprimir El Dato no se encontr
Si no:
Imprimir Pila Vaca
Salir
Operacin Eliminar:
El algoritmo compara para determinar si la Pila tiene algn dato, sino simplemente
desplegara Pila Vaca y saldr. De otra manera har un Recorrido y comparara con cada
uno de los Datos de la Pila hasta encontrar el dato que desea eliminar, mientras hace
15
esto copia cada uno de los datos a un arreglo Temp para cuando encuentre el Dato
regresar esos valores a la Pila. Si lo encuentra desplegara Eliminado el Dato y le
restara 1 a Top, de otra manera El Dato no encontrado.
Borrar (Pila, Temp, Top, Elemento)
Si Top ≠ Nulo
Apuntador1 - Top
Repetir mientras Apuntador1 ≠ Nulo
Si Pila[Apuntador1] = Elemento
Imprimir Eliminando el Dato
Repetir mientras Apuntador2 ≠ Nulo
Pila [Apuntador1]=Temp [Apuntador2]
Fin del ciclo
Top - Top - 1 y Salir
Si No:
Temp [Apuntador2] - Pila [Apuntador1]
Apuntador1 - Apuntador1 - 1
Apuntador2 - Apuntador2 + 1
Fin del ciclo
Imprimir Dato no encontrado
Si no:
Imprimir Pila Vaca
Salir
16
PRUEBAS.
Para crear el cdigo del programa en ensamblador, ingresamos a un editor de texto,
en este caso al Bloc de notas.
Despus de escribir el cdigo del programa guardamos este archivo en el disco local,
en la carpeta donde est MASM y le pondremos la extensin asm, en nuestro caso
p.asm
Iniciamos la ejecucin de nuestro programa ingresando al smbolo del sistema.
Al ingresar al smbolo del sistema buscamos el directorio en el disco local donde est
guardado el MASM, utilizando el comando cd.
Cuando estamos en el directorio utilizamos el comando ml que es el que nos permite
acceder al compilador y luego ponemos el nombre de nuestro archivo creado en el
block de notas, en este caso p.asm
Este nos genera la informacin del programa, y los errores si los tiene, adems nos
muestra dos archivos que crea, el archivo.obj y el archivo.exe.
Luego escribimos el nombre de nuestro archivo creado con extensin .exe, en nuestro
caso p.exe, y este nos muestra la ejecucin del programa.
17
18
MANUAL DE USUARIO.
Compilacin en ensamblador.
Especificaciones del sistema:
Este manual est diseado
especificaciones:
20
Pasos:
Abrimos un blog de notas:
En blog de notas nos servir para poder redactar nuestro cdigo en leguaje ensamblador
deber de verse de esta manera.
Una vez redactado el cdigo que deseamos compilar en lenguaje ensamblador pasamos a
guardar nuestro cdigo seleccionando la pestaa archivo seguido la opcin guardar como
21
Luego cortamos o copiamos nuestro archivo resultante que deber verse de la siguiente
forma.
22
Luego buscamos la carpeta con el nombre MASM6.11 y damos doble clic sobre esta
Dentro de esta carpeta nuevamente buscamos otra carpeta pero esta ves con el nombre BIN y
damos doble clic sobre esta.
23
Una vez terminado esto cerramos la venta y presionamos el botn de inicio en el campo de
bsqueda digitamos cmd y seleccionamos el resultado que nos da la bsqueda con el
mismo nombre cmd.
24
Al dar doble clic debera emerger una venta de la siguiente forma y digitamos el comando
cd.. y damos ENTER.
El comando cd.. nos permite retroceder en la ruta que nos da por defecto el cmd, luego
repetimos el comando una vez mas y deber quedar esta forma C:\> una ves aqu digitamos
cd pero sin .. y luego damos espacio y escribimos MASM6.11 debe quedar de la siguiente
forma.
25
Damos ENTER y luego digitamos nuevamente cd y esta vez damos espacio y escribimos BIN
y damos ENTER como notaran estamos creando la ruta de donde esta guardado nuestro
documento con nuestro cdigo .asm
Luego usaremos otro comando llamado ml, entonces digitamos ml damos espacio y
digitamos el nombre de nuestro cdigo que sera asa ml NOMBRE.asm que como ven la
imagen es ml PILA.asm.
26
Damos ENTER y es aqu donde MASM6.11 compila nuestro cdigo y debera mostrar el
siguiente mensaje.
Como podemos ver nuestro cdigo ha sido compilado y este nos muestra que a creada un File
para la corrida del programa que es terminacin .exe.
27
Ser este .exe ser este el File que nos permitir finalmente correr nuestro programa de la
siguiente manera simplemente digitamos el nombre de nuestro programa con la terminacin
.exe como lo vimos en la imagen anterior.
Ahora simplemente damos ENTER y nuestro programa se debera ejecutar sin problemas de
dar error debe ser debido a errores en el cdigo del programa, como podemos ver la corrida
de nuestro programa en este caso una pila.
28
29
CONCLUSIONES.
30
BIBLIOGRAFIA.
Los sitios que hemos utilizado para realizar este trabajo son los siguientes:
http://es.wikipedia.org/wiki/M%C3%A1quina_de_pila
http://www.it.uc3m.es/ttao/Hw02/index.html
http://www.dea.icai.upco.es/sadot/EyTC/Manual80x86.pdf
http://der-nick.com/lenguaje-ensamblador-manejo-de-pilas.html
31