You are on page 1of 14

ESCUELA SUPERIOR POLITCNICA DEL

LITORAL



FACULTAD DE INGENIERIA EN
EN ELECTRICIDAD Y COMPUTACIN
FIEC


LABORATORIO DE MICROPROCESADORES

Proyecto I parcial:
Ordenador de cifras decimales

Profesor:
Ing. Hugo Villavicencio Villavicencio

Alumno:
Jefferso Rafael Intriago Giler

Paralelo:
4


Fecha de presentacin:
12/07/2013







1. Enunciado del proyecto

Escribir una subrutina que: solicite el ingreso por teclado de nmeros enteros de dos dgitos
decimales, a medida que ingresan a memoria los organiza en sentido vertical en una
ventana de fondo amarillo caracteres negros, dibuje esta ventana con coordenada inicial (3,
5). Luego ordene los enteros de menor a mayor (investigue y aplique algoritmo bubble
sort) y los visualiza en otra ventana de fondo azul caracteres en blanco, defina esta nueva
ventana con coordenada inicial (3, 13). No borre la primera ventana de fondo amarillo. Con
tecla M regresar al men principal.







2. Diagrama de bloques





CODEVIEW
MASM

Computador

Microprocesador y memoria























3. Diagrama de flujo funcional del programa principal



Inicio
Asignar espacio a la
pila y definir
variables
DSAX
ESAX
CALL CLR1
CALL CLR2
07-21H INT
AL=T AL</ AL>:
Imprimir dato
tecleado
CALL ORDENAR
LLAMAR MACRO
SALIR
FIN









4. Descripcin del algoritmo o estrategia utilizada

Ejercicio 1
Inicia el programa.
Se declaran e inicializan las variables.
Se declaran y se dan valores a varias constantes.
Se traslada el contenido de DATA a AX.
Se traslada el contenido de Ax a DS.
Funcin 07h de la interrupcin 21h de MSDOS.
Se realiza la INT 21h.
Espera que ese teclee cualquier dato.
Se prueba que el valor ingresado.
Caso contrario se analiza si es un nmero.
Se vuelve a pedir una dato por teclado.
Si es T se ordena los datos y presenta en pantalla
Se carga AX con 4C00H.
Finalmente se realiza la INT 21H.
Fin del programa.


5. Listado del programa fuente en lenguaje ensamblador con comentarios en las lneas de
cdigo que considere fundamentales

;**********************************************************************
*************
; Programa: Ej_13.ASM
; Descripcin:
; ORDENAR ARREGLO DE MENOR A MAYOR: Escribir una subrutina que: solicite el
ingreso
; por teclado de nmeros enteros de dos dgitos decimales, a medida que ingresan a
; memoria los organiza en sentido vertical en una ventana de fondo amarillo
caracteres
; negros, dibuje esta ventana con coordenada inicial (3, 5). Luego ordene los enteros
; de menor a mayor (investigue y aplique algoritmo bubble sort) y los visualiza en
otra
; ventana de fondo azul caracteres en blanco, defina esta nueva ventana con
coordenada
; inicial (3, 13). No borre la primera ventana de fondo amarillo. Con tecla M regresar
; al men principal.
;
***********************************************************************
************

; ORDENAR ARREGLO DE MENOR A MAYOR
;------------------------------------------------------------------------------------------------------------------
----------
; Definicin de macro EXIT
EXIT MACRO
MOV AX, 4C00H
INT 21H
ENDM
;------------------------------------------------------------------------------------------------------------------
----------
.MODEL SMALL
.STACK 100H
.DATA
FILA DB 4 ; coordenadas
COLUMNA DB 20 ; coordenadas
DATA1 DB 40 DUP(?)
DATA2 DB 40 DUP(?)
MSJ DB 'Ingrese numeros de dos digitos: $'
MSJ1 DB 'Nombre: Eduardo Chancay Rojas Paralelo:3 $'
MSJ2 DB 'Matricula: 200806297 $'
mens1 db 2 Dup(10,13)
db " Programa ORDENAR",10,13 ;0A,0D
db " ======== =======",10,13,10,13
db " [1] Estudiante ",10,13
db " [2] Matricula ",10,13
db " [3] Inicio del programa ",10,13
db " [4] Salir ",10,13,10,13
db "Ingrese seleccion ...$"

.CODE
PRINCIPAL PROC FAR
MOV AX, @DATA
MOV DS, AX
MOV ES, AX
INI: CALL CLS
CALL PMENU
MOV DX,offset mens1
mov ah,9
int 21h
VUELTA: mov ah,7 ;Ingreso de caracter sin ECO
int 21h
cmp al,'1' ;nombre
jz nombre
cmp al,'2';matricula
jz matricula
cmp al,'3' ;OPCION INGRESAR
jz PRIM
cmp al,'4'
jz SALIR
JMP VUELTA
PRIM: CALL MTXT25X80; modo texto 25x80
CALL MENSAJE
LZO0: CALL CLRSCR1; limpia pantalla fija atributo

CALL CLRSCR2; crea pantalla fija atributo
MOV COLUMNA,8H
MOV FILA,4H
CALL PCURSOR
LEA DI,DATA1
MOV BH,14H
MOV DX,0
LZO2: MOV CX, 2
LZO1: MOV AH,7
INT 21H
CMP CX,2
JNE LAUX
CMP AL,'T'
JE LZ11
CLC
LAUX: CMP AL,'/'
JB LZO1
CLC
CMP AL,':'
JA LZO1
INC DX
STOSB
LOOP LZO1
MOV AL,13;retorno de cursor CR
MOV AH,0EH
INT 10H
INC BL
MOV CX,8
LZA: MOV AL,20H
MOV AH,0EH
INT 10H
LOOP LZA
MOV AL,[DI]-2
MOV AH,0EH
INT 10H
MOV AL,[DI]-1
MOV AH,0EH
INT 10H
MOV AL,10
MOV AH,0EH
INT 10H
DEC BH
JNZ LZO2
LZ11:
CALL ORDENAR
MOV COLUMNA,16H
MOV FILA,4H
CALL PCURSOR
LEA DI,DATA1
MOV BH,0
MOV CX,BX
LZB:
CALL VER
LOOP LZB
FINALIZAR: MOV AH,7
INT 21H
CMP AL,'M'
JNZ FINALIZAR
JMP INI
nombre: CALL CLS
CALL PNOMBRE
MOV FILA ,8H
MOV COLUMNA ,4H
CALL PCURSOR
MOV DX,offset MSJ1
mov ah,9
int 21h
FIN1: MOV AH,7
INT 21H
CMP AL,'M'
JNZ FIN1
JMP INI
matricula: CALL CLS
CALL PMATRICULA
MOV FILA ,8H
MOV COLUMNA ,4H
CALL PCURSOR
MOV DX,offset MSJ2
mov ah,9
int 21h
FIN2: MOV AH,7
INT 21H
CMP AL,'M'
JNZ FIN2
JMP INI
;**********************
SALIR: EXIT
PRINCIPAL ENDP
;*********************************************************************
; LISTADO DE PROCEDIMIENTOS (SUBRUTINAS)
;*********************************************************************
MENSAJE PROC NEAR
MOV AH, 09H; imprime cadena de caracteres
LEA DX, MSJ; direccin inicial de la cadena
INT 21H
RET
MENSAJE ENDP
;*********************************************************************
MTXT25X80 PROC NEAR; Modo Texto 25x80
MOV AH, 0; funcin 0 de BIOS
MOV AL, 3; el cdigo 3 define modo texto 25 filas 80 columnas
INT 10H
RET
MTXT25X80 ENDP
;**********************************************************************
PMENU PROC NEAR; limpia pantalla de texto
MOV AX, 0600H; AH=06 funcin de BIOS, AL=00(borra ventana)
MOV BH, 0D0H; atributo-fondo amarillo-caracteres negros
MOV CX, 0000H; fila 3, columna 5
MOV DX, 184FH; fila 25, columna 12
INT 10H
RET
PMENU ENDP
;**********************************************************************
PNOMBRE PROC NEAR; limpia pantalla de texto
MOV AX, 0600H; AH=06 funcin de BIOS, AL=00(borra ventana)
MOV BH, 0B7H; atributo-fondo amarillo-caracteres negros
MOV CX, 0000H; fila 3, columna 5
MOV DX, 184FH; fila 25, columna 12
INT 10H
RET
PNOMBRE ENDP
;**********************************************************************
PMATRICULA PROC NEAR; limpia pantalla de texto
MOV AX, 0600H; AH=06 funcin de BIOS, AL=00(borra ventana)
MOV BH, 0B7H; atributo-fondo amarillo-caracteres negros
MOV CX, 0000H; fila 3, columna 5
MOV DX, 184FH; fila 25, columna 12
INT 10H
RET
PMATRICULA ENDP
;**********************************************************************
CLRSCR1 PROC NEAR; limpia pantalla de texto
MOV AX, 0600H; AH=06 funcin de BIOS, AL=00(borra ventana)
MOV BH, 0E0H; atributo-fondo amarillo-caracteres negros
MOV CX, 0305H; fila 3, columna 5
MOV DX, 180CH; fila 25, columna 12
INT 10H
RET
CLRSCR1 ENDP
;**********************************************************************
CLRSCR2 PROC NEAR; limpia pantalla de texto
MOV AX, 0680H; AH=06 funcin de BIOS, AL=80(no borra ventana)
MOV BH, 017H; atributo-fondo azul-caracteres blancos
MOV CX, 030DH; fila 3, columna 13
MOV DX, 184FH; fila 25, columna 80
INT 10H
RET
CLRSCR2 ENDP
;*********************************************************************
PCURSOR PROC NEAR
MOV AH, 2; funcin 2 de BIOS posiciona cursor
MOV DH, FILA
MOV DL, COLUMNA
MOV BH, 0
INT 10H
RET
PCURSOR ENDP
;**************************************************************
CHANGE proc near
mov AL,[DI]
mov AH,[DI]+1
MOV BL,[DI]+2
mov BH,[DI]+3
mov [DI],BL
mov [DI]+1,BH
MOV [DI]+2,AL
mov [DI]+3,AH
RET
CHANGE ENDP
;***********************************************************
ORDENAR PROC NEAR
LEA DI, DATA1
SUB DX,2
LZ1: MOV CX,DX
LEA DI,DATA1
LZ2:
MOV AL,[DI]+1
MOV AH,[DI]
MOV BL,[DI]+3
MOV BH,[DI]+2
CMP BX,AX
JG LZP
CALL CHANGE
;RET
LZP: ;CLC
ADD DI,2
SUB CX,2
JNZ LZ2
SUB DX,2
JNZ LZ1
RET
ORDENAR ENDP
;*********************************************************************
VER proc near
MOV AL,[DI]
MOV AH,0EH
INT 10H
MOV AL,[DI]+1
MOV AH,0EH
INT 10H
INC FILA
CALL PCURSOR
ADD DI,2
RET
VER ENDP
;********************************************************************
; LIMPIA LA PANTALLA

CLS PROC NEAR
;pusha
MOV AX,0600H ;REQUEST SCROLL SCREEN
MOV BH,07H ;NORMAL
MOV CX,0000H ;FROM 00,00
MOV DX,184FH ;TO 24,79
INT 10H ;CALL BIOS
MOV DX,0
MOV AH,02 ;REQUEST SET CURSOR
MOV BH,00 ;PAGE 10
INT 10H ;CALL BIOS
;popa
RET
CLS ENDP

END PRINCIPAL
;*********************************************************************








6. Conclusiones

- El uso de procedimiento nos permite reducir el cdigo, ya que alguna veces se
necesitar volar una accin anterior(repetitiva) , con los procedimiento nos ahorra
el tedioso trabajo de volver a escribir cierto cdigo y aumentar las lneas de cdigo
volvindolo a la larga mas incomprensible y mas propenso a errores es su
ejecucin.
- El archivo make16 nos permite crear un archivo ejecutable (exe) para correr el
programa sin la necesidad de volver a cargar cada vez que sea necesario su uso,
adems con esto nos evitamos el conflicto entre el Windows xp con el Windows
seven el archivo punto exe corre en cualquier sistema operativo.
- El cdigo ASCII utiliza 7 bits para representar los caracteres, aunque inicialmente
empleaba un bit adicional (bit de paridad) que se usaba para detectar errores en la
transmisin. A menudo se llama incorrectamente ASCII a otros cdigos de
caracteres de 8 bits, como el estndar ISO-8859-1 que es una extensin que utiliza
8 bits para proporcionar caracteres adicionales usados en idiomas distintos al
ingls, como el espaol.


7. Recomendaciones
- Para editar el programa fuente usar cualquier editor de texto: edit, notepad,
notepad++, textpad. Una vez editado guardarlo con extensin .ASM, por
ejemplo P13.ASM, donde P13 representa el nombre del archivo fuente.
- Ser cautelosos al utilizar cada una de los comandos ya que cada uno tienes
diferentes funciones y cada una se utilizara en el momento adecuado.
- Los archivos de respaldo para editar, ensamblar y depurar se encuentran en el
mismo directorio Masm615 en la mquina virtual.
- Siempre es conveniente que la ventana de memoria muestre el contenido del
segmento de datos de su programa, de tal forma que se pueda hacer el
seguimiento a los cambios que ocurran con los datos residentes en memoria.






Anexos
1.- Inicio del programa

2.- Nombre de estudiante

3.- Matricula de estudiante

4.- Ordenando los nmeros

You might also like