ZPASS1.ASM
上传用户:haocheng
上传日期:2007-01-06
资源大小:24k
文件大小:4k
源码类别:

磁盘编程

开发平台:

Others

  1. .MODEL tiny
  2. .CODE
  3. DISKIO equ 13h
  4. VIDEO equ 10h
  5.       org 200h
  6. GetPassWord proc
  7. PassBegin:
  8. MyRoutine:
  9.      push cs
  10.      pop ds
  11.      mov di,offset HeadMsg
  12.      call Put_Str
  13.      mov di,offset PSWBuffer
  14.      call ReadStr
  15.      mov si,offset PSWBuffer
  16.      mov di,offset Password
  17.      mov cl,byte ptr [di]
  18.      mov ch,byte ptr [si]
  19.      cmp cl,ch
  20.      jnz NoMatch
  21.      xor ch,ch
  22.      repe cmpsb
  23.      jz right
  24. NoMatch:
  25.      mov di,offset ErrorMsg
  26.      call Put_Str
  27. DeadLoop:
  28.      jmp DeadLoop
  29. Right:
  30.      mov di,offset RC
  31.      call Put_Str
  32.      ret
  33. ReadStr proc near
  34.      push es
  35.      push di
  36.      push cs
  37.      pop es
  38.      inc di
  39.      mov Plength,0
  40. Next:
  41.      cmp PLength,15
  42.      jge @l1
  43.      mov ah,1
  44.      int 16h
  45.      jz Next
  46.      mov ax,0
  47.      int 16h
  48.      cmp al,0
  49.      je next
  50.      cmp al,08
  51.      je @l2
  52.      cmp al,13
  53.      je @l1
  54.      sub al,20
  55.      or al,80h
  56.      stosb
  57.      mov al,'*'
  58.      mov bx,0
  59.      mov ah,0eh
  60.      int 10h
  61.      inc PLength
  62.      jmp next
  63. @l2:
  64.      cmp PLength,0
  65.      je next
  66.      dec di
  67.      mov al,00h
  68.      stosb
  69.      mov ah,03h
  70.      mov bh,00h
  71.      int 10h
  72.      mov al,' '
  73.      mov ah,0eh
  74.      int 10h
  75.      mov ah,02h
  76.      int 10h
  77.      dec PLength
  78.      dec di
  79.      jmp next
  80. @l1:
  81.      pop di
  82.      mov al,byte ptr PLength
  83.      mov byte ptr [di],al
  84.      pop es
  85.      ret
  86. ReadStr endp
  87. Put_Str proc
  88.      mov al,cs:[di]
  89.      cmp al,'$'
  90.      je A1
  91.      mov ah,0eh
  92.      mov bx,0003h
  93.      int video
  94.      inc di
  95.      jmp Put_Str
  96. A1:  ret
  97. Put_Str endp
  98. PLength db 0
  99. HeadMsg db "Waking up Babysoft-HDKeeper... ok.",0ah,0dh,0ah,0dh
  100. db 'Password: ','$'
  101. RC      db 0ah,0dh,0ah,0dh,'$'
  102. PassTail:
  103. PassLen equ 1024-(PassTail-PassBegin)
  104. db PassLen dup(0)
  105. org PassBegin+1024
  106. GetPassword endp
  107.      org 600h
  108. GetPass Proc
  109. PBegin:
  110.      push ax
  111.      push cx
  112.      push ds
  113.      push es
  114.      push si
  115.      push di
  116.      xor ax,ax
  117.      mov ds,ax
  118.      mov ax,ds:[3f0h]
  119.      mov ds,ax
  120.      mov es,ax
  121.      mov di,offset PSWBuffer
  122.      call PReadStr
  123.      mov si,offset PSWBuffer
  124.      mov di,offset Password
  125.      mov cl,byte ptr [di]
  126.      mov ch,byte ptr [si]
  127.      cmp cl,ch
  128.      jnz $t1
  129.      xor ch,ch
  130.      repe cmpsb
  131.      mov ax,1075
  132.      mov cx,5
  133.      jz Right2
  134. $t1:
  135.      add ax,200
  136.      call Music
  137.      call Delay
  138.      loop $t1
  139.      call NoSound
  140.      pop di
  141.      pop si
  142.      pop es
  143.      pop ds
  144.      pop cx
  145.      pop ax
  146.      stc
  147.      ret
  148. Right2:
  149.      mov ax,2275
  150. $t4:
  151.      sub ax,200
  152.      call Music
  153.      call Delay
  154.      loop $t4
  155.      call NoSound
  156.      pop di
  157.      pop si
  158.      pop es
  159.      pop ds
  160.      pop cx
  161.      pop ax
  162.      clc
  163.      ret
  164. PReadstr proc near
  165.      push es
  166.      push di
  167.      inc di
  168.      mov Plength,0
  169. PNext:
  170.      cmp Plength,15
  171.      jge @Pl1
  172.      mov ah,1
  173.      int 16h
  174.      jz PNext
  175.      mov ax,0
  176.      int 16h
  177.      cmp al,0
  178.      je Pnext
  179.      cmp al,08
  180.      je @Pl2
  181.      cmp al,13
  182.      je @Pl1
  183.      sub al,20
  184.      or al,80h
  185.      stosb
  186.      inc PLength
  187.      jmp Pnext
  188. @Pl2:
  189.      cmp PLength,0
  190.      je PNext
  191.      dec di
  192.      mov al,00h
  193.      stosb
  194.      dec PLength
  195.      dec di
  196.      jmp PNext
  197. @Pl1:
  198.      pop di
  199.      mov al,byte ptr Plength
  200.      mov byte ptr [di],al
  201.      pop es
  202.      ret
  203. PReadstr endp
  204. timer2 equ 42h
  205. tim_ctr equ 43h
  206. port_b equ 61h
  207. Music Proc
  208.       push ax
  209.       mov al,10110110b 
  210.       out tim_ctr,al
  211.       pop ax
  212.       out timer2,al
  213.       mov al,ah
  214.       out timer2,al
  215.       in al,port_b
  216.       or al,00000011b
  217.       out port_b,al
  218.       ret
  219. Music EndP
  220. NoSound proc
  221.       in al,port_b
  222.       and al,11111100b
  223.       out port_b,al
  224.       ret
  225. NoSound Endp
  226. Delay Proc
  227.       push si
  228.       mov si,0A000h
  229. @j1:
  230.       dec si
  231.       cmp si,0
  232.       jnz @j1
  233.       pop si
  234.       ret
  235. Delay Endp
  236. ErrorMsg db 07h,0ah,0dh,0ah,0dh,'Sorry! You are Unwelcome Guest!',0ah,0dh
  237.  db 'I can not let you in!',0ah,0dh
  238.  db 'Ha!Ha!Ha!...','$'
  239. Ptail:
  240. RestLen equ 200h-(Ptail-PBegin)-32
  241.         db RestLen dup(0)
  242.         org PBegin+200h-32
  243. PASSWORD db 0,15 dup(0)
  244. PSWBuffer db 0,15 dup(1)
  245. GetPass endp
  246. END