当前位置:网站首页>用户登录验证程序的实现
用户登录验证程序的实现
2022-08-03 05:21:00 【物腐虫生】
汇编第二次实验:
参考书P186页的例4.23的两个解法来实现用户名的比较;
参考书P157页例4.3的程序清单来实现彩色字符串的输出;
注:若采用例4.23的解法一设置了附加段,在尝试输出彩色字符串时,需在调用BIOS的13H功能前将ES:BP指向待显示字符串首地址。(请考虑字符串定义位置,在附加段13H能成功寻找,若在代码段,需在在MOV AX,1301H之前加上两条指令:MOV AX, DATA和 MOV ES, AX。从而保证执行INT 10H时AH=13H以及AL=01H。)
.586
DATA SEGMENT USE16
MESG1 DB 'Please enter your username:$'
MESG2 DB 'Please enter your password:$'
BUF DB 30
DB ?
DB 30 DUP(?) ;输入字符串缓冲区
WRONG DB 'Wrong Username!',0DH, 0AH,'$'
WRONG2 DB 'Wrong Password!',0DH, 0AH,'$'
RIGHT DB '----------WELCOME----------'
LL EQU $-RIGHT
CHOICE DB 3
USER DB '030915' ;用户名
COUNT EQU $-USER ;统计串长度
CIPHER DB 'as12' ;密码
COUNT2 EQU $-CIPHER
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA,ES:DATA
BEG:
MOV AX,DATA ;DS<-DATA
MOV DS,AX
MOV ES,AX ;ES<-DATA
MOV AX,0003H ;80列*25行彩色文本方式
INT 10H
AGA: ;循环确认用户名是否正确
MOV AH,9
MOV DX,OFFSET MESG1 ;显示黑白字符串
INT 21H
MOV CX,COUNT
MOV AH,0AH ;从键盘键入用户名
MOV DX,OFFSET BUF
INT 21H
MOV CL,BUF+1 ;输入用户名长度->CX
MOV CH,0
CMP CX,COUNT ;比较长度是否相等
JNZ AGA2
MOV SI,OFFSET BUF+2 ;原串首址->SI
MOV DI,OFFSET USER ;目标串首址->DI
CLD ;D标志为0,增址型
LOAD:
REPE CMPSB ;两字符串比较
JNZ AGA2 ;不相等,提示
MOV AH,2
MOV DL,0AH ;换行
INT 21H
MOV CHOICE,3 ;尝试次数重新置3
JMP CHECK
AGA2:
MOV AH,2
MOV DL,0AH ;换行
INT 21H
MOV AH,09H
MOV DX,OFFSET WRONG
INT 21H
DEC CHOICE ;尝试次数减一
JZ EXIT
JMP AGA ;再输入一次用户名
CHECK:
MOV AH,09H
MOV DX,OFFSET MESG2
INT 21H
MOV CX,COUNT2
MOV BX,OFFSET BUF
AGA3: ;判断密码是否错误
MOV AH,08H ;O8H,不回显字符,响应Ctrl+C
INT 21H ;光标下移一行
MOV [BX],AL ;按键的ASCII码传给BX
INC BX ;BX后移一位,一共移COUNT2次
LOOP AGA3
MOV DI,OFFSET BUF
MOV SI,OFFSET CIPHER
CLD
MOV CX,COUNT2
REPE CMPSB ;字符串比较
JZ LAST ;一致则跳转
MOV AH,2
MOV DL,0AH
INT 21H
MOV AH,09H
MOV DX,OFFSET WRONG2
INT 21H
DEC CHOICE ;尝试次数减一
JZ EXIT
JMP CHECK
LAST:
MOV AX,1301H ;显示彩色字符串
MOV BH,0
MOV BL,01001111B
MOV CX,LL
MOV DH,12
MOV DL,(80-LL)/2
MOV BP,OFFSET RIGHT
INT 10H
EXIT:
MOV AH,4CH
INT 21H ;返回 DOS
CODE ENDS
END BEG
如果WELCOME是用09H显示的(即黑白显示),请记得给他加上$来表示字符串的结束。
.586
DATA SEGMENT USE16
MESG1 DB 'Please enter your username:$'
MESG2 DB 'Please enter your password:$'
BUF DB 30
DB ?
DB 30 DUP(?) ;输入字符串缓冲区
WRONG DB 'Wrong Username!',0DH, 0AH,'$'
WRONG2 DB 'Wrong Password!',0DH, 0AH,'$'
RIGHT DB '----------WELCOME----------'
LL EQU $-RIGHT
CHOICE DB 3
USER DB '030915' ;用户名
COUNT EQU $-USER ;统计串长度
CIPHER DB 'as12' ;密码
COUNT2 EQU $-CIPHER
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA,ES:DATA
BEG:
MOV AX,DATA ;DS<-DATA
MOV DS,AX
MOV ES,AX ;ES<-DATA
MOV AX,0003H ;80列*25行彩色文本方式
INT 10H
AGA: ;循环确认用户名是否正确
MOV AH,9
MOV DX,OFFSET MESG1 ;显示黑白字符串
INT 21H
MOV CX,COUNT
MOV AH,0AH ;从键盘键入用户名
MOV DX,OFFSET BUF
INT 21H
MOV CL,BUF+1 ;输入用户名长度->CX
MOV CH,0
CMP CX,COUNT ;比较长度是否相等
JNZ AGA2
MOV SI,OFFSET BUF+2 ;原串首址->SI
MOV DI,OFFSET USER ;目标串首址->DI
CLD ;D标志为0,增址型
LOAD:
REPE CMPSB ;两字符串比较
JNZ AGA2 ;不相等,提示
MOV AH,2
MOV DL,0AH ;换行
INT 21H
MOV CHOICE,3 ;尝试次数重新置3
JMP CHECK
AGA2:
MOV AH,2
MOV DL,0AH ;换行
INT 21H
MOV AH,09H
MOV DX,OFFSET WRONG
INT 21H
DEC CHOICE ;尝试次数减一
JZ EXIT
JMP AGA ;再输入一次用户名
CHECK:
MOV AH,09H
MOV DX,OFFSET MESG2
INT 21H
MOV CX,COUNT2
MOV BX,OFFSET BUF
AGA3: ;判断密码是否错误
MOV AH,08H ;O8H,不回显字符,响应Ctrl+C
INT 21H ;光标下移一行
MOV [BX],AL ;按键的ASCII码传给BX
INC BX ;BX后移一位,一共移COUNT2次
LOOP AGA3
MOV DI,OFFSET BUF
MOV SI,OFFSET CIPHER
CLD
MOV CX,COUNT2
REPE CMPSB ;字符串比较
JZ LAST ;一致则跳转
MOV AH,2
MOV DL,0AH
INT 21H
MOV AH,09H
MOV DX,OFFSET WRONG2
INT 21H
DEC CHOICE ;尝试次数减一
JZ EXIT
JMP CHECK
LAST:
MOV AX,1301H ;显示彩色字符串
MOV BH,0
MOV BL,01001111B
MOV CX,LL
MOV DH,12
MOV DL,(80-LL)/2
MOV BP,OFFSET RIGHT
INT 10H
EXIT:
MOV AH,4CH
INT 21H ;返回 DOS
CODE ENDS
END BEG
运行结果:(我交的就是这些图,so,不要一样)



参考文档:https://wonzwang.blog.csdn.net/article/details/80863047
边栏推荐
猜你喜欢

【转】最小描述长度准则MDL(Minimun Description Length)

处理异步事件的三种方式

当我们在看Etherscan的时候,到底在看什么?

NFT租赁提案EIP-5006步入最后审核!让海外大型游戏的链改成为可能

Ansible installation and deployment detailed process, basic operation of configuration inventory

【 Nmap and Metasploit common commands 】

【特征选取】计算数据点曲率

web安全-PHP反序列化漏洞

pta a.1030的dijkstra+DFS方法

用C语言来实现五子棋小游戏
随机推荐
-最高分-
MySQL 一些函数
arm64麒麟安装paddlehub(国产化)注意事项
用C语言来实现五子棋小游戏
pta a.1003 的收获
[Rebound shell and privilege escalation]
二叉树的合并[C]
web安全-SSTI模板注入漏洞
用iPhone前摄3D人像建模,Meta:我看行
MySQL 优化建议详解
web安全-sql注入漏洞
详解Nurbs曲线
7.24[C语言零基础 知识点总结]
经典论文-ResNet
取某一区间中素数的个数--洛谷P1865 A % B Problem
【DC-2靶场渗透】
【 Nmap and Metasploit common commands 】
Go (一) 基础部分2 -- if条件判断,for循环语句
C语言简单实现三子棋小游戏
【按位取反,逻辑操作符,条件操作符,逗号表达式,下标引用,函数调用,结构体】操作符后续+表达式求值(上)