微机实验:登录界面
程序员文章站
2024-02-02 15:38:04
...
实验要求:
程序执行后,提示用户输入账号和密码,账号回显,密码不回显,只有账号和密码与程序内定的一致时,才提示登陆成功,登录成功后跳转至欢迎界面。
思路:
将账号和密码先存储到内存中,当用户输入账号或密码时,使用CMP指令与内存中的数据进行比较。比较难的部分是退格键,我是这样实现的,先判断用户按下的字符,若为退格键,则将光标左移一格,同时用INT 21H的2号子功能输出空格,光标又右移了一格,此时再将光标左移一格即可。
代码如下:
DATAS SEGMENT USE16
TIP DB 'Please input your accout:'
TIPLEN EQU $-TIP
TIP1 DB 'please input your password:'
TIPLEN1 EQU $-TIP1
BUF DB '2333' ;用户名
BUFLEN EQU $-BUF
PASS DB '1234' ;密码
PASSLEN EQU $-PASS
NUM DB 4 DUP(?) ;储存用户账号输入
NUM1 DB 4 DUP(?) ;储存用户密码输入
INFO1 DB 'SUCCESS$'
INFO2 DB 'FAILURE$'
WEL DB 'WELCOME'
WELNUM EQU $-WEL
SPA DW ' ' ;暂存CX和DX寄存器的值,防止因使用指令而破坏原有寄存器的值
COL DB 0 ;记录行数,用于自动换行
DATAS ENDS
CODES SEGMENT USE16
ASSUME CS:CODES,DS:DATAS,ES:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
AGA:;提示请输入账号
MOV AX,1301H
MOV BH,0
MOV BL,01001111B
MOV CX,TIPLEN
MOV DH,BYTE PTR[COL] ;自动换行
MOV DL,0
MOV BP,OFFSET TIP
INT 10H
;loop循环输入4次,因为账号内定字符为4个
MOV BX,OFFSET NUM
MOV CX,4
II: MOV AH,7
INT 21H
CMP AL,8
JZ BACK
MOV BYTE PTR[BX],AL
MOV AH,2
MOV DL,AL
INT 21H
INC BX
LOOP II
JMP ROW
;实现退格功能(账号部分)
BACK:
CMP CX,4
JZ II
MOV SPA,CX
;光标
MOV AH,3
MOV BH,0
INT 10H
MOV AH,2
SUB DL,1
;MOV DH,DH
;MOV DL,DL
MOV BH,0
INT 10H ;至此,光标左退一格
MOV AH,2
MOV DL,' '
INT 21H ;在光标位置处输出空格,光标右移一格
MOV AH,3
MOV BH,0
INT 10H
MOV AH,2
SUB DL,1
;MOV DH,DH
;MOV DL,DL
MOV BH,0
INT 10H ;光标左退一格
DEC BX
MOV CX,SPA
INC CX
JMP II
ROW:
;输出换行
MOV AH,2
MOV DL,0DH
INT 21H
MOV AH,2
MOV DL,0AH
INT 21H
;比较字符串(账号)
MOV CX, BUFLEN
MOV SI, OFFSET NUM ;用户输入
MOV DI, OFFSET BUF ;目标
CLD
REPE CMPSB
JNZ FAIL
JMP SUCC
;输出账号错误信息,重新输入账号
FAIL:
MOV AH,9
MOV DX, OFFSET INFO2
INT 21H
ADD BYTE PTR[COL],2
JMP AGA
SUCC:
;账号成功
MOV DX, OFFSET INFO1
MOV AH,9
INT 21H
ADD BYTE PTR[COL],2
JMP MIMA
MIMA:
;提示请输入密码
MOV AX,1301H
MOV BH,0
MOV BL,01001111B
MOV CX,TIPLEN1
MOV DH,BYTE PTR[COL]
MOV DL,0
MOV BP,OFFSET TIP1
INT 10H
;循环输入密码4次,因为内定密码字符数是4个
MOV BX,OFFSET NUM1
MOV CX,4
II1:
MOV AH,7
INT 21H
CMP AL,8
JZ BACK1
MOV BYTE PTR[BX],AL
MOV AH,2
MOV DL,'*'
INT 21H
INC BX
LOOP II1
JMP ROW1
;实现退格功能(密码部分)
BACK1:
CMP CX,4
JZ II1
MOV SPA,CX
;光标
MOV AH,3
MOV BH,0
INT 10H
MOV AH,2
SUB DL,1
;MOV DH,DH
;MOV DL,DL
MOV BH,0
INT 10H ;至此,光标左退一格
MOV AH,2
MOV DL,' '
INT 21H ;在光标位置处输出空格,光标右移一格
MOV AH,3
MOV BH,0
INT 10H
MOV AH,2 ;2号功能键有3个入口参数
SUB DL,1
;MOV DH,DH
;MOV DL,DL
MOV BH,0
INT 10H ;光标左退一格
DEC BX
MOV CX,SPA
INC CX
JMP II1
;输出换行
ROW1:
MOV AH,2
MOV DL,0DH
INT 21H
MOV AH,2
MOV DL,0AH
INT 21H
;比较字符串(密码)
MOV CX, PASSLEN
MOV SI, OFFSET NUM1 ;用户输入
MOV DI, OFFSET PASS ;目标
CLD
REPE CMPSB
JNZ FAIL1
JMP SUCC1
;密码错误,提示重新输入
FAIL1:
MOV AH,9
MOV DX, OFFSET INFO2
INT 21H
ADD BYTE PTR[COL],2
JMP MIMA
SUCC1:
;清屏
MOV AX,0003H
INT 10H
;密码成功,进入欢迎界面
MOV AX,1301H
MOV BH,0
MOV BL,01001111B
MOV CX,WELNUM
MOV DH,12
MOV DL,(80-WELNUM)/2
MOV BP,OFFSET WEL
INT 10H
MOV AH,4CH
INT 21H
CODES ENDS
END START
上一篇: Win10系统设置快速启动栏的方法
下一篇: 7-8 I Love GPLT(5 分)