📄 password.asm
字号:
cseg segment
assume cs:cseg,ds:cseg
org 100h
start:
jmp begin
inbuf db 10,?,10 dup (?)
username db '用户:Amadis.Mu.E-请输入用户口令',0dh,0ah,'$'
compstr db '123456'
cpstr_size = $ - compstr
msg1 db 'Welcome!'
msg1_size = $ - msg1
msg2 db 'Invalid password'
msg2_size = $ - msg2
cr proc
push ax
push bx
push dx
mov ah,2
mov dl,0dh
int 21h
mov ah,2
mov dl,0ah
int 21h
pop dx
pop bx
pop ax
ret
cr endp
getpass proc near
push ax
push bx
push cx
push dx
mov bx,dx
mov cl,[bx]
mov ch,cl
or cl,cl
jz @@9
add bx,2
@@0:
mov ah,8
int 21h
cmp al,0
je @@0
cmp al,4bh
je @@1
cmp al,8
je @@1
cmp al,0dh
je @@8
cmp cl,1
ja @@2
mov dl,7
mov ah,2
int 21h
jmp @@0
@@1:
cmp cl,ch
je @@0
dec bx
inc cl
mov ah,2
mov dl,8
int 21h
mov dl,20h
int 21h
mov dl,8
int 21h
jmp @@0
@@2:
mov [bx],al
inc bx
dec cl
mov ah,2
mov dl,'*'
int 21h
jmp @@0
@@8:
mov [bx],al
pop bx
push bx
sub ch,cl
mov [bx+1],ch
@@9:
pop dx
pop cx
pop bx
pop ax
ret
getpass endp
begin:
mov ax,seg username
mov ds,ax
mov dx,offset username
mov ah,09h
int 21h
push cs
pop ds
push cs
pop es
mov ax,0f00h
int 10h
mov dx,offset inbuf
call getpass
call cr
mov si,offset inbuf
mov cl,[si+1]
cmp cl,cpstr_size
jne l2
add si,2
mov di,offset compstr
cld
mov ch,0
repe cmpsb
jne l2
mov bp,offset msg1
mov bx,0001h
mov cx,msg1_size
jmp l3
l2:
mov bp,offset msg2
mov bx,0084h
mov cx,msg2_size
l3:
push bx
push cx
mov ah,3
mov bh,0
int 10h
mov dl,0
mov ax,1301h
pop cx
pop bx
int 10h
mov ah,4ch
int 21h
cseg ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -