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

📄 shibie.asm

📁 X86汇编语言实现的用户口令识别
💻 ASM
字号:
DISP MACRO VAR  ;输出字符串
     PUSH DX
     MOV AH,9
     LEA DX,VAR
     INT 21H
     POP DX
     ENDM

DATA SEGMENT USE16
STRING DB 'LIUMEI 123 LIHUA 345 XIAOKE 9834 '
INWORD DB '*$'
LENS EQU $-STRING
BUF DB LENS+1
    DB ?
    DB LENS+1 DUP(?)
MESG DB 0DH,0AH,'$'
MESG1 DB "INPUT NAME AND PASSWORD:",0DH,0AH,"$"
MESG2 DB 0AH,"WELCOME!$"
MESG3 DB 0AH,"SORRY,NAME OR PASSWORD IS WRONG!$"
DATA ENDS
CODE SEGMENT USE16
     ASSUME CS:CODE,DS:DATA,ES:DATA
BEG:MOV AX,DATA
    MOV ES,AX
    MOV DS,AX
    DISP MESG1
    LEA SI,STRING  
    MOV AH,0AH   ;用户名输入
    LEA DX,BUF
    INT 21H
    MOV AL,BUF+1 ;用户名长度
    CMP AL,0
    JZ NFOUND
    CLD

;比较时预先将需比较的字符串长度输入AH
AGAIN:PUSH SI
      MOV AH,0
NEXT:CMP STRING[SI],'$'
     JZ NFOUND
     CMP STRING[SI],20H ;每个字符串都以空格为结束符
     JZ LAST
     INC AH  ;AH<=字符串长度
     INC SI
     JMP NEXT
LAST:CMP AH,AL
     JZ MATCH
     INC SI    ;搜索下一字符串匹配
     JMP AGAIN
MATCH:POP SI   ;相同长度的用户名匹配
      MOV DI,OFFSET BUF+2
      MOV CL,AL
      MOV CH,0
      REPE CMPSB
      JZ FOUND
      JNZ AGAIN

;密码匹配
FOUND:DISP MESG
      INC SI
      PUSH DI
INPUT:MOV AH,08
      INT 21H
      CMP AL,0DH ;判断密码是否输入结束
      JZ INEND
      MOV [DI],AL
      INC DI
      DISP INWORD ;输出*
      JMP INPUT
;密码匹配比较
INEND:MOV AX,DI
      POP DI
      SUB AX,DI ;输入密码长度存入AL
      CMP AL,0
      JZ NFOUND
      MOV CL,AL
      MOV CH,0
      CLD
      REPE CMPSB ;密码是否匹配
      JNZ NFOUND
      CMP STRING[SI],20H ;需匹配的密码是否完全匹配,若未完全匹配则匹配失败
      JNZ NFOUND
      DISP MESG2
      JMP EXIT
NFOUND:DISP MESG3
EXIT:MOV AH,4CH
     INT 21H
CODE ENDS
END BEG

⌨️ 快捷键说明

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