如何使用汇编输入

时间:2016-01-18 15:18:06

标签: assembly dos x86-16

我正在学习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 变量?

1 个答案:

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