FDOG.ASM
上传用户:yugezi
上传日期:2007-01-06
资源大小:18k
文件大小:3k
源码类别:

磁盘编程

开发平台:

Others

  1. code segment
  2.      assume cs:code;ds:code
  3.      org 100h
  4. start:jmp init
  5. old13h dd ?
  6. buf db 512 dup(0)
  7. lmsg db 'Babysoft  (R) Floppy Disk Dog version 1.0',0Ah,0Dh
  8.      db 'Copyright (C) 1997.11 LiuYaDing,Babysoft Corp.',0Ah,0Dh,'$'
  9. hhmsg db 'Floppy Disk Dog installed.',0Ah,0Dh,'$'
  10. jxok db 'Floppy Disk Dog has installed flag on disk.',0Ah,0Dh,'$'
  11. msg db 'Invalid floppy!!!'
  12. dev db 0
  13. jsz db 0
  14. set dd 0ffff0000h
  15. new13h proc far
  16.     pushf
  17.     cmp ah,2
  18.     jb old
  19.     cmp ah,3
  20.     ja old
  21.     cmp dl,80h
  22.     jz old
  23.     jmp jx
  24. old:popf
  25.     jmp cs:old13h
  26. jx: popf
  27.     pushf
  28.     push ds
  29.     push es
  30.     push ax
  31.     push bx
  32.     push cx
  33.     push dx
  34.     push si
  35.     push di
  36.     mov ax,cs
  37.     mov ds,ax
  38.     mov es,ax
  39.     mov dev,dl
  40.     mov jsz,3
  41.     mov ax,201h
  42.     mov cx,2
  43.     mov dh,0
  44.     mov bx,offset buf
  45.     pushf
  46.     call cs:old13h
  47. readfat:
  48.     mov ax,201h
  49.     mov cx,2
  50.     mov dh,0
  51.     mov bx,offset buf
  52.     pushf
  53.     call cs:old13h
  54.     jnc cmpid
  55.     cmp jsz,3
  56.     jz cmpid
  57.     dec jsz
  58.     mov ax,0e07h
  59.     int 10h
  60.     mov ah,0
  61.     mov dl,dev
  62.     call cs:old13h
  63.     pushf
  64.     jmp readfat
  65. cmpid:
  66.     mov ax,word ptr [buf+1]
  67.     cmp ax,3456h
  68.     jz oold
  69.     mov ah,3
  70.     mov bh,0
  71.     int 10h
  72.     push dx
  73.     mov dx,30h
  74.     lea si,msg
  75.     mov cx,17
  76. loop1:
  77.     mov ah,2
  78.     int 10h
  79.     mov bl,70h
  80.     mov ah,9
  81.     lodsb
  82.     int 10h
  83.     inc dl
  84.     loop loop1
  85.     mov ah,2
  86.     pop dx
  87.     int 10h
  88.     mov ah,0
  89.     int 16h
  90.     or al,20h
  91.     cmp al,'y'
  92.     jnz reset
  93.     pop di
  94.     pop si
  95.     pop dx
  96.     pop cx
  97.     pop bx
  98.     pop ax
  99.     pop es
  100.     pop ds
  101.     popf
  102.     mov ah,4ch
  103.     int 21h
  104. reset:
  105.     mov bx,0
  106.     mov si,0
  107.     xor ax,ax
  108.     mov ds,ax
  109.     mov word ptr ds:[472h],1234h
  110.     push cs
  111.     pop ds
  112.     jmp set[bx][si]
  113. oold:
  114.     pop di
  115.     pop si
  116.     pop dx
  117.     pop cx
  118.     pop bx
  119.     pop ax
  120.     pop es
  121.     pop ds
  122.     popf
  123.     assume ds:nothing
  124.     jmp cs:old13h
  125. new13h endp
  126. init:
  127.     push cs
  128.     pop ds
  129.     mov dx,offset lmsg
  130.     mov ah,9
  131.     int 21h
  132.     mov si,80h
  133.     mov al,[si]
  134.     cmp al,0
  135.     jz zl
  136.     mov si,82h
  137.     mov al,[si]
  138.     and al,0fh
  139.     dec al
  140.     cmp al,1
  141.     ja error
  142.     push ax
  143.     mov cx,1
  144.     mov dx,1
  145.     mov bx,offset buf
  146.     int 25h
  147.     mov ax,3456h
  148.     mov word ptr [buf+1],ax
  149.     popf
  150.     pop ax
  151.     mov cx,1
  152.     mov dx,1
  153.     int 26h
  154.     jnc exit
  155. error:
  156.     mov ah,9
  157.     mov dx,offset er
  158.     int 21h
  159.     mov ax,4c00h
  160.     int 21h
  161. exit:
  162.     mov dx,offset jxok
  163.     mov ah,9
  164.     int 21h
  165.     mov ax,4c00h
  166.     int 21h
  167. er db 07h,'Write-protected or Invalid driver!',0Ah,0Dh,'$'
  168. zl: mov ax,3513h
  169.     int 21h
  170.     mov di,bx
  171.     mov si,offset new13h
  172.     mov cx,offset init
  173.     sub cx,si
  174.     cld
  175.     repz cmpsb
  176.     jnz zl1
  177.     mov dx,offset hmsg
  178.     mov ah,9
  179.     int 21h
  180.     mov ax,4c00h
  181.     int 21h
  182. hmsg:
  183.     db 07h,'Floppy Disk Dog has already installed!',0Ah,0Dh,'$'
  184. zl1:
  185.     mov dx,offset hhmsg
  186.     mov ah,9
  187.     int 21h
  188.     mov word ptr old13h,bx
  189.     mov word ptr old13h+2,es
  190.     mov dx,offset new13h
  191.     mov ax,2513h
  192.     int 21h
  193.     mov dx,offset init
  194.     int 27h
  195. code ends
  196.      end start