如何通过汇编获取输入
How to get input with assembly
我正在学习 8086 汇编,我必须做一个登录屏幕,要求用户输入用户名和密码。用户输入他的数据后,我必须检查它是否正确。我的代码是:
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 变量?
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:
...
我正在学习 8086 汇编,我必须做一个登录屏幕,要求用户输入用户名和密码。用户输入他的数据后,我必须检查它是否正确。我的代码是:
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 变量?
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:
...