南京邮电大学汇编语言程序设计实验二(用户登录验证程序的设计)

零、无关内容

汇编语言实现用户登录验证程序的设计需要考虑多个方面,包括程序的结构、数据的存储、输入输出的处理以及逻辑判断等。以下是一个简单的汇编语言实现用户登录验证程序的设计思路和示例代码:

1 设计思路

  1. 程序结构:程序可以分为几个部分,包括初始化、输入用户名和密码、验证用户名和密码、显示验证结果等。
  2. 数据存储:用户名和密码可以存储在代码中的固定位置,也可以从文件中读取。为了简化示例,我们将用户名和密码直接存储在代码中。
  3. 输入输出处理:输入可以使用系统调用或中断实现,输出可以使用系统调用或直接操作显存实现。
  4. 逻辑判断:使用比较指令来比较输入的用户名和密码与存储的用户名和密码是否相同。

2、示例代码

以下是一个基于x86架构的汇编语言实现的简单用户登录验证程序,使用NASM汇编器和Linux系统调用。

section .data
    ; 存储用户名和密码
    valid_username db 'admin', 0
    valid_password db 'password', 0

    ; 存储输入的用户名和密码
    input_username times 20 db 0
    input_password times 20 db 0

section .bss
    ; 用于存储输入的缓冲区
    buffer resb 20

section .text
    global _start

_start:
    ; 清屏
    mov eax, 6
    mov ebx, 0
    mov ecx, 0
    mov edx, 0x184b4
    int 0x80

    ; 提示输入用户名
    mov eax, 4
    mov ebx, 1
    lea ecx, [input_username]
    mov edx, 20
    int 0x80

    ; 提示输入密码
    mov eax, 4
    mov ebx, 1
    lea ecx, [input_password]
    mov edx, 20
    int 0x80

    ; 验证用户名和密码
    cmp byte [input_username], [valid_username]
    jne invalid_username
    cmp byte [input_password], [valid_password]
    jne invalid_password

    ; 用户名和密码正确,显示欢迎信息
    mov eax, 4
    mov ebx, 1
    mov ecx, welcome_msg
    mov edx, welcome_msg_len
    int 0x80
    jmp exit

invalid_username:
    ; 用户名错误,显示错误信息
    mov eax, 4
    mov ebx, 1
    mov ecx, invalid_username_msg
    mov edx, invalid_username_msg_len
    int 0x80
    jmp exit

invalid_password:
    ; 密码错误,显示错误信息
    mov eax, 4
    mov ebx, 1
    mov ecx, invalid_password_msg
    mov edx, invalid_password_msg_len
    int 0x80

exit:
    ; 退出程序
    mov eax, 1
    xor ebx, ebx
    int 0x80

section .data
    welcome_msg db 'Welcome!', 0Ah
    welcome_msg_len equ $ - welcome_msg
    invalid_username_msg db 'Invalid username!', 0Ah
    invalid_username_msg_len equ $ - invalid_username_msg
    invalid_password_msg db 'Invalid password!', 0Ah
    invalid_password_msg_len equ $ - invalid_password_msg

这个程序首先定义了有效的用户名和密码,然后提示用户输入用户名和密码,接着验证输入的用户名和密码是否与存储的用户名和密码相同,最后根据验证结果显示相应的信息。注意,这个程序仅用于演示目的,实际应用中需要考虑更多的安全性和健壮性问题。

一、实验目的和要求

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、用户在键入密码时,程序不回显键入字符;只有当用户键入的用户名,密码字符串和程序内定的字符串相同时,显示欢迎界面并返回DOS;
3、否则给出提示信息,用户名或密码错误,再次输入。

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

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

  • 15
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦是远方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值