在DOSBOX环境下用汇编语言实现密码设置模拟 编写程序可以进行密码的设置(第一次)和修改(已设置密码)。要求输入的密码用*显示。
时间: 2023-07-25 15:15:02 浏览: 93
使用汇编语言编写求和程序,使用DOSbox验证
5星 · 资源好评率100%
下面是一个简单的汇编程序,可以在 DOSBox 环境下实现密码设置模拟,包括密码的设置和修改功能。该程序使用 BIOS 中断来获取键盘输入,并用 * 显示输入的密码。
```
; 密码设置模拟程序
.MODEL SMALL
.STACK 100h
.DATA
password DB 6 DUP('$') ; 存储密码
prompt1 DB 'Enter new password: $'
prompt2 DB 'Enter current password: $'
prompt3 DB 'Enter new password again: $'
success DB 'Password set successfully!$'
failure DB 'Password incorrect! Please try again.$'
asterisk DB '*', 0
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
; 设置新密码
MOV AH, 09h
LEA DX, prompt1
INT 21h
CALL GET_PASSWORD
MOV SI, OFFSET password
MOV [SI], AL
MOV [SI+1], AH
MOV [SI+2], BL
MOV [SI+3], BH
MOV [SI+4], CL
MOV [SI+5], CH
MOV DX, OFFSET success
JMP PRINT_MESSAGE
GET_PASSWORD PROC
; 获取密码
XOR AX, AX
MOV CX, 6
GET_CHAR:
MOV AH, 08h
INT 21h
CMP AL, 0Dh ; 回车结束输入
JE EXIT_GET_CHAR
CMP AL, 08h ; 退格键
JNE ADD_CHAR
CMP CX, 6
JE GET_CHAR ; 已经没有字符可以删除了
MOV DL, ' '
INT 21h
DEC SI
DEC CX
JMP GET_CHAR
ADD_CHAR:
MOV DL, asterisk
INT 21h
MOV [SI], AL
INC SI
INC CX
JMP GET_CHAR
EXIT_GET_CHAR:
MOV DL, 0
INT 21h
RET
GET_PASSWORD ENDP
; 修改密码
MOV AH, 09h
LEA DX, prompt2
INT 21h
CALL GET_PASSWORD
MOV SI, OFFSET password
CMP [SI], AL
JNE PASSWORD_INCORRECT
CMP [SI+1], AH
JNE PASSWORD_INCORRECT
CMP [SI+2], BL
JNE PASSWORD_INCORRECT
CMP [SI+3], BH
JNE PASSWORD_INCORRECT
CMP [SI+4], CL
JNE PASSWORD_INCORRECT
CMP [SI+5], CH
JNE PASSWORD_INCORRECT
MOV AH, 09h
LEA DX, prompt3
INT 21h
CALL GET_PASSWORD
CMP [SI], AL
JNE PASSWORD_INCORRECT
CMP [SI+1], AH
JNE PASSWORD_INCORRECT
CMP [SI+2], BL
JNE PASSWORD_INCORRECT
CMP [SI+3], BH
JNE PASSWORD_INCORRECT
CMP [SI+4], CL
JNE PASSWORD_INCORRECT
CMP [SI+5], CH
JNE PASSWORD_INCORRECT
MOV DX, OFFSET success
JMP PRINT_MESSAGE
PASSWORD_INCORRECT:
MOV DX, OFFSET failure
JMP PRINT_MESSAGE
PRINT_MESSAGE:
MOV AH, 09h
INT 21h
MOV AH, 4Ch
INT 21h
MAIN ENDP
END MAIN
```
该程序首先提示用户输入新密码,然后调用 GET_PASSWORD 过程获取用户输入的密码,并将密码存储在 password 变量中。如果用户已经设置了密码,则提示用户输入当前密码,并与存储的密码进行比较。如果密码匹配,则提示用户输入新密码,并再次将密码存储在 password 变量中。如果密码不匹配,则提示用户输入错误,并退出程序。最后,输出成功或失败的消息,并结束程序。
阅读全文