无码任你躁久久久久久久-激情亚洲一区国产精品-超碰97久久国产精品牛牛-久久se精品一区精品二区国产

首頁 > 文章中心 > 正文

硬盤參數(shù)測試

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

硬盤參數(shù)測試

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

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

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

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

表3

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

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

(2)檢驗(yàn)控制器和驅(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獨(dú)取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

主站蜘蛛池模板: 辽源市| 赞皇县| 乌拉特前旗| 大渡口区| 封丘县| 镶黄旗| 彰化市| 新泰市| 河东区| 崇信县| 阿鲁科尔沁旗| 麻江县| 吴忠市| 东明县| 潜山县| 山东省| 阳山县| 桐乡市| 邻水| 红原县| 横山县| 大田县| 嘉祥县| 阿拉善右旗| 徐州市| 铁力市| 大同县| 安溪县| 长子县| 罗山县| 福清市| 科技| 金华市| 肇源县| 清水县| 萝北县| 金乡县| 富宁县| 隆尧县| 精河县| 岐山县|