汇编语言模拟密码输入:5201314

大二下学期的汇编语言大作业

模拟密码输入:假设数据库中有密码5201314,用户输入一个字符串,显示的时候全都以*出现,然后判断用户输入的字符串是否与数据库中密码相同,若相同,输出“Password Right!”,否则输出 “Password Error!”

提示:将“Password Right!”、“Password Error!”以及5201314定义为字符串

若是密码输错三次,有三次重新输入机会,并且输入过程中,发现密码错误,则是按下delete键再继续输入。

下面是EXPERIEN.asm文件

data segment
password db  30 dup(?),0dh
write  db 'please write your password:',0dh,0ah,'$'
dissp2 db 'Password Right!','$'
dissp3 db 'Password Error!','$'
accuracy db '5201314',0dh ;用户输入密码,以回车键结束
count equ $-accuracy     ;密码长度
seperate db 0dh,0ah,'$'		;换行
times db 4                ;用于后面错误的重新尝试机会
data ends

code segment                        
assume cs:code,ds:data,es:data


start: 	mov si,offset password       ;输入的密码
        mov di,offset accuracy	     ;正确的密码
		mov ax,data                     
        mov ds,ax
		mov es,ax
		mov dx,offset write          ;please write your password:
		mov ah,09h
		int 21h


        mov cx,20
		mov bx,0

 input: mov ah,7		;7号中断指令,键盘输入无回显,AL=输入字符
        int 21h
        mov [si],al
        cmp al,0dh		;判断是否输入回车键
        je over			;如果输入回车键,表明用户输入结束
		cmp al,08h
		je delete
		mov ah,2		;如果不是回车键,则调用2号中断,显示输出,DL=输出字符
        mov dl,'*'      
        int 21h
        inc si
		inc bx			;统计输入的密码数目,为删除做准备,若是删除的次数多于输入密码数目,直接退出
        loop input 

delete: cmp bx,00h		;若是删除的次数多于输入密码数目,直接退出
		jz exit
		dec bx
		
		mov ah,3		;获取光标位置
		int 10h
		mov ah,2		;2号中断:置光标位置
		sub dl,1		;列数减1,实现光标左移
		int 10h


		mov ah,2		;调用2号中断,显示空格,消除星号
        mov dl,' '      
        int 21h
		mov byte ptr [si],00h
		dec si

		mov ah,3		;获取光标位置
		int 10h
		mov ah,2		;2号中断:置光标位置
		sub dl,1		;列数减1,实现光标左移
		int 10h
	
		jmp input
                
over :	mov dx,offset seperate   ;换行
		mov ah,9
		int 21h
	
		mov si,offset password
		mov cx,count 
		cld
        repz cmpsb
        jnz error	;密码不相等,显示错误
        jmp right	;密码相等,显示正确

Transferpoint:
		jmp start			;因为跳转超出范围,不能一次性跳转,所以中转跳转

error:	mov dx,offset dissp3		;显示Password Error!
        mov ah,09h
        int 21h

		mov si,offset times		;有三次重新尝试机会,若还是错误则显示错误,
		mov al,[si]
		dec al				;自减1
		mov [si],al
		cmp al,0
		jne Transferpoint		;因为跳转超出范围,不能一次性跳转,所以中转跳转到start
		jmp exit

	
right:	mov dx,offset dissp2		;显示Password Right!
        mov ah,09h
        int 21h
		jmp exit

exit:   mov ax,4c00h
        int 21h   
	
code ends
end  start

效果图:
在这里插入图片描述

  • 11
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值