⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.asm

📁 密码判断~~大家看看怎么样,功能也就一般~具体的自己用吧
💻 ASM
字号:
;============ 数据段 ===============
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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -