硬盘参数的快速检测

Author: 青岛 郭书军 Date: 1996-11-29

        硬盘参数的检测方法,很多计算机报刊上都有介绍,但不一定可靠。新版ROM BIOS中的自动检测硬盘(AUTO DETECT HARD DISK)功能无疑给使用者带来了很大方便,可惜对于没有该功能的微机,使用者无法自动检测硬盘参数,本文通过对ROM BIOS中自动硬盘功能的分析,总结出硬盘参数的快速检测方法,并给出检测程序,以方便用户使用。
        检测硬盘参数时,首先问硬盘命令/状态端口1F7H发出读硬盘参数命令ECH,延时一段时间后,从硬盘数据端口1F0H读出100H的数据,其中包含有硬盘的三个重要参数:柱面数Cyln)、磁头数(Head)和扇区数(Sect),它们的位置分别是02H、06H和0CH,将这三个参数转换成十进制,并以ASCII码显示出来。根据这三个参数,从ROM BIOS的硬盘设置中找出相应的类型号。如果找不到相应的类型号,则可设置为用户类型(User Type),设置为用户类型时,一般将Wpoom设为65535,LZone的值和柱面数相同,硬盘容量设置程序会根据柱面数,磁头数和扇区数自动算出。
        检测并显示硬盘参数的汇编语言程序如下:
        C:>debug diskinfo.com
        File not found
        -A 100
        100 JMP 116   ;转主程序
        102 MOV CL,OA   ;二__十进制转换子程序
        104 DIV CL
        106 OR AX,3030
        109 PUSH AX
        10A MOV AH,OE
        10C INT 10   ;ASCII显示
        10E POP AX
        10F MOV AL,AH
        111 MOV AH,OE
        113 INT 10
        115 RET
        116 MOV DX,1F7   ;主程序
        11B OUT DX,AL   ;发出命令
        11C MOV AL,10
        11E LOOP 11E   ;延时
        120 DEC AL
        122 JNZ 11E
        124 MOV DX,1F0
        127 MOV DI,180
        12A MOV CX,100
        12D CLI
        12E CLD
        12F REPZ
        130 DB 6D   ;INSW读出数据
        131 STI
        132 MOV SI,180
        135 MOV AX,[SI+2];柱面数
        138 MOV CL,64
        13A DIV CL
        13C PUSH AX
        13D MOV AH,0
        13F CALL 102   ;转换显示
        142 POP AX
        143 MOV AL,AH
        145 MOV AL,0
        147 CALL 102
        14A INT 10
        14E MOV AX,[SI+6]   ;磁头数
        151 CALL 102
        154 MOV AL,20
        156 INT 10
        158 MOV AX,[SI+C]   ;扇区数
        15B CALL 102
        15E INT 20
        RCX
        0000
        :160
        -W
        -Q
        在DEBUG 环境下将上述程序输入计算机,存盘后即可使用。本程序在多种微机上对多种硬盘操作正常。