当前位置: 代码迷 >> 汇编语言 >> 求教怎么将键盘输入的字符与内存中的字符进行比较
  详细解决方案

求教怎么将键盘输入的字符与内存中的字符进行比较

热度:9739   发布时间:2013-02-26 00:00:00.0
求教如何将键盘输入的字符与内存中的字符进行比较
下面是我写的代码,比较简短,请大家耐心看下
我在数据段定义了account,里面的内容为1234,然后键盘键入字符,与account内的字符进行比较,如果字符不相同则重新输入,如果全部相同则运行结束。
但在实际执行时,我键盘键入1,直接是错误,跳转到重新输入。。。。
我是新手,不知道是哪错了,请大家指出我的错误
account内的每一个字符是不是都单独占用一个字节单元?





data segment
check1 db  'account:$'
cr     db  13,10,'$'
error  db 'error!',13,10,'$'
account db  '1234$'    
data ends


code segment
    assume cs:code,ds:data
start:
    mov ax,data
    mov ds,ax
check_account:
lea dx,check1
mov ah,9
int 21h
mov si,offset account
mov cx,4
check_account_loop:
mov ah,1
int 21h
cmp al,ds:[si]          ;将输入的字符与内存account的字符比较
inc si
jnz check_account_error ;不相等就重新输入
loop check_account_loop
jmp e                   ;全部相等则退出
    check_account_error:
call cr_lf
lea dx,error
mov ah,9
int 21h
call cr_lf
jmp check_account
e:
    mov ah,4ch
    int 21h
               
cr_lf proc ;回车+换行
lea dx,cr
mov ah,9
int 21h
ret
cr_lf endp

code ends
end start

------解决方案--------------------------------------------------------
account内的每一个字符是不是都单独占用一个字节单元?
是。
------解决方案--------------------------------------------------------
这两句换一下位置inc si     jnz check_account_error 会影响标志寄存器