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 : Yesenia Guerrero
 ; FECHA : martes 4 abril 2017
 ;=====================================================================

; 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

No hay comentarios:

Publicar un comentario