设为首页
联系站长
加入收藏

  格言小语:

励志歌曲版

您现在的位置: 主页 >> 论文 >> 理工论文 >> 计算机论文
  欢迎阅读:如何测试软硬盘驱动器参数
如何测试软硬盘驱动器参数
日期:2006-4-7 15:27:36 来源:论文大全 查看:[ ] 作者:未知  点击:

  在提供的测试驱动器子程序中,使用了DOS INT 21h 的设备管理功能调用 44XXh(IOCTL)的两个子功能:AX=4409h 和AX=440Dh。通过对What-Drv子程序的调用,可得到指定驱动器的类型。该测试子程序的调用方式为:

  输入:AL=驱动器标号(A,B,C,...)

  程序:CALL What-Drv

  输出:CF= 0 成功

  AL= 驱动器类型(提供之源码中有各种类型说明)

  DS:DX= Device-Params读取参数缓冲区,共有32Bytes长度

  CF= 1失败

  AX=错误代码

  1.测试指定驱动器状态

  本子功能是测试所指定驱动器是否为单机或网络之共享状态输入:AX= 4409h

  BL= 0,1,2,...(0=defult,1=A,2=B,3=C,...)

  中断:INT 21h

  输出:CF= 0成功

  DX=返回状态(这里仅讨论DX寄存器的Bit12,在返回的参数中,DX还有其它许多状态值,本节将不在此讨论)

  若Bit12=0,则为单机状态

  Bit12=1,则为服务器共享状态

  CF= 1失败

  AX=错误代码

  2.读取指定驱动器参数

  本子功能将读出指定驱动器的各种参数,包括驱动器类型、文件分配表FAT大小,根目录ROOT大小,及其它BPB各种磁盘参数。本子程序仅读取驱动器类型参数。

  输入:AX= 440Dh,

  BL= 0,1,2,...(0=defult,1=A,2=B,3=C,...)

  CX= 0860h 这里 CH=08h表示磁盘驱动器

  CL=60h表示读取驱动器参数

  DS∶DX=Device-Params指向读取参数缓冲区,共有32 Bytes长度

  中断:INT 21h

  输出:CF= 0成功

  DS∶DX=缓冲区包含读出驱动器参数

  CF= 1失败

  AX=错误代码

  3.磁盘参数区

  表1为一130mm 1.2MB的软盘驱动器参数信息(共32字节长度)。

  @@08a08600.GIF;表1@@

  4.测试驱动器源码(程序1)

  程序1:

  ;------------

  ; Check Drive Type

  ;Input: AL=Can be any drive letter(A,B,C..)

  ;Output: CF=0 Successfully

  ; AL=drive type will be returned as an

  ; ERRORLEVEL.

  ; DS∶DX=Pointer to parameter block

  ; CF=1 Failed

  ; all registers restored.

  ;-----------------

  ; ERRORLEVEL Result

  ; --------------

  ; -1Drive isn′t local

  ; 0320K/360K 130mm.drive

  ; 11.2M 130mm.drive

  ; 2720K 90mm.drive

  ; 3Single-density 203mm.drive

  ; 4Double-density 203mm.drive

  ; 5Hard disk

  ; 6Type drive

  ; 71.44M drive

  ; 8Something else

  ;------------;

  What-drv proc near

  push cx ;save registers

  push bx

  mov bl,al

  and bl,lfh ;bl=0,1,2..

  mov ax,4409h

  ;Check workstation /server

  push bx

  int 21h

  pop bx

  jb What-error ;Error to exit

  test dh,10h ;test server?

  jz What-continue

  mov al,-1

  jmp short What-Exit

  What-continue:

  mov ax,440dh

  mov cx,0860h

  ;Get device paramters

  push cs

  pop ds

  mov dx,offset Device-params

  int 21h

  jb What-error ;Error to exit

  mov al,[Device-Params+1]

  ;Get device type

  What-Exit:

  clc ;Successfully flag

  What-error:

  pop bx ;recover registers

  pop cx

  retn

  What-drv endp

  Device-Params db 32 dup(0)

  二、读取硬盘参数

  硬盘是主机重要的存储设备,不同厂家,不同大小的硬盘参数均不相同。这里所说的硬盘参数是:磁头数、簇面数和扇区数。本节将给出一个读取硬盘参数的子程序(不含逻辑,即将一个大硬盘分成两个以上分区。当然读者也可修改本程序,以便能识别两个以上分区的硬盘)。在下面的程序中,将首先读取硬盘的主引导区 Master boot record,因为所有的硬盘参数都存放在里面。程序流程如下:

  (1) 将指定的物理硬盘主引导区读入缓冲区

  (2) 在引导区偏移地址1BEh处获取相应的硬盘参数

  (3) 通过计算求得该硬盘的磁头数、簇面数和扇区数

  (4) 由得到的硬盘参数求得其容量大小

  Get-FdiskParam 子程序调用方式为:

  输入:AL=硬盘物理ID号(80h 或 81h)

  程序:CALL Get-FdiskParam

  输出:CF=0成功

  AX= 硬盘容量大小(Hex)

  CX= 簇面数

  DL=扇区数

  DH=磁头数

  CF=1 失败

  1.硬盘分区表参数

  在硬盘主引导区的1BEh位置即为硬盘分区表参数区,一个硬盘最多只能分成四个逻辑分区,每个分区参数表占10 h Bytes长度。本节为方便起见,仅设定硬盘为一个分区的情况,至于多分区情况,请读者通过修改本程序亦可获得。这里以162MB硬盘主引导区中的分区表参数为例。

  @@08A08601.GIF;表2 硬盘分区表参数@@

  由参数表可查出:磁头数=15,簇面数=1010,扇区数=22

  2.硬盘容量计算

  通过分区表的参数,还可求得硬盘的容量大小。在提供的程序中对硬盘容量的计算均按16进制方式:

  硬盘容量(MB)=磁头数×簇面数×扇区数×512/1024为精简程序,笔者在计算时舍掉了许多余数(舍掉较多,仅保留整数),故此计算得来的容量与实际容量有些差异,请读者引用时注意。

  3.读硬盘参数源码(程序2)

  程序2:

  ;----------------

  ;Get Hard Cyls,Sector,Head,Size

  ;Input:AL= Fdisk ID(80h,81h)

  ;Output: CF= 0 successfully

  ;AX= Fdisk size(Hex)

  ;CX= Number of Cylinders

  :DL= Number of Sectors

  ;DH= Number of Heads

  ;CF= 1 failed

  ;-------------

  Get-Fdiskparamproc near

  cmp al,80h ;test Fdisk ID

  jb Get-FdiskExit

  mov cx,cs

  mov ds,cx

  mov es,cx ;set DS,ES segment

  mov dl,al ;Fdisk ID

  mov bx,offset Partition-area

  mov cx,1

  mov dh,0

  mov ax,201h ;read partition sector

  int 13h

  jb Get-FdiskExit ;failed to exit.

  mov bx,offset Partiton-area+1beh

  mov al,[bx+8] ;Sector counter

  mov ah,[bx+5] ;Head counter

  mov dl,[bx+7] ;cylinder lower

  mov dh,[bx+6] ;cylinder high

  mov cx,6

  shr dh,cl

  inc dx ;get cylinder

  push dx ;save cylinder

  push ax ;save head & sector

  mul ah ;compute Fdisk size

  mul dx

  mov cx,11

  Loop-shift:

  shr dx,1

  rcr ax,1

  loop Loop-shift ;Get Fdisk size

  pop dx ;sectors & heads

  pop cx ;cylinder counter

  clc ;clear CF flag

  Get-FdiskExit:

  retn

  Get-FdiskParamendp

  Partition-area db 512 dup(0) ;read Partition buffer

  作者:李宇

 感谢阅读:如何测试软硬盘驱动器参数

收藏本页 关闭窗口 返回顶部

·Turbo C位图和BMP位图格式分极及
·在DOS实模式下直接存取4GB内存
·Turbo C位图和BMP位图格式分极及
·Windows下多串口的配置与使用
·在DOS实模式下直接存取4GB内存
·网络教学中教师与学生的基本素养
·多媒体创作系统的设计与实现
·未来教育的处女地--科技教育专业
·信息素养概念比较及培养
·网络课程学习支撑环境的设计

本栏热门文章

湘ICP备05012498号 

Powered By: CD520.Net