martes, 4 de abril de 2017

Programa Final de la Unidad



; PROGRAMA : pe11_dt1.asm 

; FUNCION : Pide tres datos hasta agotar la longitud de cada uno.
; REALIZADO POR :Jose Juan Muñiz Hernandez
----------------------------------------------------------------

; DECLARACION DE CONSTANTES
--------------------------------------------------

 CR EQU 13  ; Constante CR (Retorno de carro)
LF EQU 10  ; Constante LF (Salto de l?nea)
TECLADO EQU 8
IMPRIMIR EQU 9
FIN EQU 4C00H
DOS EQU 21H
BIOS EQU 10H
TAB EQU 09H
BELL EQU 07H
----------------------------------------------------------------

 ; DECLARACION DEL SEGMENTO DE DATOS
----------------------------------------------------------------

    DATOS SEGMENT
NOMBRE DB 30 DUP(32),'$'
DIR DB 30 DUP(32),'$'
TLF DB 15 DUP(32),'$'
MENS1 DB 'NOMBRE : $'
COLORES DB 11001111B ; Atributo de 'NOMBRE : $'
MENS2 DB 'DIRECCION: $'
MENS3 DB 'TELEFONO : $'
ENTERR DB CR,LF,'$'
DATOS ENDS
----------------------------------------------------------------

; DECLARACION DEL SEGMENTO DE PILA
--------------------------------------------------------------

PILA SEGMENT STACK
DB 64 DUP('PILA')
PILA ENDS
-----------------------------------------------------
; DECLARACION DEL SEGMENTO DE CODIGO
----------------------------------------------------------------

CODIGO SEGMENT
ASSUME CS:CODIGO,DS:DATOS,SS:PILA
INICIO:
MOV AX,DATOS  ; pone el inicio del segmento de datos en el registro AX
MOV DS,AX ; pone el inicio dle segmento de datos en su registro correspondiente
; DS, mediante el registro AX

CALL MODO_DE_VIDEO  ; Establece modo de video
MOV DX,OFFSET MENS1  ; Imprimir MENS1: 'NOMBRE: '
CALL ESCRIBE
MOV SI,OFFSET NOMBRE  ; Direccion destino del nombre
MOV CX,30 ; Longitud del nombre
CALL PEDIR ; Solicitud de datos
CALL SALTO_DE_LINEA
MOV DX,OFFSET MENS2 ; Imprimir MENS2: 'DIRECCION: '
CALL ESCRIBE
MOV SI,OFFSET DIR ; Direccion destino de la direcci?n
MOV CX,30 ; Longitud de la direccion
CALL PEDIR ; Solicitud de datos
CALL SALTO_DE_LINEA
MOV DX,OFFSET MENS3 ; Imprimir MENS3 'TELEFONO: '
CALL ESCRIBE
MOV SI,OFFSET TLF ; Direccion destino del telefono
MOV CX,15 ; Longitud del telefono
CALL PEDIR ; Solicitud de datos
MOV DX,OFFSET ENTERR ; Imprimir salto de linea 3 veces
CALL ESCRIBE
CALL ESCRIBE
CALL ESCRIBE
MOV DX,OFFSET NOMBRE ; Imprimir nombre capturado
CALL ESCRIBE
CALL SALTO_DE_LINEA
MOV DX,OFFSET DIR ; Imprimir direccion capturado
CALL ESCRIBE
CALL SALTO_DE_LINEA
MOV DX,OFFSET TLF ; Imprimir telefono capturado
CALL ESCRIBE
CALL SALTO_DE_LINEA
CALL SALIR ; Fin del programa
-----------------------------------------------------------------------

; Procedimiento PEDIR. Solicita un dato y lo guarda en la memoria
; Entrar en SI la direcci?n de memoria donde almacenar los datos
; Entrar en CX el n?mero de caracteres del dato
-----------------------------------------------------------------------


PEDIR PROC NEAR
BUCLE:
MOV AH,TECLADO ; Leer una tecla
INT DOS
MOV [SI],AL ; Guardar tecla en memoria
MOV AH,2 ; Imprimir la tecla o caracter
MOV DL,AL
INT DOS
INC SI ; Incrementar puntero de memoria
LOOPNZ BUCLE ; Repetir hasta agotar la longitud (Loop While Not Zero)
RET
PEDIR ENDP
-----------------------------------------------------------------------


; Procedimiento ESCRIBE. Escribe en pantalla una cadena
; Entrar en DX la direcci?n de la cadena o variable con cadena
-----------------------------------------------------------------------


ESCRIBE PROC NEAR
MOV AH,IMPRIMIR ; Servicio del DOS para imprimir cadena
INT DOS
RET
ESCRIBE ENDP

;PROCEDIMIENTO QUE IMPRIME SALTO DE LINEA
SALTO_DE_LINEA PROC NEAR
MOV DX,OFFSET ENTERR
CALL ESCRIBE
RET
SALTO_DE_LINEA ENDP

; ESTABLECE MODO DE VIDEO
MODO_DE_VIDEO PROC NEAR
MOV AX,3 ; Establecer modo 80x25 car. 16 col.
INT BIOS
RET
MODO_DE_VIDEO ENDP

; TERMINA PROGRAMA
SALIR PROC NEAR
MOV AX, FIN ;Mueve la instruccion para terminar el programa.
INT DOS ;Ejecuta la interrupci?n.
RET
SALIR ENDP

CODIGO ENDS
END INICIO




0 comentarios:

Publicar un comentario