Ayuda con un programa contraseña ensamblador
Publicado por Juan Carlos (1 intervención) el 15/04/2009 22:53:30
Hola necesito ayuda con un programa tiene algunos errores y no se cuales son por favor chequenmelos grax me urge
Programa STRU1.ASM el cual lee y valida una password.
PAGE 55,132 (longitud) (ancho)
TITLE STRU1 - PROGRAMA PASSWORD (STRU1.ASM) (texto)
;
; DESCRIPCION: Este programa solicita una password. Después de recibirla imprime el
; mensaje – password aceptada. Si después de tres intentos la contraseña no es valida
; - mensaje error.
;
;
EXTRN MESSAGE: FAR, KEYBD: FAR, CLSCREN: FAR ; mensaje, escribe y limpia
;
SCDEL MACRO ; Define macro
;
; MACRO para retardo de pantalla ; Define macro
;
MOV AH, 0 ; Mover el valor 0 a AH ; cargue función 0H en AH
INT 16H ; Instrucción que entrega al programa la versión del DOS que corre
ENDM ; Termina macro
;
STACK SEGMENT PARA STACK ´STACK´ ; Inicia el segmento
DB 64 DUP (´STACK ´) ; DB = definir byte(s) en 64H
STACK ENDS ; Fin del segmento
;
DATA SEGMENT PARA PUBLIC ´DATA´ ; Se definen los datos; Inicia el segmento
PUBLIC BLANK, BUFFMX, BUFFLN, CHAR ; variable carácter
;
MESO1 DB ´Proporcione password (6 caracteres). ´ , ´ $ ´ ; DB = definir byte(s)
MESO2 DB ´Password válida. ´ , ´ $ ´ ; DB = definir byte(s)
MESO3 DB ´Password no válida (Pulse cualquier tecla para continuar). ´ , ´ $ ´
MESO4 DB ´LOGOFF ´ , ´ $ ´ ; DB = definir byte(s)
;
BUFFMX DB 80 ; Tamaño máximo del buffer ; DB = definir byte(s) en 80H
BUFFLN DB ? ; Longitud de la cadena de entrada ; DB = definir byte(s)
CHAR DB 80 DUP (´ ´) , ´ $ ´ ; DB = definir byte(s) en 80H
;
PASS DB ´ A ´ , ´ B ´ , ´ C ´ , ´ 1 ´ , ´ 2 ´ , ´ 3 , ´ ; Password ; DB = definir byte(s)
COUNT DW 0 ; Contador de intentos ; Define una palabra (WORDA = DW)
BLANK DB ´ ´ ; DB = definir byte(s)
:
DATA ENDS ; Se definen los datos; Fin del segmento
;
CSEG SEGMENT PARA PUBLIC ´ CODE ´ ; Inicia el segmento
ASSUME CS : CSEG, DS : DATA, SS : STACK, ES : DATA
;
PPASS PROC FAR ; Un procedimiento dentro del segmento de código
PUSH DS ; Guarda la dirección del DS en la pila
SUB AX, AX ; Restar AX de AX (limpiar AX)
PUSH AX
;
MOV AX, SEG DATA ; Obtiene dirección del segmento de datos
MOV DS, AX ; Almacena dirección en DS
MOV ES, AX ; Mueve los contenidos de AX a ES
; Carga dirección del segmento ES
;
Programa STRU1.ASM el cual lee y valida una password.
PAGE 55,132 (longitud) (ancho)
TITLE STRU1 - PROGRAMA PASSWORD (STRU1.ASM) (texto)
;
; DESCRIPCION: Este programa solicita una password. Después de recibirla imprime el
; mensaje – password aceptada. Si después de tres intentos la contraseña no es valida
; - mensaje error.
;
;
EXTRN MESSAGE: FAR, KEYBD: FAR, CLSCREN: FAR ; mensaje, escribe y limpia
;
SCDEL MACRO ; Define macro
;
; MACRO para retardo de pantalla ; Define macro
;
MOV AH, 0 ; Mover el valor 0 a AH ; cargue función 0H en AH
INT 16H ; Instrucción que entrega al programa la versión del DOS que corre
ENDM ; Termina macro
;
STACK SEGMENT PARA STACK ´STACK´ ; Inicia el segmento
DB 64 DUP (´STACK ´) ; DB = definir byte(s) en 64H
STACK ENDS ; Fin del segmento
;
DATA SEGMENT PARA PUBLIC ´DATA´ ; Se definen los datos; Inicia el segmento
PUBLIC BLANK, BUFFMX, BUFFLN, CHAR ; variable carácter
;
MESO1 DB ´Proporcione password (6 caracteres). ´ , ´ $ ´ ; DB = definir byte(s)
MESO2 DB ´Password válida. ´ , ´ $ ´ ; DB = definir byte(s)
MESO3 DB ´Password no válida (Pulse cualquier tecla para continuar). ´ , ´ $ ´
MESO4 DB ´LOGOFF ´ , ´ $ ´ ; DB = definir byte(s)
;
BUFFMX DB 80 ; Tamaño máximo del buffer ; DB = definir byte(s) en 80H
BUFFLN DB ? ; Longitud de la cadena de entrada ; DB = definir byte(s)
CHAR DB 80 DUP (´ ´) , ´ $ ´ ; DB = definir byte(s) en 80H
;
PASS DB ´ A ´ , ´ B ´ , ´ C ´ , ´ 1 ´ , ´ 2 ´ , ´ 3 , ´ ; Password ; DB = definir byte(s)
COUNT DW 0 ; Contador de intentos ; Define una palabra (WORDA = DW)
BLANK DB ´ ´ ; DB = definir byte(s)
:
DATA ENDS ; Se definen los datos; Fin del segmento
;
CSEG SEGMENT PARA PUBLIC ´ CODE ´ ; Inicia el segmento
ASSUME CS : CSEG, DS : DATA, SS : STACK, ES : DATA
;
PPASS PROC FAR ; Un procedimiento dentro del segmento de código
PUSH DS ; Guarda la dirección del DS en la pila
SUB AX, AX ; Restar AX de AX (limpiar AX)
PUSH AX
;
MOV AX, SEG DATA ; Obtiene dirección del segmento de datos
MOV DS, AX ; Almacena dirección en DS
MOV ES, AX ; Mueve los contenidos de AX a ES
; Carga dirección del segmento ES
;
Valora esta pregunta


0