回 帖 发 新 帖 刷新版面

主题:[讨论]汇编

data segment
             buf db 6 dup (?)
             str1 db 'please input the password','$'
             str2 db 'welcome!','$'
             str3 db 'valib password!','$'
data ends
assume ds:data,cs:code
code segment
         mov ax,data
         mov ds,ax
         mov dx,offset str1
         mov ah,9
         int 21h
         mov dx,offset buf
         mov ah,0ah
         int 21h
         mov si,offset buf
         mov bx,[si]
         cmp bx,97h
         jnz lp
         inc si
         mov bx,[si]
         cmp bx,98h
          jnz lp
          inc si
         mov bx,[si]
         cmp bx,99h
           jnz lp
        mov dx,offset str2
        mov ah,9
        int 21h
       jmp v
               
 lp:
      mov dx,offset str3
      mov ah,9
      int 21h
      jmp v
 v:  mov ax,4c00h
    int 21h
          
code ends
end
             

运行出现乱码  


设计一个密码验证程序,密码为”abc”,当密码输入正确时,屏幕显示“Welcom!”,否则屏幕显示”Invalid passoword!”,并退出。

回复列表 (共2个回复)

沙发

别的没看,buf定义有问题——int21h的0Ah功能要求第一字节不能为0,而是缓冲区能容纳的字符数目,键入的字符从第三字节开始存放。第二字节是供返回使用,为实际收到的字符数。
改定义: buf    db  6,0,6 dup(20h)
当然:
         mov si,offset buf
         mov bx,[si]
都要做调整了——mov si,offset buf+2

再有:你的97h/98h/99h怎么输入?按住alt?
a的ASCII码是61h(97),b是62h(98),c是63h(99)——别把十进制写成十六进制:)
括号中为10进制,不要在后面加h

板凳

请教下一楼的大侠,DUP(20H)中的20H是什么意思啊?

我来回复

您尚未登录,请登录后再回复。点此登录或注册