99久久99久久精品免费看蜜桃,亚洲国产成人精品青青草原,少妇被粗大的猛烈进出va视频,精品国产不卡一区二区三区,人人人妻人人澡人人爽欧美一区

首頁 > 文章中心 > 正文

硬盤參數(shù)測試

前言:本站為你精心整理了硬盤參數(shù)測試范文,希望能為你的創(chuàng)作提供參考價值,我們的客服老師可以幫助你提供個性化的參考范文,歡迎咨詢。

硬盤參數(shù)測試

《計算機世界月刊》1995年第八期上刊登了李宇先生的一篇文章,介紹了測試PC機軟硬盤參數(shù)的方法。文中介紹的讀取硬盤參數(shù)的方法是通過讀取并分析硬盤主引導記錄Masterbootrecord來取得硬盤信息的。此方法適用范圍比較廣。事實上由于現(xiàn)在很多PC都使用IDE型的硬盤,因此,我們也可以通過直接編程IDE控制器的方法獲得硬盤參數(shù)。下面簡單介紹一下這個方法,并給出一個匯編程序供大家參考。

IDE(IntegratedDriveElectronics)有時也被稱為ATAPI型控制器。此種控制器速度快,集成度高,在PC機中應(yīng)用廣泛。我們可以通過一些IDE控制命令來完成硬盤的讀/寫/校驗等各種操作。本文僅介紹其中的硬盤測試命令--0ECH。表1列出了IDE控制器的端口寄存器分配及功能,其中"主狀態(tài)寄存器"(1F7H)的各位定義如表2。

表1IDE端口寄存器地址及功能表2

"硬盤控制寄存器"(3F6H)各位定義如表3。

表3

輸出IDE控制命令可采用下列步驟:

(1)向端口3F6H寫入控制字節(jié),建立相應(yīng)的硬盤控制方式;

(2)檢驗控制器和驅(qū)動器的狀態(tài)(通過檢測端口1F7H的B7、B6兩位),若控制器空閑且驅(qū)動器就緒,即可輸出命令;

(3)完整地輸出7B長的命令塊,依次寫入端口1F1H-1F7H,不論是否需要,端口1F1H-1F6H對應(yīng)的前6B參數(shù)必須輸出,端口1F7H輸出命令碼0ECH;

(4)檢測端口1F7H的B7、B3位,若控制器空閑且B3置1,表示操作結(jié)束,即可讀取結(jié)果;

(5)通過端口1F0H獨取100H字至緩沖區(qū);

(6)再次讀取端口1F7H,判斷B0位是否為0,若B0=0,表示命令成功,否則表示命令失敗,轉(zhuǎn)至錯誤處理;

(7)通過表4所示的偏移量,讀取我們所需的信息并轉(zhuǎn)換成可顯示的信息。

表4

源程序如下。

.MODELSMALL

.286

.DATA

copydb''''IDEharddriveidentifyprogram1.0'''',0dh,0ah

db''''Copyright(c)1995byLiChunsheng'''',0dh,0ah

db''''Allrightsreserved.''''

db0dh,0ah,0ah,''''ModelNumber......''''

iofmdw14hdup(2020h)

db0dh,0ah,''''FirmwareRevision....''''

dw4dup(2020h)

db0dh,0ah,''''Serialnumber......''''

dw0ahdup(2020h)

db0ah

db0dh,0ah,''''Cylinders......''''

nofcdb5dup(20h)

db0dh,0ah,''''Heads......''''

db5dup(20h)

db0dh,0ah,''''Sectorspertrack...''''

db5dup(20h)

db0dh,0ah,''''Bytespertrack....''''

db5dup(20h)

db0dh,0ah,''''Bytespersector....''''

db5dup(20h)

db0dh,0ah,''''Buffersize(KB).....''''

db5dup(20h)

db0dh,0ah,''''ECCbytes......''''

db5dup(20h)

db0dh,0ah,''''Drivecapacity......''''

db5dup(20h)

db''''MB'''',24h

addrdb2,6,12,8,10,42,44

addr1dw36h,14h,2eh,04h,14h,0ah

cmddb0,0,0,0,0,0,0ech

hdinfodw100hdup(?)

t-o-msgdb''''Timeoutofrange!!!'''',0dh,0ah,24h

errmsgdb''''Error!!!'''',0dh,0ah,24h

.CODE

dec160PROC

pushdi

pushdx

pushcx

pushax

moval,20h

std

cmpdx,9999

jadloop

stosb

cmpdx,999

jadloop

stosb

cmpdx,99

jadloop

stosb

cmpdx,9

jadloop

stosb

dloop:movax,dx

movdx,0

movcx,10

divcx

xchgax,dx

addal,30h

stosb

cmpdx,0

jnzdloop

popax

popcx

popdx

popdi

cld

ret

dec160endp

mainPROC

movax,@DATA

movds,ax

moves,ax

mloop1:

movcx,0

movdx,1f7h

mloop2:inal,dx

andal,11000000b

cmpal,01000000b

jzd-rdy

loopmloop2

jmptime-out

d-rdy:moval,0

movdx,3f6h

outdx,al

movsi,offsetcmd

moval,byteptr

andal,1

movcl,4

shlal,cl

oral,0a0h

movbyteptr,al

movdx,1f1h

movcx,7

mloop3:

lodsb

outdx,al

incdx

loopmloop3

decdx

xorcx,cx

mloop4:

inal,dx

andal,10001000b

cmpal,00001000b

jzreaddata

loopmloop4

jmptime-out

readdata:

cli

cld

movdx,1f0h

movdi,offsethdinfo

movcx,100h

repzinsw

sti

movdx,1f7h

inal,dx

andal,71h

xoral,50h

jnzerrend

movsi,offsetaddr

movdi,offsetnofc

adddi,4

movbh,0

movcx,7

mloop6:

movbl,byteptr

movdx,wordptr

calldec160

incsi

adddi,28

loopmloop6

movax,1

movsi,offsetaddr

movcx,3

mloop7:

movbl,byteptr

mulwordptr

incsi

loopmloop7

movbx,2048

divbx

movdx,ax

calldec160

movbx,offsethdinfo

movsi,offsetaddr1

movdi,offsetiofm

movcx,3

mloop8:

pushcx

pushbx

addbx,

movcx,

addsi,4

mloop9:movax,wordptr

xchgah,a1

stosb

moval,ah

stosb

addbx,2

loopmloop9

popbx

popcx

adddi,23

loopmloop8

movdx,offsetcopy

jmpendproc

time-out:

movdx,offsett-o-msg

jmpendproc

errend:

movdx,offseterrmsg

endproc:

movah,09h

int21h

movah,4ch

int21h

mainendp

endmainHY6YVASD1Q