实验题目:
程序执行后,给出操作提示,请用户输入用户名和密码;用户在输入密码时,程序不回显输入字符;只有当用户名输入的用户名、密码字符串和程序内定的字符串相同时,才显示欢迎界面,并返回DOS。界面颜色自定(彩色或黑白)。
(1)字符串比较
1、定义附加段:
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
BEG:
MOV AX,DATA
MOV DS,AX
MOV ES,AX ;AX传给ES
否则,由于比较字符串所用的 REPE CMPSB ;比较的字符串,目标字符串需要在附加段,源字符串在数据段,故如果未定义,会导致比较失败,REPE CMPSB说明可以看这里
结果如此:(syj为正确用户名)
(2)说明下标移动的方向,比较的次数
CLD
MOV CX,3 ;比较4次
CLD说明可查看这个
(3)赋值
MOV DI,OFFSET BUF2
MOV SI,OFFSET USER
(2)0AH,0DH
0AH表示换行,0DH表示回车(只是回到该行的头部,不换行)
如果代码如下:
BEG1:
MOV AH,2
MOV DL,0DH
INT 21H
MOV AH,09H
MOV DX,OFFSET NUM1
INT 21H
MOV CX,3
MOV BX,OFFSET YHM1
则如果输出错则不会出现Wrong username,因为虽然调用了9号功能键,让Wrong username显示出来,但调用9号功能输出'Please enter your username:$'之前由于上面的代码,使光标回到Wrong username行头,再调用输出,就掩盖了原本的Wrong username
(3)代码
DATA SEGMENT
NUM1 DB 'Please enter your username:$'
MIMA1 DB 4 DUP(?)
MIMA DB '0716'
NUM2 DB 'Wrong Answer!$'
NUM3 DB 'Welcome!$'
YHM DB 'syj'
NUM4 DB 'Wrong Username$'
NUM5 DB 'Please enter your password:$'
YHM1 DB 3 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
BEG:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,0003H ;创建窗口
INT 10H
BEG1:
MOV AH,2
MOV DL,0AH
INT 21H
MOV AH,09H
MOV DX,OFFSET NUM1
INT 21H
MOV CX,3
MOV BX,OFFSET YHM1
BEG2:
MOV AH,01H
INT 21H
MOV [BX],AL
INC BX
LOOP BEG2
MOV DI,OFFSET YHM1;源段在数据段
MOV SI,OFFSET YHM;目标端在附加段
CLD;正向增加下标
MOV CX,3 ;比较3次
REPE CMPSB ;字符串比较,包括CX-1
JZ BEG3 ;ZF=1,表示一样,跳到
MOV AH,2
MOV DL,0AH ;换行
INT 21H
MOV AH,09H
MOV DX,OFFSET NUM4
INT 21H
JMP BEG1 ;再输入一次用户名
BEG3:
MOV AH,2
MOV DL,0AH
INT 21H
MOV AH,09H
MOV DX,OFFSET NUM5
INT 21H
MOV BX,OFFSET MIMA1
MOV CX,4
BEG4:
MOV AH,07H ;不回显字符
INT 21H ;光标下移一行
MOV [BX],AL ;传给BX
MOV AH,02H ;显示字符
MOV DL,'*'
INT 21H
INC BX ;BX后移一位,一共移6次
LOOP BEG4
MOV DI,OFFSET MIMA1
MOV SI,OFFSET MIMA
CLD
MOV CX,4 ;比较6次
REPE CMPSB ;字符串比较
JZ RIGHT ;ZF=1,表示一样,跳到RIGHT
MOV AH,2
MOV DL,0AH
INT 21H
MOV AH,09H
MOV DX,OFFSET NUM2
INT 21H
JMP BEG3
RIGHT:
MOV AH,2
MOV DL,0AH
INT 21H
MOV AH,09H
MOV DX,OFFSET NUM3
INT 21H
EXIT:
MOV AH,4CH
INT 21H ;返回 DOS
CODE ENDS
END BEG
结果:
参考链接:
https://blog.csdn.net/fulinus/article/details/8277442
https://zhidao.baidu.com/question/55775159.html
https://blog.csdn.net/Wonz5130/article/details/80863047
转载:https://blog.csdn.net/qq_43808588/article/details/102566453
查看评论