;=====================================================================
; 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