當前位置:係統粉 >  係統教程 > 電腦軟件教程 >  軟硬盤驅動器參數到底該如何測試 通過什麼方法才可以測試出軟硬盤驅動器參數

軟硬盤驅動器參數到底該如何測試 通過什麼方法才可以測試出軟硬盤驅動器參數

時間:2017-07-04 來源:互聯網 瀏覽量:

今天給大家帶來軟硬盤驅動器參數到底該如何測試,通過什麼方法才可以測試出軟硬盤驅動器參數,讓您輕鬆解決問題。

如何測試軟硬盤驅動器參數

一、如何測試驅動器類型

隨著

PC

硬件的高速發展

,

各種應用軟件對外設的要求亦不斷提高

,

這使得有些軟件的設計者

在開發軟件時需要對主機的配套設備進行檢查

,

以便能更好地利用這些設備。如對處理器

CPU

及協處理器的檢測、對驅動器的檢測等等。對於上述的測試

,

CPU

及協處理器的測試

方法已有不少文章論述過外

,

還很少有對驅動器測試的論述。本文將詳細介紹如何測試驅動

,

並給出相應的子程序源碼

,

讀者可根據需要將其變成一獨立程序

,

也可將其加入到自己的

應用程序中去。

在提供的測試驅動器子程序中

,

使用了

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

失敗

文檔衝億季,好禮樂相隨

mini ipad移動硬盤拍立得百度書包

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

以上就是軟硬盤驅動器參數到底該如何測試,通過什麼方法才可以測試出軟硬盤驅動器參數教程,希望本文中能幫您解決問題。

我要分享:
版權信息

Copyright @ 2011 係統粉 版權聲明 最新發布內容 網站導航