Está en la página 1de 25

Universidad de El Salvador

Facultad de Ingeniería y Arquitectura


Escuela de Ingeniería en Sistemas Informáticos

Microprogramación

“Tarea Ex Aula”

Catedrático: Lic. Angélica Nuila


Grupo de Laboratorio: 02
Tarea: 23

Integrantes:

Carnet Apellido, Nombre


RD07003 Romero Delgado, Carlos Aarón

Vázquez Martínez, Oscar Orlando

Fecha de entrega: Viernes 18 de Junio del 2010


Índice

Introducción………………………………………………………………………………………………………………………… 1
Objetivos……………………………………………………………………………………………………………………………… 2
Objetivo General…………………………………………………………………………………………………………………. 2
Objetivos Específicos…………………………………………………………………………………………………………… 2
Problema a Resolver……………………………………………………………………………………………………………. 3
Análisis del Problema………………………………………………………………………………………………………….. 4
MODULO PRINCIPAL……………………………………………………………………………………………………………. 5
MODULO LEER STRING (LEERS)……………………………………………………………………………………. 7
MODULO IMPRIMIR CADENAS (PRINT)……………………………………………………………………….. 8
MODULO CREAR ARCHIVO (CRARCH)………………………………………………………………………….. 9
MODULO ESCRIBIR EN ARCHIVO (WRARCH)………………………………………………………………... 10
MODULO CERRAR ARCHIVO (CLARCH)………………………………………………………………………… 11
MODULO LIMPIAR PANTALLA (CLR)……………………………………………………………………………. 12
Solución del Problema………………………………………………………………………………………………………… 13
MODULO PRINCIPAL…………………………………………………………………………………………………… 13
MODULO LEER STRING………………………………………………………………………………………………… 14
MODULO IMPRIMIR CADENAS……………………………………………………………………………………. 14
MODULO CREAR ARCHIVO………………………………………………………………………………………….. 15
MODULO ESCRIBIR ARCHIVO………………………………………………………………………………………. 15
MODULO CERRAR ARCHIVO………………………………………………………………………………………… 16
LIMPIAR PANTALLA………………………………………………………………………………………………………. 16
Codificación de la Solución………………………………………………………………………………………………….. 17
Conclusiones……………………………………………………………………………………………………………………….. 21
Recomendaciones……………………………………………………………………………………………………………….. 22
Bibliografía…………………………………………………………………………………………………………………………… 23
Introducción

La tecnología ha avanzado a pasos agigantados en los últimos años, y al mismo ritmo las
computadoras y los lenguajes de programación se fueron convirtiendo en algo común para la
mayoría de las personas es así como, surgió la necesidad de crear nuevos lenguajes que son mas
amigables al Usuario ,es decir , de Alto Nivel y que facilitan la programación.

Pero también este tipo de Lenguajes ha sacrificado eficiencia y eficacia en la ejecución de


programas, y es ahí donde radica la importancia de conocer la microprogramación, y de un
Lenguaje en Ensamblador ya que es la primera abstracción del Lenguaje Maquina y además en
algunos problemas de programación sería la única salida ya que al ocupar este lenguaje no
tenemos todas las limitantes que tendríamos al utilizar uno de nivel Superior.

Es así como utilizando una metodología de programación estructurada se pretende resolver de


manera eficaz un problema presentado implementándolo en Lenguaje Ensamblador
específicamente el de la familia 80/86.

1
Objetivos

Objetivo General

Resolver el problema planteado por medio del método solucionador de problemas, utilizando
lenguaje ensamblador del modelo de microprocesador 8086-8088.

Objetivos Específicos

Realizar el Planteamiento, Análisis y Diseño de la Solución para el problema planteado


utilizando el método solucionador de problemas.
Codificar la solución utilizando lenguaje ensamblador del modelo de microprocesadores
8086-8088.
Desarrollar y aplicar los conceptos aprendidos sobre el lenguaje ensamblador.

2
Problema a Resolver

3
Análisis del Problema

El programa consiste en copiar de una ubicación a otra una cadena con terminación nula,
para resolver el problema de manera conveniente se han tomado las siguientes consideraciones:

 Como Ubicación origen se tomara la de una cadena que se podrá ingresar en la ejecución
del programa y estará ubicada en el Registro de Datos (DS).

 Esta cadena leída tendrá un máximo de 255 caracteres siendo el ultimo el carácter ENTER
y posteriormente modificado para agregarle la terminación nula.

 Como Ubicación destino hemos elegido un archivo de texto plano el cual se creará al
seleccionar la opción copiar la cadena a un Archivo. Este archivo tendrá el nombre que
desee y se podrá guardar en el directorio que se quiera, siempre y cuando exista.

 Se tendrá en cuenta las restricciones para el manejo del Archivo.

Para dar solución al problema se utilizará para el análisis el método de la caja negra para conocer
las entradas, salidas y procesos y poder aplicar correctamente la programación estructurada, se
describirá cada debidamente cada variable así como también las restricciones pertinentes y
también se hará uso de la modularidad aprovechando los beneficios que conlleva su utilización.

Utilizando Top-Down para definir los módulos:

4
MODULO PRINCIPAL
Planteamiento Del Problema

Cadena de Caracteres Archivo de Texto.


Digitada por usuario.
Ruta y Nombre de
Archivo. Proceso

Análisis Del Problema

a) Variables de Salida

Nombre Tipo Descripción


Archivo Archivo de Texto Archivo creado con el nombre y en la ruta especificada por el
(.txt) usuario que contendrá la cadena de caracteres digitada.
ERR5 String (DB ‘…’) Notifica al usuario un error debido a una ruta inválida.
ERR5 String (DB ‘…’) Notifica al usuario un error por falta de handles para asignar.
ERR5 String (DB ‘…’) Notifica al usuario un acceso denegado a la ruta especificada.

b) Variables de Entrada

Nombre Tipo Descripción


CAD String (DB 255 DUP) Cadena de caracteres introducida por usuario.
RUTA String (DB 255 DUP) Cadena de caracteres con ruta y nombre de archivo a crear.

c) Restricciones

CAD <= 254 caracteres RUTA <= 254 caracteres (Formato Ej: A:\archivo.txt)

d) Proceso

Pedir cadena de caracteres origen (CAD).


Agregar Carácter nulo al final de la cadena origen.
Pedir ruta y nombre con el cual se creara el archivo (RUTA).
Crear archivo.
Verificar errores de creación de Archivo.
Escribir cadena introducida en archivo y cerrar.

5
e) Variables de Proceso

Nombre Tipo Descripción


BUF1 String (DB 255) Buffer que define el numero de bytes de RUTA
LEN1 Entero (DB ?) Representa la cantidad de Caracteres de RUTA
BUF2 String (DB 255) Buffer que define el numero de bytes de CAD
LEN3 Entero (DB ?) Representa la cantidad de caracteres de CAD
MANEJO Entero (DW ?) Guarda el manejador de archivo <- AX el número asignado al
handle si no hay error, en caso de haberlo CF será 1 y AX
contendrá el código de error.

6
MODULO LEER STRING (LEERS)

Planteamiento del Problema


Buffer Cadena con String
Longitud vacía. Longitud de cadena
Cadena vacía. Proceso

Análisis Del Problema

a) Variables de Salida

Nombre Tipo Descripción


CD String Cadena de caracteres introducida por usuario.

b) Variables de Entrada

Nombre Tipo Descripción


BUFFER String Buffer que define el numero de bytes de CD.
LEN Entero Recibe un dato vacio, guardara la longitud de CD.
CD Entero Recibe una cadena vacia, guardara la cadena digitada por el usuario.

c) Restricciones
No Hay.

d) Proceso

DX <- BUFFER AH <- 10 CL <- LEN SI <- CX CD[SI] <- 00H

7
MODULO IMPRIMIR CADENAS (PRINT)

Planteamiento Del Problema

Cadena de Caracteres Imprime cadena


en pantalla.

Proceso

Análisis Del Problema

a) Variables de Salida

Nombre Tipo Descripción


CADENA String Cadena de caracteres que se recibe como parámetro y será escrita en
pantalla.

b) Variables de Entrada

Nombre Tipo Descripción


CADENA String Cadena de caracteres que se recibe como parámetro.

c) Restricciones
No Hay.

d) Proceso

AH <- 9 DX <- CADENA


Imprimir cadena de caracteres recibida.

8
MODULO CREAR ARCHIVO (CRARCH)

Planteamiento del Problema

Ruta de archivo Manejador de Archivo


Modo de Creación
Manejador de Archivo Proceso

Análisis Del Problema

a) Variables de Salida

Nombre Tipo Descripción


MANARCH Entero Contiene el manejador de archivo <- AX es el número asignado al
handle si no hay error, en caso de haberlo CF será 1 y AX contendrá
el código de error.

b) Variables de Entrada

Nombre Tipo Descripción


RUT String Cadena de caracteres que se recibe como parámetro con ruta y
nombre de archivo a crear.
MODO Entero Recibe el modo de creación de archivo, 00H Normal , 02H Escondido,
04H Sistema, 06H Escondido y de sistema.
MANARCH Entero Recibe y guardara el manejador de archivo.

c) Restricciones
RUT debe ser ASCIIZ

d) Proceso

CL <- MODO DX <- RUT MANARCH <- AX

9
MODULO ESCRIBIR EN ARCHIVO (WRARCH)
Planteamiento del Problema

Cadena a escribir. No Hay.


Longitud cadena.
Manejador de Archivo Proceso

Análisis Del Problema

a) Variables de Salida
No Hay.

b) Variables de Entrada

Nombre Tipo Descripción


CADENA String Recibe cadena de caracteres que se escribirá en archivo.
LONG Entero Recibe el número de bytes de la cadena a escribir.
MANARCH Entero Recibe el manejador correspondiente del archivo a utilizar.

c) Restricciones
No Hay.

d) Proceso

AH <- 40H BX <- MANARCH CL <- LONG DX <- CADENA

10
MODULO CERRAR ARCHIVO (CLARCH)
Planteamiento del Problema

Manejador de No Hay


archivo.
Proceso

Análisis Del Problema

a) Variables de Salida
No Hay.

b) Variables de Entrada

Nombre Tipo Descripción


MANARCH Entero Recibe el manejador correspondiente del archivo a cerrar.

c) Restricciones
No Hay.

d) Proceso

AH <- 3EH BX <- MANARCH

11
MODULO LIMPIAR PANTALLA (CLR)
Planteamiento del Problema

No Hay Limpiar


pantalla.
Proceso

Análisis Del Problema

Variables de Salida
No Hay.

Variables de Entrada
No Hay.

Restricciones
No Hay.

Proceso

AX <- 03H INT 10h


Limpiar Pantalla.

12
Solución del Problema
MODULO PRINCIPAL

13
MODULO LEER STRING

MODULO IMPRIMIR CADENAS

14
MODULO CREAR ARCHIVO

MODULO ESCRIBIR ARCHIVO

15
MODULO CERRAR ARCHIVO

LIMPIAR PANTALLA

16
Codificación de la Solución

;------------------------------------------------------------------------------
; Alumnos: Carlos Aaron Romero Delgado MIP-115
; Oscar Orlando Vásquez Martínez
;
; TAREA 23
;
; Escriba un programa en TASM que copie una cadena con terminación nula, de una
; ubicación de origen a una ubicación destino. Debe asegurarse que el operando
; destino es lo suficientemente grande como para poder almacenar la cadena que
; se va a copiar.
;------------------------------------------------------------------------------

;------------------------------------------------------------------------------
;Definicion del segmento de pila
;------------------------------------------------------------------------------
PILA SEGMENT STACK
DW 64 DUP (?)
PILA ENDS
;------------------------------------------------------------------------------
;Definicion de las macros
;------------------------------------------------------------------------------
;-----------------------------------------
;Macro que se encarga de la lectura de una
;cadena con la funcion 10 de la int21h
;----------------------------------------
LEERS MACRO BUFFER,LEN,CAD
LEA DX,BUFFER ;Lee la cadena y la guarda en cad
MOV AH,10 ;con un valor maximo de 255bytes
INT 21H ;la cadena termina con enter
XOR CX,CX
MOV CL,[LEN]
MOV SI,CX
MOV CAD[SI],00H ;Se le asigna el caracter nulo al final de la cadena
ENDM
;---------------------------------------
;Macro que imprime una cadena de memoria
;---------------------------------------
PRINT MACRO CADENA
LEA DX,CADENA
MOV AH,9
INT 21H
ENDM
;----------------------------------------
;Macro que lee una variable sin eco
;utilizada para realizar una pausa
;----------------------------------------
GETCH MACRO
MOV AH,8

17
INT 21H
ENDM
;----------------------------------------
;Macro que borra el contenido en pantalla
;----------------------------------------
CLR MACRO
MOV AX,0003H
INT 10H
ENDM
;----------------------------------------
;Macro que Abre un Archivo
;----------------------------------------
CRARCH MACRO RUT,MODO,MANARCH
MOV AH,3CH
XOR CX,CX
MOV CL,MODO
LEA DX,RUT
INT 21H
MOV MANARCH,AX
ENDM
;----------------------------------------
;Macro que escribe una cadena de texto en
;un archivo abierto
;----------------------------------------
WRARCH MACRO MANARCH,LONG,CADENA
MOV AH,40H
MOV BX,MANARCH
XOR CX,CX
MOV CL,LONG
LEA DX,CADENA
INT 21H
ENDM
;----------------------------------------
;Macro que cierra un archivo
;----------------------------------------
CLARCH MACRO MANARCH
MOV AH,3EH
MOV BX,MANARCH
INT 21H
ENDM
;----------------------------------------
;Fin Definicion de Macros
;----------------------------------------

;------------------------------------------------------------------------------
;Definicion del segmento de datos
;------------------------------------------------------------------------------
DATOS SEGMENT
PRESENTACION DB ' UNIVERSIDAD DE EL SALVADOR',10,13
DB ' FACULTAD DE INGENIERIA Y ARQUITECTURA',10,13
DB ' ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS',10,13
DB ' MICROPROGRAMACION CICLO I/2010',10,10,13
DB 'TAREA23.ASM',10,13
DB 'Programa que captura una cadena y la guarda en una',10,13
DB 'ubicaciOn destino.',10,10,13

18
DB'Creado por: Romero Delgado, Carlos Aaron',10,13
DB' Vasquez Martinez, Oscar Orlando',10,10,10,13
DB'Presiona cualquier tecla para continuar...$'
DIGCAD DB10,10,13,'Digite una cadena',10,10,13,'-> $'
MENOPC DB10,10,13,'Seleccione la opcion que desea:',10,10,13
DB'1. Leer una nueva cadena de Texto',10,13
DB'2. Copiar Cadena a un Archivo de Texto',10,10,10,13
DB'Presione ESC para salir',10,10,13
DB'-> $'
CADEXITO DB10,10,13,'Cadena copiada con Exito.$'
CADRUTA DB 10,10,13,'Escriba la Ruta del Archivo donde desea
copiar la cadena:',10,13
DB 'Ejemplo: C:\archivo.txt',10,10,13
DB '-> $'
BUF1 DB 255
LEN1 DB ?
RUTA DB 255 DUP (32)
ERROR DB 'Se ha producido un error: $'
CODERR1 DB 'La ruta especificada no fue encontrada.$'
CODERR2 DB 'No hay handles disponibles para asignar.$'
CODERR3 DB 'Acceso Denegado.$'
MANEJO DW ?
BUF2 DB 255
LEN2 DB ?
CAD DB 255 DUP (0),0

DATOS ENDS
;------------------------------------------------------------------------------
;Definicion del segmento de codigo
;------------------------------------------------------------------------------
CODE SEGMENT
ASSUME CS:CODE, DS:DATOS, SS:PILA

MAIN: MOV AX,DATOS


MOV DS,AX

CIC1: CLR
PRINT PRESENTACION ;Imprime Presentacion
GETCH
CLR
PRINT DIGCAD ;Imprime La cadena Digite Texto
LEERS BUF2,LEN2,CAD

MENU: CLR
PRINT MENOPC ;Se Imprime el menú
MOV AH,1 ;Se lee un caracter
INT 21H ;caracter leido en AL
CMP AL,31H ;Se compara el carcacter con '1'
JE OPC1
CMP AL,32H ;Se compara el carcacter con '2'
JE OPC2
CMP AL,1BH ;Se compara el carcacter con tecla ESC
JE SALIR1

ERRO: JMP MENU

19
OPC1: PRINT DIGCAD ;Imprime La cadena Digite Texto
LEERS BUF2,LEN2,CAD
JMP MENU

OPC2: PRINT CADRUTA


LEERS BUF1,LEN1,RUTA
JMP CONT

SALIR1: JMP SALIR

CONT: CRARCH RUTA,00H,MANEJO ;Crea y Abre el Archivo


JNC ESCR ;Verifica que no haya error en la creacion del Archivo
PRINT ERROR
CMP MANEJO,0003H ;Asigna el codigo de error y lo imprime en pantalla
JNE NEXT1 ; 0003h -> La ruta no fue encontrada
PRINT CODERR1 ; 0004h -> No hay handles disponibles
GETCH ; 0005h -> Acceso denegado
JMP RETURN

NEXT1: CMP MANEJO,0004H


JNE NEXT2
PRINT CODERR2
GETCH
JMP RETURN

NEXT2: PRINT CODERR3


GETCH
JMP RETURN

ESCR: WRARCH MANEJO,LEN2,CAD ;Copia en el Archivo la cadena


CLARCH MANEJO ;Cierra el Archivo
PRINT CADEXITO ;Imprime cadena de Exito

RETURN: GETCH
JMP MENU

SALIR: MOV AX,4C00H ;Salir del Sistema


INT 21H

CODE ENDS
END MAIN

20
Conclusiones

Lenguaje ensamblador es y será uno de los lenguajes más potentes en programación y desarrollo
de software. Su potencia radica en 3 características fundamentales: Velocidad, Eficiencia de
Tamaño, y Flexibilidad; trabajando directamente con el microprocesador al ejecutar un programa,
ocupando menor espacio en memoria que un lenguaje de alto nivel, y porque todo lo que puede
hacerse con una máquina, puede hacerse en el lenguaje ensamblador.

El método solucionar de problemas es un medio conveniente y eficaz para resolver los problemas
planteados cuando utilizamos lenguaje ensamblador, pues definimos las variables y procesos
necesarias para llevar a cabo la solución y su correspondiente diseño facilitando de gran forma la
programación y el análisis de flujos de datos.

Sin duda el lenguaje ensamblador es una herramienta poderosa, por medio de la cual se puede
desarrollar programas y aplicaciones eficientes, mucho más rápidas que al utilizar un lenguaje de
alto nivel y de calidad tomando en cuenta que se pueden utilizar menos recursos y explotándolos
al máximo.

21
Recomendaciones
El lenguaje ensamblador puede resultar un arma de doble filo si no se usa
adecuadamente. La flexibilidad del lenguaje ensamblador es una de sus características
más poderosas, sin embargo, puede ser fatal para el equipo pues podemos afectar
recursos inesperadamente y es posible y sencillo realizar secuencias de instrucciones
inválidas o que afecten datos del sistema siendo este un riesgo.

Al ser de bajo nivel, el Lenguaje Ensamblador requiere más instrucciones para realizar un
mismo proceso, que al realizar el mismo proceso en un lenguaje de alto nivel. Por tanto
requiere el empleo de mayor tiempo de programación.

Debido a que requerimos más instrucciones primitivas para realizar procesos equivalentes
que en un lenguaje de alto nivel, crece el código fuente (el numero de instrucciones). Esto
es una desventaja porque dificulta el mantenimiento de los programas, y reduce la
productividad de los programadores.

22
Bibliografía

Pagina Web, Sociedad de Alumnos de Sistemas Computacionales ITZ , Manejo de


Archivos en ensamblador.
Disponible en: http://sascitz.blogspot.com/2009/04/manejo-de-archivos-en-
ensamblador_10.html.
Consultado: Martes 15 de junio de 2010, 1:25 pm.

Pagina Web, Interrupciones y manejo de archivos


Disponible en: http://moisesrbb.tripod.com/unidad6.htm
Consultado: Martes 15 de junio de 2010, 1:40 pm.

Material de clase y guias brindado por la cátedra de Microprogramación.


Universidad de El salvador, Facultad de Ingeniería y Arquitectura, Escuela de
Ingeniería en Sistemas, Ciclo I-2010.

23

También podría gustarte