小言_互联网的博客

南邮——微型计算机原理与接口技术——实验3.18

293人阅读  评论(0)

实验题目:

程序执行后,给出操作提示,请用户输入用户名和密码;用户在输入密码时,程序不回显输入字符;只有当用户名输入的用户名、密码字符串和程序内定的字符串相同时,才显示欢迎界面,并返回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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场