AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > 汇编语言

汇编源码--drives

51自学网 http://www.51zixue.net
; Drive detection by: Lee Hamel (hamell@cs.pdx.edu) - July 6th, 1994; Partial credit to : Paul Schlyter;; Goes thru drives A-Z and determines if they:; 1) Exist; 2) Are removable or fixed; 3) Are local, remote, or shared; 4) Are a floppy, hard, RAM, subst, or CD-ROM drive.model tiny.286DRIVEXISTS      EQU     1REMOVEDRV       EQU     0FIXEDDRV        EQU     1LOCALDRV        EQU     0REMOTEDRV       EQU     1SHAREDRV        EQU     2FLOPPY          EQU     0HARD            EQU     1RAM             EQU     2SUBST           EQU     3CDROM           EQU     4.code        org     100hstart:          mov     ah,19h                int     21h             ; get start drive                mov     [curdrive],al                mov     ax,40h                mov     es,ax                mov     bh,es:[10h]     ; 40:10h is # of floppies-1                shr     bh,6                inc     bh              ; # of actual floppy drives                mov     bl,1                mov     di,offset drivesnextchkfloppy:  mov     ax,4409h        ; check if drive exists                int     21h                jc      nextsetfloppy                test    dh,10000000b    ; check if SUBST drive                jz      chkfloppy                dec     bh              ; dec actual drive count                mov     byte ptr [di+3],SUBSTsetfloppyexist: mov     byte ptr [di],DRIVEXISTS                jmp     nextsetfloppychkfloppy:      dec     bh              ; dec actual drive count                js      nextsetfloppy                mov     byte ptr [di+1],REMOVEDRV                mov     byte ptr [di+3],FLOPPY                jmp     setfloppyexistnextsetfloppy:  add     di,4                inc     bl                cmp     bl,2            ; if B then jump back                je      nextchkfloppy                mov     ch,24           ; loop 24 times (drives C - Z)                mov     cl,3            ; start at C:drivechkloop:   mov     ax,4409h        ; check if drive exists                mov     bl,cl           ; set drive letter                int     21h             ; 0 = default, 1 = A:, etc.                jc      nextsetdrv                mov     byte ptr [di],DRIVEXISTS                mov     ax,4408h        ; check if removable                int     21h                mov     byte ptr [di+1],al      ; set REMOVABLE or FIXED                mov     bx,dx                mov     dl,dh                shr     dl,7                and     dh,00010000b                shr     dh,4                mov     byte ptr [di+2],dh      ; set REMOTE or LOCAL                or      dl,dl                   ; if not SUBST, then jump                jz      chkremote                mov     byte ptr [di+3],SUBST                jmp     nextsetdrvchkremote:      cmp     dh,REMOTEDRV    ; if REMOTE, then check for CD ROM                je      chkcdrom                test    bh,00000010b    ; sharable?                jz      drivenoshare                mov     byte ptr [di+2],SHAREDRVdrivenoshare:   test    bl,00000010b    ; RAM drive?                jnz     nextsetdrv                mov     byte ptr [di+3],RAM                jmp     nextsetdrvchkcdrom:       push    cx                mov     ax,1500h                xor     bx,bx                int     2fh                pop     cx                or      bx,bx           ; MSCDEX driver found?                jz      nextsetdrv      ; if not, jump to next drive setup                mov     ax,150bh                dec     cl              ; 0=A:, etc.                int     2fh                inc     cl                or      ax,ax                jz      nextsetdrv      ; drive supported by MSCDEX?                mov     byte ptr [di+3],CDROMnextsetdrv:     add     di,4                inc     cl                dec     ch                jnz     drivechkloop                mov     ah,0eh                mov     dl,[curdrive]                int     21h             ; reset start drive                mov     cl,'A'          ; output all existing drives                mov     di,offset drives                mov     ah,9drvdumploop:    cmp     byte ptr [di],DRIVEXISTS                jne     nextdrvdump                mov     al,cl                int     29h                xor     dh,dh                mov     dl,byte ptr [di+1]                shl     dx,4                add     dx,offset removablemsg                int     21h                xor     dh,dh                mov     dl,byte ptr [di+2]                shl     dx,3                add     dx,offset localmsg                int     21h                xor     dh,dh                mov     dl,byte ptr [di+3]                shl     dx,3                add     dx,offset typemsg                int     21h                mov     dx,offset crlf                int     21hnextdrvdump:    add     di,4                inc     cl                cmp     cl,'Z'                jbe     drvdumploop                retcurdrive        db      0drives          db      26 dup(0,1,0,1)        ; default to not exist, fixed, local, hard drivecrlf            db      10,13,'$'removablemsg    db      ':    Removable $'                db      ':        Fixed $'localmsg        db      'Local  $'                db      'Remote $'                db      'Shared $'typemsg         db      'Floppy $'                db      'Hard   $'                db      'RAM    $'                db      'Subst  $'                db      'CD-ROM $'        end     start

 

 

 
上一篇:汇编源码--drivesex  下一篇:汇编源码--ctrladel