Ni siquiera ha impartido el curso de diseño de principios de microcomputadoras. Hagamos un menú. ¿Pueden ayudarme? Aquí están los requisitos detallados.
; 1. Menú
El contenido incluye: ingresar contraseña (cadena); ③ Verificar contraseña;
; 2. Ingrese una cadena
; Después de seleccionar esta opción, puede ingresar una cadena. Esta cadena se utilizará como contraseña conocida en la verificación de contraseña.
; 3. Verificación de contraseña
; Ingrese una cadena, si la cadena ingresada no coincide con la solicitud de contraseña: ¡Error de contraseña!; ingresado incorrectamente tres veces;
Salga del software y regrese a DOS. Si la cadena ingresada es consistente con la contraseña, le preguntará: ¡Contraseña correcta! y devolverá DOS: ¡La contraseña es correcta! ;;y regresar al menú principal.
; 4. Seleccione el elemento Salir en el menú principal, luego finalice el programa y regrese a DOS.
; Después de compilar con MASM5.0, los resultados de ejecución son los siguientes
; E: \asmasmgt; : 12333
; 1.1. Establecer contraseña 2. Ingresar contraseña 3. Salir
;
; 1. Establezca la contraseña de entrada 3. Salga
; Ingrese la contraseña: 12334
;
; 1. Establecer contraseña 2. Ingresar contraseña 3. Salir
;
; 1. Establezca la contraseña e ingrese la contraseña: 12333
;
; 1. Establecer contraseña 2. Ingresar contraseña 3. Salir
E: mmasgt
Segmento de datos
s0 db 0dh; , 0ah, '1.Establecer contraseña 2.Ingresar contraseña 3. Salir $'
s1 db 0dh, 0ah, 'Establecer contraseña: $'
s2 db 0dh, 0ah,' Ingrese la contraseña: $'
buff1 db 255, 255 dup(0)
buff2 db 255, 255 dup(0)
next_h db 0dh, 0ah
s3 db 0dh, 0ah, '¡Error de contraseña! ,0ah,'¡La contraseña es correcta! ', 0dh, 0ah, '$'
ERR_N DB 0
los datos terminan
segmento de código
asume cs: código, ds :data
proceso principal lejos<
inicio:
push ds
xor ax, ax
push ax
mov ax, datos
mov ds, ax
PUSH DS
POP ES
-; -----------------------
menú:
mov ah, 09
mov dx, desplazamiento s0
int 21h
nuevamente:
mov ah, 08
int 21h
cmp al, '1 '
je set_p
cmp al, '2'
je in_p
cmp al, '3 '
je exit_dos1
jmp otra vez
exit_dos1:
ret
set _p:
mov ah, 09
mov dx, desplazamiento s1
int 21h
mov ah, 0ah
mov dx, desplazamiento buff1
int 21h
MOV AL, 0
MOV ERR_N, AL; Borrar recuento de errores
menú jmp
in_p:
mov ah, 09
mov dx, desplazamiento s2
int 21h
mov ah, 0ah
mov dx
, compensación buff2
int 21h
mov bx , compensación buff1 1
mov al, [bx]
mov bx , compensación buff2 1
mov ah, [bx]
xor ah, al; ¿La longitud de la cadena establecida es igual a la cadena de entrada? ?
jnz err; no es igual a
MOV CH, 0
MOV CL, AL
MOV SI, OFFSET BUFF1 2
p>MOV DI, OFFSET BUFF2 2
CLD
REPE CMPSB
JNZ ERR
MOV AH, 09 p>
MOV DX, OFFSET S4
INT 21H
MENÚ JMP
ERR:
MOV AH, 09
p>
MOV DX, OFFSET S3
INT 21H
INC ERR_N
MOV AL, ERR_N
CMP AL, 3
JE EXIT_DOS
MENÚ JMP
;---------------- ------------- -
EXIT_DOS:
ret
final principal
el código finaliza
finalizar inicio