分类: WINDOWS
2006-04-01 12:29:49
咱们没本事创造出汇编语言来,但是我坚信,只要愿意努力,想熟练使用汇编还是比较容易的,大家一起上,把汇编语言拿下!!!!!!!!!真诚期待与大家一起交流,QQ:344903855, E-MAIL:luojiafeng1984@sina.com
运行程序之前,在当前工作目录下建立一个名为success.dat的文件,里面存放"success!"这几个字符,如果密码输入正确,这几个字符就会被读出来显示。
/*
* Copyright (c) 2006 All rights reserved.
* 文件名:CheckPassword.asm
*
* 文件标识:CheckPassword
* 摘要:一个简单的验证密码程序
* 输入:一个密码串(5201314)
* 输出:密码正确,从success.dat文件中读出内容,并显示,否则提示密码错误,并给二次重新输出的机会
*
* 当前版本 0.01
* 作者:罗
* 完成日期:2006年4月1日
*/
;============ 数据段 ===============
data segment
pwfile db 'success.dat', 0
input db 100 dup(?) ;用户输入的密码的存储位置
password db '5201314', '$' ;真实密码
content db 256 dup(?) ;从文件里面读出的内容放在这个缓冲区里
msgerror db 'Password Error!', '$' ;用户密码输入错误时显示的提示信息
msgopenerror db 'File Open Error!', '$' ;打开文件出错时的提示信息
msgreaderror db 'Read File Error!', '$' ;读文件出错时的提示信息
msgcloseerror db 'File Close Error!', '$'
prompt db 'Please Enter Your Password:', '$' ;运行程序时提示输入密码
data ends
;=========== 堆栈段 =================
sseg segment stack
db 256 dup(0)
sseg ends
;=========== 代码段 =================
code segment
assume cs:code, ds:data, ss:sseg, es:data
start:
mov ax, data
mov ds, ax
mov es, ax
mov si, 0
mov bh, 0 ;计数器,用来计算用户密码输入错误的次数
lea dx, prompt
call dispstring ;输出提示信息,提示用户输出密码
pwinput:
mov ah, 08h ;Dos 08号功能调用,不带回显输入一个字符
int 21h
cmp al, 0dh ;和回车符比较
je finish
push ax ;输入的密码字符在al寄存器里面,要保护好,因为输出*号时会改变ax的值
mov dl, '*'
mov ah, 02h
int 21h
pop ax
mov input[si], al
inc si
jmp pwinput
finish:
mov input[si], 24h ;24h是字符串结束符'$'的ASCII码
mov si, 0
mov di, 0
mov cx, 8
pwcheck:
cmp cx, 0
je pwright ;cx=0表示密码输入正确
mov bl, input[si]
mov dl, password[di]
cmp dl, bl
jnz pwerror
inc si
inc di
dec cx
jmp pwcheck
pwright:
call outenter ;输出回车换行
call readdoc ;从文件里面读出信息,并输出
jmp exit
pwerror:
call outenter ;输出一个回车换行
lea dx, msgerror
call dispstring ;输出密码错误时的提示信息
inc bh
cmp bh, 3
jae exit
call outenter ;输出一个回车换行
lea dx, prompt
call dispstring
jmp pwinput
openerror:
lea dx, msgopenerror
call dispstring ;输出提示信息,提示文件打开出错并退出程序
jmp exit
readerror:
lea dx, msgreaderror ;输出提示信息,提示读文件错误并退出程序
call dispstring
jmp exit
closeerror:
lea dx, msgcloseerror ;输出提示信息,提示关闭文件错误,并退出应用程序
call dispstring
exit:
mov ah, 4ch
int 21h
;======= 输出回车换行的子程序 =======
;======= 入口参数:无================
;======= 出口参数:无================
outenter proc near
mov dl, 0dh
mov ah, 02h
int 21h
mov dl, 0ah
mov ah, 02h
int 21h
ret
outenter endp
;======= 输出字符串的子程序 =========
;======= 入口参数:dx = 输出字符串缓冲区的首地址
;======= 出口参数:无 ===============
dispstring proc near
mov ah, 09h
int 21h
ret
dispstring endp
;======= 将文件中的密码读到缓冲区的子程序 ========
;======= 入口参数:无 ============================
;======= 出口参数:Content里面存放从文件里面读出的8个字节内容 ======
readdoc proc near
push ax
push bx
push cx
push dx
mov dx, offset pwfile
mov ax, 3d00h ;3dh号DOS功能调用,打开文件
int 21h
jc openerror ;打开文件出错时转
mov bx, ax
mov dx, offset content
mov cx, 8
mov ah, 3fh ;3Fh号DOS功能调用,读文件到dx缓冲区
int 21h
jc readerror ;读文件出错时转
mov byte ptr content[8], 24h
mov ah, 3eh ;3Eh号DOS功能调用,关闭文件
int 21h
jc closeerror ;关闭文件时出错转
mov dx, offset content
call dispstring ;显示从文件里面读出的字符串
pop dx
pop cx
pop bx
pop ax
ret
readdoc endp
code ends
end start