我正在学习8086程序集,我必须做一个登录屏幕,要求用户输入UserName和Password。用户输入数据后,我必须检查它是否正确。我的代码是:
DATA SEGMENT
N=11
STRING DB "Wellcom, please Enter your",10,13,"UserNmae: ",8,'$'
STRING2 DB 10,13, "PassWord: ",8,'$'
BUFFER DW 10,?,11 DUP(?)
BUFFER2 DW 10,?,11 DUP(?)
NAME_OF_USER DW ?
NAME_OF_SYSTEM DW "DARIO"
DATA ENDS
SSEG SEGMENT STACK
DW 100 DUP (?)
SSEG ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS:DATA SS:SSEG
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STRING ;PUTS THE FIRST SRTING
MOV AH,9
INT 21H
CALL EnterName
CALL EnterPassword
EXIT: MOV AH,4CH
INT 21H
EnterName PROC
MOV DX,OFFSET BUFFER ; GETS THE NAME
mov NAME_OF_USER,DX
MOV AH,10
INT 21H
RET
EnterName ENDP
EnterPassword PROC
MOV DX,OFFSET STRING2 ;PRINTS THE CONNTINUE OF THE STRING
MOV AH,9
INT 21H
MOV BX,OFFSET BUFFER2 ;GETS THE PASSWORD
MOV AH,10
INT 21H
RET
EnterPassword ENDP
CODE ENDS
END START
我想检查用户是否提供了正确的用户名。如何将他的输入输入 NAME_OF_USER 变量?
答案 0 :(得分:1)
BUFFER DW 10,?,11 DUP(?)
BUFFER2 DW 10,?,11 DUP(?)
NAME_OF_SYSTEM DW "DARIO"
您使用错误的指令定义了输入结构和系统名称!您需要使用DB
指令。
BUFFER DB 10,?,11 DUP(?)
BUFFER2 DB 10,?,11 DUP(?)
NAME_OF_SYSTEM DB "DARIO",13
指令mov NAME_OF_USER,DX
仅移动 NAME_OF_USER 变量中输入结构的地址。
你当然可以复制这个名字的字符,但这是没有意义的,因为你总是可以在输入它们的地方使用它们。该名称位于 BUFFER + 2 。
这是一个简单的(在输入上使用大写字母是必须的)例程来验证输入的名称是否等于系统的名称:
mov si, offset NAME_OF_SYSTEM
mov di, offset BUFFER+2
Next:
mov al, [si]
cmp al, [di]
jne NotTheSame
inc si
inc di
cmp al, 13
jne Next
TheSame:
...
NotTheSame:
...