汇编实现登陆界面密码无回显

本文展示了一个使用16位汇编语言实现的简单登录验证程序。程序通过比较用户输入的用户名和密码与预设值进行校验。利用BIOS和DOS中断,实现了字符的读取和显示功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.486
DATA SEGMENT USE16
BUF1 DB 255				;用于存取键入的用户名
	DB ?
	DB 255 DUP(?)	
BUF2 DB 255				;用于存取键入的密码
	DB ?
	DB 255 DUP(?)	
	
USER DB 'Jacob'			;用户名内置校验值 ;4A 61 63 6F 62 
LEN1 = $-USER			;内置用户名长度
PASSWD DB 'Zeng'		;密码内置校验值   ;FF 04 5A 65 6E 67 
LEN2 = $-PASSWD			;内置用户名长度

UNAME DB 'Username:',24H   				;显示字符串'Username:'	
PWORD DB 'Password:',24H				;显示字符串'Password:'	
FAIL DB 'Login Failed',24H
SUCC DB 'Login Successed'
LL = $-SUCC 

CRLF MACRO 								;换行宏指令
	MOV AH,0EH 
	MOV AL,0DH 
	INT 10H 
	MOV AL,0AH 
	INT 10H 
	ENDM
					
DATA ENDS

CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA,ES:DATA			;注意将附加段重叠到数据段


BEG:MOV AX,DATA
	MOV DS,AX
	MOV ES,AX 
	MOV AH,9							;显示字符串'Username:'
	MOV DX,OFFSET UNAME
	INT 21H
	
	MOV AH,0AH							;键入用户名到缓冲区BUF1	
	MOV DX,OFFSET BUF1
	INT 21H
	MOV BL,BUF1+1
	MOV BH,0
	MOV SI,OFFSET BUF1+2
	MOV BYTE PTR[BX+SI],'$'
	
	CRLF								;换行
	
	MOV AH,9							;显示字符串'Password:'
	MOV DX,OFFSET PWORD
	INT 21H
	
	MOV BX,OFFSET BUF2
	MOV SI,0
	PASSWORD:MOV AH,07H					;键入密码到缓冲区BUF2	
			 INT 21H
			 CMP AL,0DH
			 JZ VERIFIY
			 MOV [BX+SI+2],AL
			 INC SI
			 JMP PASSWORD
			 
			 
VERIFIY:
		MOV AX,SI						;处理上述不回显循环时的遗留数据
		MOV BYTE PTR[BX+1],AL
		MOV BH,0
		MOV BL,BUF2+1
		MOV SI,OFFSET BUF2+2
		MOV BYTE PTR[BX+SI],'$'
		
		
		CMP BYTE PTR[BUF1+1],LEN1		;校验用户名长度
	    JNZ FAILED
		CMP BYTE PTR[BUF2+1],LEN2		;校验密码长度
		JNZ FAILED
		MOV CX,LEN1
		MOV SI,0
		LOOP1:							;逐个校验用户名字符
			  LEA BX,USER
			  MOV AL,[BUF1+2+SI]
			  CMP BYTE PTR[BX+SI],AL
			  JNZ FAILED				
			  INC SI
			  LOOP LOOP1

			  
		MOV CX,LEN2						;逐个校验密码字符
		MOV SI,0
		LOOP2:
			  LEA BX,PASSWD
			  MOV AL,[BUF2+2+SI]
			  CMP [BX+SI],AL
			  JNZ FAILED
			  INC SI 
			  LOOP LOOP2

SUCCESS:						;校验成功处理  
		MOV AH, 00 
		MOV AL, 03H 			;在屏幕中央显示绿色Login Successed
		INT 10H

		MOV AH, 13H 
		MOV AL, 01H 
		MOV BH, 0 
		MOV BL, 0AH
		MOV CX, LL 
		MOV DH,12 
		MOV DL, (80-LL)/2 
		MOV BP, OFFSET SUCC 
		INT 10H 
		JMP OVER
		


FAILED:	CRLF					;校验失败处理
		MOV AH,9					
		MOV DX,OFFSET FAIL
		INT 21H
		CRLF
		JMP BEG




OVER:MOV AH,4CH					;程序结束
	 INT 21H
	
CODE ENDS 
END BEG 



在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值