题目

程序执行后,给出简单明了的操作提示,请用户键入“通行字”,按回车表示通行字键入结束。只有当用户键入的字符串和程序内定的字符串相同时,显示欢迎界面,程序返回DOS,否则请用户重新键入“通行字”。(参见实验指导书P.44 实验3.17)

程序清单

DATA SEGMENT USE16

BUF DB 4 DUP(?)
Notation DB 'Please enter your tongxinzi:$'
tongxinzi DB 'wonz'
WA DB 'Wrong tongxinzi!$'
AC DB 'Welcome!'
LL EQU $-AC
COUNT DB 3  ;只允许输 3 次

DATA ENDS

CODE SEGMENT USE16
     ASSUME CS:CODE,DS:DATA,ES:DATA  ;ES附加段也要,待显示字符放进ES
     
BEG:
     MOV AX,DATA
     MOV DS,AX
     MOV ES,AX  ;AX传给ES

AGAIN:
	 MOV AH,09H
	 MOV DX,OFFSET Notation  ;输出提示语句
	 INT 21H
     MOV BX,OFFSET BUF
     MOV CX,4  ;输入四个符号

;判断通信字是否正确 
LAST:
     MOV AH,07H  ;不回显字符,不响应Ctrl_C
     INT 21H     
     MOV [BX],AL ;低位传给BX
     MOV AH,02H  ;显示字符
     MOV DL,'*'
     INT 21H
     INC BX      ;BX后移一位,一共移4次
     LOOP LAST
     
     MOV DI,OFFSET BUF
     MOV SI,OFFSET tongxinzi
     MOV CX,4    ;比较4次
     REPE CMPSB  ;字符串比较     
     JZ RIGHT    ;ZF=1,表示一样,跳到RIGHT
     MOV AH,2
     MOV DL,0AH  ;换行
     INT 21H
     
     MOV AH,09H
     MOV DX,OFFSET WA  ;输出错误通信字
     INT 21H
     MOV AH,2
     MOV DL,0AH  ;换行
     INT 21H
     DEC COUNT  ;计数,输错三次通信字就退出
     JZ EXIT
     JMP AGAIN

RIGHT:
	 MOV AH,2
     MOV DL,0AH  ;换行
     INT 21H
     MOV AH,09H
     MOV DX,OFFSET AC  ;输出欢迎
     INT 21H

COLOR:
     MOV AX,0003H   ;80*25彩色文本方式
     INT 10H
     MOV AX,1301H  ;显示彩色字符串
     MOV BX,0047H  ;红色背景,灰白色字体
     MOV CX,LL
     MOV DH,12   ;一共 25 行,中央显示
     MOV DL,(80-LL)/2    ;80列,中央显示    
     LEA BP,AC
     INT 10H         ;调用 BIOS 中断INT 10H的13H号功能,居中彩显

EXIT:
     MOV AH,4CH
     INT 21H  ;返回 DOS
     
CODE ENDS
     END BEG

实验结果

当屏幕显示:输入通信字时,不回显输入。

当输入错误的时候,会让你重新输入。

输入正确的时候,会跳出下面的界面。(加了个彩***面,用的 BIOS 屏幕功能)