title***简单密码输入 by lluct*** datasegment;定义数据段 input db 100 dup (?) ;定义输入的字符串,字符串必须用db定义,长度为100个字节 cmpare db '5201314','$' ;定义密码 msg1 db 'PASSWORD RIGHT!','$' 逆风编程精品 ;定义输入密码正确后显示出来的信息 msg2 db 'PASSWORD ERROR!','$' ;定义输入密码错误后显示出来的信息 headmsg db 'ENTER YOUR PASSWORD:','$' ;头信息 dataends;数据段结尾
codesegment;定义代码段 assumecs:code;规定cs的内容 assumeds:data;规定ds的内容
start:movax,data;程序从start开始 movds,ax;ds置初值,data的段地址 movsi,0;变址寄存器置初值0
call enter;调用显示回车换行子程序 lea dx,headmsg;输出头信息字符串的偏移地址 call dispchs;调用显示字符串子程序 repeat:movah,01h ;定义repeat标号,用于循环输入单个字符.调用1号功能:从键盘输入一个字符并回显 int21h;完成输入回显 cmp al,0dh;输入的字符和cr(回车)比较 jefinish;如果等于回车就转移到finish movinput[si],al;把al的置传送到input的si地址中(好像是这样吧) incsi;si加1 jmprepeat;无条件转移到repeat finish:movinput[si],24h;给输入完成的字符串加上结束标志($) callenter
mov si,0;源变址寄存器置初值0 mov di,0;目的变址寄存器置初值0 mov cx,8;设置密码检查位数(结束标志也要算进去) check: cmp cx,0;置位数为0. je right;如果密码检查完成,转移到right mov bl,input[si];把input的si地址中的数据传送到bl mov dl,cmpare[di];把cmpare的di地址中的数据传送到dl cmp dl,bl;dl和bl比较 jne error;如果不相等,就转移到error inc si;si加1 inc di;di加1 dec cx;cx减1 jmp check;无条件转移到check
right: call enter lea dx,msg1 call dispchs call enter jmp exit
error: call enter lea dx,msg2 call dispchs mov dl,07h;输出ascii码的报警(响铃)控制符bel(07h) call dispch call enter jmp exit exit:movah,4ch;4c号功能调用:终止当前程序并返回 int21h;返回dos
enterprocnear;显示回车换行子程序 movdl,0dh;输出ascii码的回车控制符cr(odh) calldispch movdl,0ah;输出ascii码的换行控制符lf(0ah) calldispch ret;返回 enterendp;子程序结尾
dispchprocnear;显示单个字符子程序 movah,02h;2号功能调用:显示器输出字符 int21h;完成输出显示 ret dispchendp
dispchsprocnear;显示字符串子程序 movah,09h;9号功能调用:显示字符串 int21h;完成输出显示 ret dispchsendp
codeends;代码段结尾 endstart;结束汇编
;把以上代码复制到记事本等文本程序中,并保存.(如passwrod.asm) ;编译:masm password.asm ;连接:link password.obj ;执行:password.exe
[1][2]下一页
|