这是我们学汇编时,要求做的一个小实验,感觉挺有趣的,就想发到博客上来的。初学汇编语言的同学,也可以借鉴参考一下。
实验要求:
程序执行后,给出操作提示,请用户键入用户名和密码;用户在键入密码时,程序不回显键入字符,只有当用户键入的用户名、密码字符串和程序内定的字符串相同时,显示欢迎界面,并返回DOS。
代码里面有比较详细的注释,感兴趣的同学可以看看。
代码:
;FILENAME: EXERCISE2.ASM .486 DATA SEGMENT USE16 MESG1 DB 0DH,0AH,'Please input username:$' MESG2 DB 0DH,0AH,'Please input password:$' MESG3 DB 0DH,0AH,'LOGIN INCORRECT!$' USERNAME DB 'B12040331$' PASSWORD DB '123456789$' FLAG DB ? BUF DB 30 DB ? DB 30 DUP(?) DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG: MOV AX,DATA MOV DS,AX MOV ES,AX AGA: MOV FLAG,0 MOV AH,9 ;显示提示信息(用户名) MOV DX,OFFSET MESG1 INT 21H MOV AH,0AH ;输入用户名 MOV DX,OFFSET BUF INT 21H MOV BL,BUF+1 MOV BH,0 MOV SI,OFFSET BUF+2 MOV BYTE PTR [BX+SI],'$' MOV SI,OFFSET BUF+2 ;验证用户名是否正确 MOV DI,OFFSET USERNAME MOV CX,9 CLD REPE CMPSB MOV FLAG,CL MOV AH,9 ;显示提示信息(密码) MOV DX,OFFSET MESG2 INT 21H MOV SI,OFFSET BUF+2 ;处理输入密码 INPUT: MOV AH,0CH ;清除键盘缓冲区 INT 21H MOV AH,8 INT 21H CMP AL,13 JZ NEXT MOV [SI],AL INC SI MOV AH,2 MOV DL,2AH INT 21H JMP INPUT NEXT: CMP FLAG,0 JNZ LERROR MOV SI,OFFSET BUF+2 ;验证密码是否正确 MOV DI,OFFSET PASSWORD MOV CX,9 CLD REPE CMPSB JNZ LERROR MOV AH,4CH INT 21H LERROR: MOV AH,9 MOV DX,OFFSET MESG3 INT 21H JMP AGA CODE ENDS END BEG
运行效果如下:
时间: 2024-08-10 03:49:35