汇编x86 密码设置模拟 编写程序可以进行密码的设置(第一次)和修改(已设置密码)。要求输入的密码用*显示
时间: 2023-11-07 21:17:24 浏览: 47
好的,这是一个关于汇编x86的密码设置模拟的编程问题。我可以提供一些思路和部分代码,但我需要先了解一些细节。
首先,你的程序需要在什么样的环境下运行?是在DOS环境下还是在Windows环境下?另外,你是否需要将密码保存在内存中,以便在后续的程序中使用?
其次,你希望用户输入密码时,输入的字符是否需要被屏蔽(即用*替代)?如果需要,你需要在哪些地方实现这个功能?
最后,你的程序需要提供什么样的用户界面,以便用户进行密码设置和修改?
请提供这些细节信息,以便我更好地帮助你解决问题。
相关问题
汇编语言密码设置模拟 编写程序可以进行密码的设置(第一次)和修改(已设置密码)。要求输入的密码用*显示。
以下是汇编语言的一种实现方式,适用于x86架构的计算机:
```
; 密码设置模拟程序
.MODEL SMALL
.STACK 100H
.DATA
pwd DB 6 DUP (?) ; 存储密码的数组,假设密码为6位
msg1 DB '请输入密码:$'
msg2 DB '密码设置成功!$'
msg3 DB '请输入原密码:$'
msg4 DB '请输入新密码:$'
msg5 DB '密码修改成功!$'
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX ; 初始化数据段寄存器
; 设置密码
MOV AH, 09H ; 显示提示信息
LEA DX, msg1
INT 21H
; 输入密码,用*代替
MOV CX, 6 ; 假设密码为6位
LEA SI, pwd
MOV AH, 08H ; 屏幕输入
READ:
INT 21H
CMP AL, 0DH ; 检查是否输入回车
JE SETPWD
MOV BL, AL ; 保存输入的字符
MOV AL, '*' ; 显示*
INT 10H
MOV [SI], BL ; 保存密码
INC SI
LOOP READ
SETPWD:
LEA DX, msg2
INT 21H ; 显示密码设置成功信息
JMP END
; 修改密码
CHGPWD:
MOV AH, 09H ; 显示提示信息
LEA DX, msg3
INT 21H
; 输入原密码,用*代替
MOV CX, 6 ; 假设密码为6位
LEA SI, pwd
MOV AH, 08H ; 屏幕输入
CHECK:
INT 21H
CMP AL, 0DH ; 检查是否输入回车
JE CHKPWD
MOV BL, AL ; 保存输入的字符
MOV AL, '*' ; 显示*
INT 10H
CMP [SI], BL ; 检查输入的字符是否与密码匹配
JNE CHGPWD ; 不匹配则重新输入
INC SI
LOOP CHECK
CHKPWD:
MOV AH, 09H ; 显示提示信息
LEA DX, msg4
INT 21H
; 输入新密码,用*代替
MOV CX, 6 ; 假设密码为6位
LEA SI, pwd
MOV AH, 08H ; 屏幕输入
CHG:
INT 21H
CMP AL, 0DH ; 检查是否输入回车
JE SETNEWPWD
MOV BL, AL ; 保存输入的字符
MOV AL, '*' ; 显示*
INT 10H
MOV [SI], BL ; 保存新密码
INC SI
LOOP CHG
SETNEWPWD:
LEA DX, msg5
INT 21H ; 显示密码修改成功信息
END:
MOV AH, 4CH
INT 21H ; 程序结束
MAIN ENDP
END MAIN
```
以上程序实现了密码设置和修改功能,可以根据需要进行适当的修改。需要注意的是,由于涉及到密码,程序中没有加入任何密码保护机制,仅供学习参考使用。
在DOSBOX环境下用汇编语言实现密码设置模拟 编写程序可以进行密码的设置(第一次)和修改(已设置密码)。要求输入的密码用*显示。
下面是一个简单的汇编程序,可以在 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 变量中。如果密码不匹配,则提示用户输入错误,并退出程序。最后,输出成功或失败的消息,并结束程序。