例8.4 编写一个输入密码的程序,该程序的具体要求如下:

1、每输入一个字符,显示字符"#"表示之;
2、密码最多只有10个字符,多余的按键被丢弃;
3、若输入的字符串为"HELLO",则以蓝色显示"Welcome…",否则,以闪烁、亮红色在显示"Invalid Password"。

解:
.MODEL SMALL
.DATA
 CR   EQU 0DH
 MSG1 DB "Welcome..."
 MSG2 DB "Invalid Password"
 PSW1 DB "HELLO"
 BUFF DB 10 DUP(?)
.CODE
.STARTUP
MOV AX, DS
MOV ES, AX
XOR BX, BX
again:
MOV AH, 0H
INT 16H ;从键盘接受字符输入
CMP AL, CR
JZ next ;若按“回车“键,则结束密码输入
CMP BX, 10
JZ again ;若已接受了10个字符,则丢弃随后的字符
.IF  AL>='a' && AL<=’z’
  SUB  AL, 20H
.ENDIF
MOV BUFF[BX], AL
INC BX ;保存当前输入,并移动有关指针
MOV DL, '#'
MOV AH, 2
INT 21H ;在屏幕上显示字符”#”
JMP again
next:
CALL Clear ;清屏幕,见例8.2中的过程定义
CMP BX, 5
JNZ error ;若输入的字符串长度不为5,则密码错误
LEA SI, PSW1
LEA DI, BUFF
MOV CX, BX
CLD
REPE CMPSB ;比较字符串PSW1和BUFF
.IF  ZERO? ;若字符串的相应字符相同
  MOV BP, OFFSET MSG1 ;显示字符串首地址
  MOV BL, 09H ;显示字符颜色:蓝色
  MOV CX, 0AH ;显示字符串长度:10
.ELSE
  MOV BP, OFFSET MSG2 ;显示字符串首地址
  MOV BL, 8CH ;显示字符颜色:闪烁、亮红色
  MOV CX, 10H ;显示字符串长度:16
.ENDIF
MOV AL, 0
MOV BH, 0
MOV DH, 5
MOV DL, 20 ;在位置(5,20)的位置开始显示字符串
MOV AH, 13H
INT 10H ;使用中断10H之功能13H来显示字符串
.EXIT 0
END

关 闭