c) 程序源代码 CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H
MOV AH,02H MOV DL,0AH INT 21H ENDM
DATA SEGMENT
PASSWORD1 DB 'chang';密码设置 PASSWORD2 DB 20 DUP(?) A DB 0;标记password1的长度 B DB 0;标记password2的长度 D DB 0;标记比较的次数
STRING1 DB 'Please input the password:',0DH,0AH,\;单引号双引号分析;最多20个字
STRING2 DB 'Please confirm the password:',0DH,0AH,'$';
STRING4 DB 'HELLO!THE PASSWORD IS RIGHT',0DH,0AH,'$'; STRING5 DB 'SORRY!THE PASSWORD IS WRONG',0DH,0AH,'$'; DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE START:
MOV AX,DATA MOV DS,AX MOV AH,09H
LEA DX,STRING1
INT 21H;读取string1的地址,用中断显示出来 MOV CX,20
LEA SI,PASSWORD1 INPUT1:
MOV AH,08H
INT 21H;读取password1的地址,用中断读取用户输入的密码并存入 CMP AL,0DH JZ NEXT1 MOV [SI],AL INC SI INC A
MOV DL,'*' MOV AH,02H
INT 21H;用户每输入一个数字活字符,屏幕显示* LOOP INPUT1 NEXT1:
MOV AL,'$' MOV [SI],AL CRLF
MOV AH,09H
LEA DX,STRING2
INT 21H ;读取string2的地址,用中断显示出来 LEA SI,PASSWORD2 INPUT2:
MOV AH,08H
INT 21H;读取password2的地址,用中断读取用户输入的密码并存入 CMP AL,0DH JZ NEXT2 MOV [SI],AL INC SI INC B
MOV DL,'*' MOV AH,02H
INT 21H;用户每输入一个数字活字符,屏幕显示* LOOP INPUT2
NEXT2:
LEA SI,PASSWORD1 LEA DI,PASSWORD2 MOV AL,A CMP AL,B
JBE PANDUAN;比较A与B的大小 JMP COMPARE
PANDUAN:
MOV AL,A;取AB中较小的存到B中 MOV B,AL COMPARE:
MOV DL,[DI] CMP [SI],DL
JNE PASSERROR;比较,如果不相等则跳至error处 INC SI INC DI
INC D;记录比较次数 MOV AL,D
CMP AL,B;判断循环是否继续进行 JNZ COMPARE
ACCEPT:;确认密码成功 CRLF
MOV AH,09H
LEA DX,STRING4 INT 21H JMP EXIT
PASSERROR:;确认密码失败 CRLF
MOV AH,09H
LEA DX,STRING5 INT 21H JMP EXIT EXIT:;退出
MOV AH,4CH INT 21H CODE ENDS END START
运行输入:chang 时显示如下:
输入chanf时错误显示
3、实验中的问题:
第二次的实验是在上次实验的基础上,更加考验我们的编程素养,通过对问题的分析和画出解决问题的流程图,进而编写源代码。实验中多次遇到困难,特别是编译不能通过,在百度和同学的帮助下最终完成了实验。
本次实验主要考察对子程序和宏的设计以及调用的掌握程度,这与写单个程序不同,需要更多的知识来完善,让我们对子程序及宏调用的理解也更加清楚。
实验心得
通过这两次实验,让我基本上掌握的汇编语言常用的一些程序设计,以及子程序的调用和宏调用,汇编语言是接近于机器语言的一种编程语言,指令系统尤为重要但也比较繁琐,同样的功能,汇编语言的编程比较复杂难懂,但是由于最接近机器语言,可以很好地理解计算机是怎样一步一步实现程序功能的。
总之,在老师辛勤教导下,我们对汇编语言有了很深的认识和很好的掌握,谢谢老师!
参考文献
[1] 姚燕南等.微型计算机原理与接口技术.西安:西安电子科技大学.高等教育出版社出版.2008
[2]乔瑞萍、姚向华. .微型计算机原理与接口技术学习指导. 西安:西安电子科技大学.高等教育出版社出版.2009