• 南京邮电大学汇编语言程序设计实验二


    一、实验目的和要求

    1.掌握循环程序的编写以及结束循环的方法。
    2.掌握DOS、BIOS功能调用的使用方法。

    二、实验内容

    用户登录验证程序的实现
    程序执行后,给出提示操作,请用户键入用户名和密码;用户在键入密码时,程序不回显键入字符;只有当用户键入的用户名,密码字符串和程序内定的字符串相同时,显示欢迎界面并返回DOS;否则给出提示信息,用户名或密码错误,再次输入。界面颜色自定(彩色或黑白)

    三、实验环境(实验设备)

    XP /WIN7+MASM/TASM/轻松汇编/未来汇编

    四、实验代码

    
          .586
    DATA  		SEGMENT 	USE16
    	MESG1 		DB 		'INPUT YOUR USERNAME: $'		;提示字符
    	MESG2  		DB 		'INPUT YOUR PASSWORD: $' 
    	ERROR  		DB 	'-----USERNAME OR PASSWORD ERROR!----$'
    	WELCOME 	DB 	'---------------WELCOME!-------------$'		
    	
    	
    	_USERNAME  	DB 		'root'
    	_PASSWORD  	DB 		'root'
    	_ULEN  		EQU 	$-_USERNAME         ; 用户名长度
    	_PLEN  		EQU 	$-_PASSWORD       	; 密码长度
    	
    	USERNAME  	DB		15   				; 输入的用户名
    	PASSWORD  	DB 		15 DUP(?)          	; 输入的密码
    	PLEN  		DB 		0                  	; 输入密码的长度
    	
    	
    DATA  		ENDS
    
    
    CODE  		SEGMENT 	USE16
          	ASSUME 	CS: CODE, DS: DATA
    BEG:  	MOV 	AX, 	DATA
          	MOV 	DS, 	AX
    NEXT0:  MOV 	AH, 	9    			;09H功能号,显示DS:DL内字符串
          	MOV 	DX, 	OFFSET MESG1
          	INT 	21H
          	MOV 	AH, 	0AH   			;键盘输入字符串并显示,存在U缓冲区
    		MOV 	DX, 	OFFSET USERNAME  		;用户输入字符串起始偏移位置放入DX缓冲区
          	INT 	21H
          	MOV 	AH, 	2
          	MOV 	DL, 	0AH            	;换行字符
          	INT 	21H
          	MOV 	AH, 	9             	;显示提示字符串
          	MOV 	DX, 	OFFSET MESG2
          	INT 	21H
          	MOV 	CX, 	_PLEN
          	MOV 	SI, 	OFFSET PASSWORD  	;把输入密码起始偏移地址放入SI
    NEXT1:  MOV 	AH, 	07H         	;无回显从键盘读入一个字符
          	INT 	21H
          	CMP 	AL, 	0DH          	;判断输入是否结束
          	JE 	IND
          	MOV 	[SI], 	AL       		;将输入密码字符放入数据区:PWD
          	MOV 	AH, 2          			;每输入一位密码显示一个‘*’
          	MOV 	DL, '*'
          	INT 	21H
          	INC 	PLEN
          	INC 	SI
          	JMP 	NEXT1
    IND:  	MOV 	AH, 	2             	;输出换行
          	MOV 	DL, 	0AH
          	INT 	21H
         	MOV 	BX, 	OFFSET USERNAME+1    	;[BX]=实际输入字符数
          	MOV 	AL, 	[BX]
          	CMP 	AL, 	_ULEN          	;比较用户名长度    
          	MOV   BX, 	OFFSET _USERNAME
          	MOV 	SI, 	OFFSET _USERNAME+2
          	MOV 	CX, 	_ULEN          	;设置循环次数
    NEXT2:  MOV 	AL, 	[BX]
          	CMP 	[SI], 	AL          	;循环比较用户名是否正确
          	INC   	SI
          	INC 	BX
          	LOOP 	NEXT2
          	MOV 	BX, 	OFFSET _PASSWORD
          	MOV 	SI, 	OFFSET PASSWORD
          	MOV 	CL, 	PLEN
          	MOV 	CH, 	0
          	CMP 	CX, 	_PLEN          	;比较密码长度
          	JNZ 	ERR
          	MOV 	CX, 	_PLEN
    NEXT3:  MOV 	AL, 	[BX]
          	CMP 	[SI], 	AL          	;循环比较密码字符是否正确
          	JNZ 	ERR
          	INC 	SI
          	INC 	BX
          	LOOP 	NEXT3
          	JMP 	WEL
    ERR:  	MOV 	AH, 	9
          	MOV 	DX, 	OFFSET ERROR 	;输出用户名或密码错误提示
          	INT 	21H
          	MOV 	AH, 	2
          	MOV 	DL, 	0AH
    		INT 	21H
          	JMP 	NEXT0
    WEL:  	MOV 	AH, 	9             	;输出登录成功的提示
          	MOV 	DX, 	OFFSET WELCOME
          	INT 	21H
          	JMP 	EXIT
    EXIT:  	MOV 	AH, 	4CH
          	INT 	21H
    CODE  	ENDS
          	END BEG
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94

    五、实验过程描述与结果分析

    1、程序执行后,给出提示操作,请用户键入用户名和密码。
    2、用户在键入密码时,程序不回显键入字符;只有当用户键入的用户名,密码字符串和程序内定的字符串相同时,显示欢迎界面并返回DOS;
    3、否则给出提示信息,用户名或密码错误,再次输入。

    六、实验小结(包括问题和解决方法、心得体会、意见与建议等)

    1、注意子功能调用方法的使用
    2、变量的命名格式要统一简洁
    3、程序计数器CX的使用

  • 相关阅读:
    vscode设置代码模板
    泽众云真机-平台即将升级支持华为机型HarmonyOS NEXT系统
    小米路由器Pro R3p 刷机 Breed Padavan OpenWrt UART/TTL 救援
    C语言 ,不用string.h的函数,实现A+B A-B的字符串处理功能。
    docker 安装 nginx 镜像 保姆级别教程
    Python爬虫实战:抓取和分析新闻数据与舆情分析
    C++基础(一)
    6 JS 和 Jquery 删除标签元素
    vue上传文件夹+上传文件vue-simple-uploader
    linux应用hook实例(含源码分析)
  • 原文地址:https://blog.csdn.net/qq_35500719/article/details/127871223