Documente Academic
Documente Profesional
Documente Cultură
1
Proyecto Final de Informática Básica Trimestre: Invierno 2008
2
Proyecto Final de Informática Básica Trimestre: Invierno 2008
3
Proyecto Final de Informática Básica Trimestre: Invierno 2008
4
Proyecto Final de Informática Básica Trimestre: Invierno 2008
5
Proyecto Final de Informática Básica Trimestre: Invierno 2008
6
Proyecto Final de Informática Básica Trimestre: Invierno 2008
MSGI DB 'ÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉ'
DB 10,13,'ÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉÊËÈÉ'
DB 10,13,'ÈÉÊË BIENVENIDO!!! ÊËÈÉ'
DB 10,13,'ÈÉÊË ÊËÈÉ'
7
Proyecto Final de Informática Básica Trimestre: Invierno 2008
MSGE DB '**************************************************************************'
DB 10,13,'**************************************************************************'
DB 10,13,'**** ****'
DB 10,13,'**** ****'
DB 10,13,'**** SE HA PROVOCADO UN ERROR, EL NUMERO QUE INGRESO NO ESTA DENTRO ****'
DB 10,13,'**** DEL RANGO PERMITIDO (0 A 16) O BIEN HA TECLEADO ****'
DB 10,13,'**** CARACTERES INVALIDOS. VUELVA A INTERNTARLO... ****'
DB 10,13,'**** ****'
DB 10,13,'**** <<-PRESIONE UNA TECLA PARA CONTINUAR, PRESIONE ESC PARA SALIR-->>****'
DB 10,13,'**************************************************************************'
DB 10,13,'**************************************************************************$'
MSGC DB 10,13,'--------------------------------------------------------------------------'
DB 10,13,'--------------------------------------------------------------------------'
DB 10,13,'---- ----'
DB 10,13,'---- ----'
DB 10,13,'---- SI DESEA PROBAR CON OTRO NUMERO PRESIONE UNA TECLA ----'
DB 10,13,'---- ----'
DB 10,13,'---- ----'
DB 10,13,'---- ----'
DB 10,13,'---- <<-PRESIONE ESC PARA SALIR-->>----'
DB 10,13,'--------------------------------------------------------------------------'
DB 10,13,'--------------------------------------------------------------------------$'
MSGN DB 'INGRESE UN NUMERO: $'
MSGF DB 'EL FACTORIAL ES: $'
.CODE
INICIO:
;CARGAMOS EL SEGMENTO DE DATOS
MOV AX,@DATA
MOV DS,AX
;LLAMAR A LA MACRO QUE CONTIENE LAS FUNCIONES NECESARIAS PARA VALIDAR EL USURIO Y SU CONTRASEÑA
password
;LLAMAMOS A LA MACRO PARA LIMPIAR LA PANTALLA
LIMPIAR_PANTALLA
;PONEMOS LA PRESENTACION DEL PROGRAMA DEL PROGRAMA
IMPRIMIR_CAD MSGP
;HACEMOS UNA PAUSA HASTA QUE SE PREIONE UNA TECLA
LEER_SIN_ECO
CMP AL,1BH ;IDENTIFICAMOS SI LA TECLA PREIONADA FUE ESC
JE SALIROP
;HACEMOS UNA PAUSA HASTA QUE SE PRESIONE UNA TECLA
LIMPIAR_PANTALLA
;PONEMOS LAS INSTRUCCIONES DEL PROGRAMA
IMPRIMIR_CAD MSGI
LEER_SIN_ECO
CMP AL,1BH ;IDENTIFICAMOS SI LA TECLA PREIONADA FUE ESC
JE SALIROP
PREPARAR:
XOR DI,DI
CICLO_LIMPIAR:
8
Proyecto Final de Informática Básica Trimestre: Invierno 2008
MOV F[DI],00H
MOV M[DI],00H
MOV N[DI],00H
INC DI
CMP DI,14
JBE CICLO_LIMPIAR
LIMPIAR_PANTALLA
GOTOXY 8,5
;LLAMAMOS A LA MACRO QUE IMPRIME LOS MENSAJES, PIDIENDOLE QUE IMPRIMA EL MENSAJE PIDIENDO UN
;NUMERO
IMPRIMIR_CAD MSGN
XOR DI,DI
;LEEMOS EL NUMERO INGRESADO, LE RESTAMOS 30H Y LO GUARDAMOS EN N[DI]
CICLO_LEER:
LEER_ECO
CMP AL,0DH ;IDENTIFICAR TECLA ENTER
JE INICIALIZACION
SUB AL,30H
MOV N[DI],AL
INC DI
JMP CICLO_LEER
INICIALIZACION:
;SE COMPROBARA QUE EL NUMERO INGRESADO NO TENGA MAS DE DOS DIGITOS, DE SER ASI SE MANDARA EL
;MENSAJE DE ERROR, SI TIENE 1 DIGITO O 2 SE COMPROBARA QUE ESTEN EN EL RANGO VALIDO
CMP DI,02H
JA ERROR
JE DOS_DIGITOS
CMP DI,00H
JE ERROR
UN_DIGITO:
CMP DI,09H
JA ERROR
JMP FACTORIAL
SALIROP:
JMP SALIR
DOS_DIGITOS:
CMP N[0],01H
JA ERROR
CMP N[1],06H
JA ERROR
XOR AX,AX
XOR BX,BX
;HACEMOS UN AJUSTE CON EL FIN DE "CONVERTIR" EL NUMERO DECIMAL DE DOS DIGITOS INGRESADO EN UNO
;HEXADECIMAL DE UN SOLO DIGITO
MOV AL,N[0]
MOV BL,0AH
MUL BL
ADD N[1],AL
MOV AL,N[1]
MOV N[0],AL
JMP FACTORIAL
;EL PROGRAMA LLEGARA A LA ETIQUETA DE ERROR SI ES QUE EL NUMERO INGRESADO ESTA FUERA DEL RANGO
;O SI LO QUE SE TECLEO SON CARACTERES INVALIDOS
ERROR:
LIMPIAR_PANTALLA
IMPRIMIR_CAD MSGE
LEER_SIN_ECO
CMP AL,1BH
JE SALIROP
JMP PREPARAR
FACTORIAL:
;CL ES EN CONTADOR QUE SE VA INCREMENTANDO EN 1 PARA HACER EL FACTORIAL
MOV CL,01H
MOV M[0],01H
XOR BX,BX
XOR AX,AX
XOR SI,SI
XOR DI,DI
9
Proyecto Final de Informática Básica Trimestre: Invierno 2008
;EN ESTE CICLO SE MULTIPLICA CL POR CADA UNO DE LOS DIGITOS DE M,ES DECIR MULTIPLICA CL POR EL
;NUMERO DE
;14 DIGITOS M, EL RESULTADO SE VA GUARDANDO EN A, EN A[SI] LA PRIMERA CIFRA DEL RESULTADO DE LA
;MULTIPLICACION DE M[SI] Y EN A[SI+1] LA SEGUNDA CIFRA, POR LO QUE A[SI+1] ES UNA ESPECIE DE
;ACARREADOR.
;LUEGO EL RESULTADO TOTAL, YA CONDIREANDO LOS ACARREOS SE PASA A F MEDIANTE SUMAS, SE HACE UN
;AJUSTE EN LAS SUMAS Y F[SI+1] SE CONVIERTE EN UN ACARREADOR PARA ESAS SUMAS.
CICLO1:
MOV AL,CL
MUL M[SI]
AAM
MOV A[SI],AL
MOV A[SI+1],AH
XOR AX,AX
MOV AL,A[SI]
ADD AL,F[SI]
AAA
MOV F[SI],AL
ADD A[SI+01H],AH
MOV AL,A[SI+01H]
ADD F[SI+01H],AL
INC SI
INC BL
CMP BL,0DH
JBE CICLO1
MOV SI,00H
MOV BL,00H
;LUEGO DEL PRIMER CICLO SE PASA A ESTE EN DONDE SE TRANSFIRE TODO EL VALOR DE F A M, TAMBIEN SE VA
;LIMPIANDO M VOLVIENDO A PONER TODOS SUS DIGITOS EN CERO.
CICLO2:
MOV AL,F[SI]
MOV M[SI],AL
MOV AL,00H
MOV F[SI],AL
INC SI
INC BL
CMP BL,0DH
JBE CICLO2
MOV SI,00H
MOV BL,00H
INC CL
CMP CL,N[DI]
JBE CICLO1
JMP RESULTADO
PREPARAROP:
JMP PREPARAR
RESULTADO:
GOTOXY 8,6
;LLAMAMOS A LA MACRO PARA IMPRIMIR EL MENSAJE DE RESULTADO
IMPRIMIR_CAD MSGF
;IMPRIMIMOS EL FACTORIAL
MOV SI,0EH
;EL RESULTADO DEL FACTORIAL QUEDA AL ULTIMO ALMACENADO EN M, ESTE CICLO SIRVE PARA IMPRIMIR TODOS
10
Proyecto Final de Informática Básica Trimestre: Invierno 2008
;LOS DIGITOS DE M.
CICLO_RESULTADO:
DEC SI
IMPRIMIR_CAR M[SI]
CMP SI,00H
JNE CICLO_RESULTADO
;EN ESTA ETIQUETA SE HACE QUE EL PROGRAMA IMPRIMA EL LETRERO DE QUE HACER SI SE DESEA CALCULAR
;OTRO FACTORIAL O SI SE DESEA SALIR.
CONTINUAR:
IMPRIMIR_CAD MSGC
LEER_SIN_ECO
CMP AL,1BH ;IDENTIFICAMOS SI LA TECLA PREIONADA FUE ESC
JNE PREPARAROP
SALIR:
MOV AH,4CH
INT 21H
END INICIO
LIMPIAR_PANTALLA MACRO
MOV AH,00H
MOV AL,03H
INT 10H
ENDM
LIMPIAR_PANTALLA2 MACRO
MOV AX,0600H
MOV BH,17H
MOV CX,0000H
MOV DX,1484FH
INT 10H
ENDM
COLOR_PANTALLA MACRO COLOR
MOV AH,00 ;INICIALIZA COLOR DE FONDO
MOV BL,COLOR ;LO INICIALIZA EN EL COLOR PEDIDO
INT 10H
ENDM
11
Proyecto Final de Informática Básica Trimestre: Invierno 2008
LEER_ECO MACRO
MOV AH,01H
INT 21H
ENDM
;LEER UNA TECLA SIN ECO, PUEDE EMPLEARSE PARA SIMULAR EL INGRESO DE CONTRASEÑAS O PARA HACER UNA
PAUSA EN EL PROGRAMA
LEER_SIN_ECO MACRO
MOV AH,07H
INT 21H
ENDM
;LA COMPONENTE DEL PROGRAMA QUE VALIDA EL USUARIO Y CONTRASEÑA DEFINIDA COMO UNA MACRO
password macro
.data
msgtitulo db '*** INGRESO AL SISTEMA ***',13,10,''
db 10,13,'PARA ENTRAR AL SISTEMA INGRESE UN NOMBRE DE USUARIO Y CONTRASENNA VALIDOS'
db 10,13,'ADVERTENCIA: AL HACER 3 INTENTOS ERRONEOS EL SISTEMA SE BLOQUEARA',13,10,'$'
msgusuario db 10,13,'INGRESE EL NOMBRE DE USUARIO: $'
msgcontra db 10,13,'INGRESE LA CONTRASENA: $'
msgcorrecto db 10,13,'<<<DATOS CORRECTOS, AHORA ESTA DENTRO DEL SISTEMA>>>$'
msgincorrecto db 10,13,'DATOS INCORRECTOS$'
msgnuevamente db ', INTENTE NUEVAMENTE. <>INTENTOS SOBRANTES: $'
msgbloq db 10,13,'<<<EL SISTEMA SE HA BLOQUEADO>>>$'
msgpausa db 10,13,'PRESIONE UNA TECLA PARA CONTINUAR$'
msgsalir db 10,13,'PREIONE UNA TECLA PARA TERMINAR$'
datosok db 'E','X','A','M','E','N','F','I','N','A','L'
t db ?
y db ?
.code
main:
mov ax,@data
mov ds,ax
mov t,3
limpiar_pantalla
xor si,si
xor ax,ax
gotoxy 24,1
imprimir_cad msgtitulo
inic:
Imprimir_cad msgusuario
Usuario:
leer_eco
cmp al,0dh ;Identificar tecla "enter"
je Ready
mov y[si],al
inc si
jmp Usuario
Ready:
Imprimir_cad msgcontra
Contrasena:
leer_sin_eco
cmp al,0dh ;Identificar tecla "enter"
je inic_checar
12
Proyecto Final de Informática Básica Trimestre: Invierno 2008
mov y[si],al
mov al, '*'
sub al,30h
imprimir_car al
inc si
jmp contrasena
inic_checar:
xor si,si
xor cl,cl
Ciclo_checar:
mov al,datosok[si]
cmp y[si], al
jne invalido
inc si
inc cl
cmp cl,0ah
jbe ciclo_checar
jmp correcto
INIC2:
imprimir_cad msgnuevamente
imprimir_car t
imprimir_cad msgpausa
leer_sin_eco
limpiar_pantalla
JMP INIC
invalido:
Imprimir_cad msgincorrecto
dec t
cmp t, 0
ja inic2
Imprimir_cad msgbloq
imprimir_cad msgsalir
leer_sin_eco
jmp salir
correcto:
Imprimir_cad msgcorrecto
imprimir_cad msgpausa
leer_sin_eco
ende
13