如何通过汇编获取输入

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:
 ...