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
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…………………………………………………………………………………………………………………. Objetivos Específicos…………………………………………………………………………………………………………… Problema a Resolver……………………………………………………………………………………………………………. Análisis del Problema………………………………………………………………………………………………………… MODULO PRINCIPAL……………………………………………………………………………………………………………. MODULO LEER STRING (LEERS)……………………………………………………………………………………. 7

5

4

3

2

2

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.

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.modelo de microprocesador 8086-8088. Objetivos Específicos Codificar la solución utilizando lenguaje ensamblador del

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

8086-8088.

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

Problema a Resolver

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:

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 Digitada por usuario. Ruta y Nombre de Archivo.

Digitada por usuario.  Ruta y Nombre de Archivo. Análisis Del Problema a) Variables de Salida

Análisis Del Problema

a) Variables de Salida

Proceso

Archivo de Texto.

a) Variables de Salida Proceso  Archivo de Texto. Nombre Tipo Descripción Archivo Archivo de

Nombre

Tipo

Descripción

Archivo

Archivo de Texto (.txt)

Archivo creado con el nombre y en la ruta especificada por el 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

d) Proceso

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

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.

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.

MODULO LEER STRING (LEERS)

Planteamiento del Problema

Buffer

Longitud vacía.

Cadena vacía.

Problema  Buffer  Longitud vacía.  Cadena vacía. Análisis Del Problema a) Variables de Salida

Análisis Del Problema

a) Variables de Salida

Proceso

Análisis Del Problema a) Variables de Salida Proceso  Cadena con String  Longitud de cadena

Cadena con String Longitud de cadena

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

MODULO IMPRIMIR CADENAS (PRINT)

Planteamiento Del Problema

Cadena de Caracteres

(PRINT) Planteamiento Del Problema  Cadena de Caracteres Análisis Del Problema a) Variables de Salida Proceso

Análisis Del Problema

a) Variables de Salida

Proceso

Análisis Del Problema a) Variables de Salida Proceso  Imprime cadena en pantalla. Nombre Tipo

Imprime cadena en pantalla.

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

Imprimir cadena de caracteres recibida.

DX <- CADENA

MODULO CREAR ARCHIVO (CRARCH)

Planteamiento del Problema

Ruta de archivo Modo de Creación Manejador de Archivo

Análisis Del Problema

a) Variables de Salida

de Archivo Análisis Del Problema a) Variables de Salida Proceso  Manejador de Archivo Nombre Tipo

Proceso

Manejador de Archivo

a) Variables de Salida Proceso  Manejador de Archivo Nombre Tipo Descripción MANARCH Entero

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

MODULO ESCRIBIR EN ARCHIVO (WRARCH)

Planteamiento del Problema

Cadena a escribir. Longitud cadena. Manejador de Archivo

a escribir.  Longitud cadena.  Manejador de Archivo Análisis Del Problema a) Variables de Salida

Análisis Del Problema

a) Variables de Salida

No Hay.

b) Variables de Entrada

Proceso

No Hay.

Salida No Hay. b) Variables de Entrada Proceso  No Hay. Nombre Tipo Descripción CADENA String

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

MODULO CERRAR ARCHIVO (CLARCH)

Planteamiento del Problema

Manejador de

archivo.

Planteamiento del Problema  Manejador de archivo. Análisis Del Problema a) Variables de Salida No Hay.

Análisis Del Problema

a) Variables de Salida

No Hay.

b) Variables de Entrada

Proceso

No Hay

Salida No Hay. b) Variables de Entrada Proceso  No Hay Nombre Tipo Descripción MANARCH Entero

Nombre

Tipo

Descripción

MANARCH

Entero

Recibe el manejador correspondiente del archivo a cerrar.

c) Restricciones

No Hay.

d) Proceso

AH <- 3EH

BX <- MANARCH

MODULO LIMPIAR PANTALLA (CLR)

Planteamiento del Problema

No Hay

LIMPIAR PANTALLA (CLR) Planteamiento del Problema  No Hay Proceso Análisis Del Problema Variables de Salida

Proceso

Análisis Del Problema

Variables de Salida

No Hay.

Variables de Entrada

No Hay.

Restricciones

No Hay.

Proceso

AX <- 03H

Limpiar Pantalla.

INT 10h

de Entrada No Hay. Restricciones No Hay. Proceso AX <- 03H  Limpiar Pantalla. INT 10h

Limpiar

pantalla.

Solución del Problema

MODULO PRINCIPAL

Solución del Problema MODULO PRINCIPAL 13

MODULO LEER STRING

MODULO LEER STRING MODULO IMPRIMIR CADENAS 14

MODULO IMPRIMIR CADENAS

MODULO LEER STRING MODULO IMPRIMIR CADENAS 14

MODULO CREAR ARCHIVO

MODULO CREAR ARCHIVO MODULO ESCRIBIR ARCHIVO 15

MODULO ESCRIBIR ARCHIVO

MODULO CREAR ARCHIVO MODULO ESCRIBIR ARCHIVO 15

MODULO CERRAR ARCHIVO

MODULO CERRAR ARCHIVO LIMPIAR PANTALLA 16

LIMPIAR PANTALLA

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 MOV AH,10 INT 21H XOR CX,CX MOV CL,[LEN] MOV SI,CX MOV CAD[SI],00H

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

;Lee la cadena y la guarda en cad ;con un valor maximo de 255bytes ;la cadena termina con enter

;Se le asigna el caracter nulo al final de la cadena

MOV AH,8

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 ' DB ' DB ' DB '

UNIVERSIDAD DE EL SALVADOR',10,13 FACULTAD DE INGENIERIA Y ARQUITECTURA',10,13

ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS',10,13

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

DB 'Creado por:

DB '

DB 'Presiona cualquier tecla para continuar

Romero Delgado, Carlos Aaron',10,13

Vasquez Martinez, Oscar Orlando',10,10,10,13

$'

DIGCAD

DB 10,10,13,'Digite una cadena',10,10,13,'-> $'

MENOPC

DB 10,10,13,'Seleccione la opcion que desea:',10,10,13

CADEXITO

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 '-> $' DB 10,10,13,'Cadena copiada con Exito.$'

CADRUTA

DB 10,10,13,'Escriba la Ruta del Archivo donde desea

copiar la cadena:',10,13

BUF1

DB 'Ejemplo: C:\archivo.txt',10,10,13 DB '-> $' 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 LEERS BUF2,LEN2,CAD

;Imprime La cadena Digite Texto

MENU: CLR PRINT MENOPC MOV AH,1 INT 21H CMP AL,31H JE OPC1 CMP AL,32H JE OPC2 CMP AL,1BH JE SALIR1

;Se Imprime el menú ;Se lee un caracter ;caracter leido en AL ;Se compara el carcacter con '1'

;Se compara el carcacter con '2'

;Se compara el carcacter con tecla ESC

ERRO:

JMP MENU

OPC1: PRINT DIGCAD LEERS BUF2,LEN2,CAD JMP MENU

;Imprime La cadena Digite Texto

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 JMP RETURN

; 0005h

->

Acceso denegado

NEXT1: CMP MANEJO,0004H JNE NEXT2 PRINT CODERR2 GETCH JMP RETURN

NEXT2: PRINT CODERR3 GETCH JMP RETURN

ESCR: WRARCH MANEJO,LEN2,CAD CLARCH MANEJO PRINT CADEXITO

RETURN:

GETCH

JMP MENU

;Copia en el Archivo la cadena ;Cierra el Archivo ;Imprime cadena de Exito

SALIR: MOV AX,4C00H INT 21H

;Salir del Sistema

CODE ENDS

END MAIN

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.

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.Recomendaciones Al ser de bajo nivel, el Lenguaje Ensamblador requiere más instrucciones para realizar un mismo

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.o que afecten datos del sistema siendo este un riesgo. Debido a que requerimos más instrucciones

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.realizar el mismo proceso en un lenguaje de alto nivel. Por tanto requiere el empleo de

Bibliografía

Pagina Web, Sociedad de Alumnos de Sistemas Computacionales ITZ , Manejo de Archivos en ensamblador.Bibliografía Disponible en: http://sascitz.blogspot.com/2009/04/manejo-de-archivos-en- ensamblador_10.html. Consultado:

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 archivosConsultado: Martes 15 de junio de 2010, 1:25 pm. Disponible en: http://moisesrbb.tripod.com/unidad6.htm

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.de archivos Disponible en: http://moisesrbb.tripod.com/unidad6.htm Consultado: Martes 15 de junio de 2010, 1:40 pm. 23