微机实验:登录界面

实验要求:

程序执行后,提示用户输入账号和密码,账号回显,密码不回显,只有账号和密码与程序内定的一致时,才提示登陆成功,登录成功后跳转至欢迎界面。

思路:

将账号和密码先存储到内存中,当用户输入账号或密码时,使用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


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值