当前位置: 查字典论文网 >> 也谈硬盘参数测试t2gg

也谈硬盘参数测试t2gg

格式:DOC 上传日期:2023-03-28 01:50:48
也谈硬盘参数测试t2gg
时间:2023-03-28 01:50:48     小编:

也谈硬盘参数测试t2gg 也谈硬盘参数测试t2gg 也谈硬盘参数测试t2gg 《计算机世界月刊》1995年第八期上刊登了李宇先生的一篇文章,介绍了测试PC机软硬盘参数的方法。文中介绍的读取硬盘参数的方法是通过读取并分析硬盘主引导记录Masterboot record来取得硬盘信息的。此方法适用范围比较广。事实上由于现在很多PC都使用IDE型的硬盘,因此,我们也可以通过直接编程IDE控制器的方法获得硬盘参数。下面简单介绍一下这个方法,并给出一个汇编程序供大家参考。表1 IDE端口寄存器地址及功能表2

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

表3

输出IDE控制命令可采用下列步骤:

(1)向端口3F6H写入控制字节,建立相应的硬盘控制方式;

(2)检验控制器和驱动器的状态(通过检测端口1F7H的B

7、B6两位),若控制器空闲且驱动器就绪,即可输出命令;

(3)完整地输出7B长的命令块,依次写入端口1F1H-1F7H,不论是否需要,端口1F1H-1F6H对应的前6B参数必须输出,端口1F7H输出命令码0ECH;

(4)检测端口1F7H的B

7、B3位,若控制器空闲且B3置1,表示操作结束,即可读取结果;

(5)通过端口1F0H独取100H字至缓冲区;

(6)再次读取端口1F7H,判断B0位是否为0,若B0=0,表示命令成功,否则表示命令失败,转至错误处理;

(7)通过表4所示的偏移量,读取我们所需的信息并转换成可显示的信息。

表4

源程序如下。

.MODEL SMALL

.286

.DATA

copydb 'IDE hard drive identify program 1.0',0dh,0ah

db 'Copyright (c) 1995 by LiChunsheng',0dh,0ah

db 'All rights reserved.'

db 0dh,0ah,0ah,'Model Number......'db 0dh,0ah,'Firmware Revision....'

dw 4 dup(2020h)

db 0dh,0ah,'Serial number......'

dw 0ah dup(2020h)

db 0ah

db 0dh,0ah,'Cylinders......'

nofcdb 5 dup(20h)

db 0dh,0ah,'Heads......'

db 5 dup(20h)

db 0dh,0ah,'Sectors per track...'

db 5 dup(20h)

db 0dh,0ah,'Bytes per track....'

db 5 dup(20h)

db 0dh,0ah,'Bytes per sector....'

db 5 dup(20h)

db 0dh,0ah,'Buffer size(KB).....'

db 5 dup(20h)

db 0dh,0ah,'ECC bytes......'

db 5 dup(20h)

db 0dh,0ah,'Drive capacity......'

db 5 dup(20h)

db 'MB',24haddr1dw 36h,14h,2eh,04h,14h,0ah

cmddb 0,0,0,0,0,0,0ech

hdinfodw 100h dup(?)

t-o-msg db 'Time out of range!!!',0dh,0ah,24h

errmsg db 'Error!!!',0dh,0ah,24h

.CODE

dec160PROC

push di

push dx

push cx

push ax

mov al,20h

std

cmp dx,9999

ja dloop

stosb

cmp dx,999

ja dloop

stosb

cmp dx,99

ja dloop

stosb

cmp dx,9

ja dloop

stosb

dloop:mov ax,dx

mov dx,0

mov cx,10

span cx

xchg ax,dx

add al,30h

stosb

cmp dx,0

jnz dloop

pop ax

pop cx

pop dx

pop di

cld

ret

dec160endp

mainPROC

mov ax,@DATA

mov ds,ax

mov es,ax

mloop1:

mov cx,0

mov dx,1f7h

mloop2:in al,dx

and al,11000000b

cmp al,01000000b

jz d-rdy

loop mloop2

jmp time-out

d-rdy:mov al,0

mov dx,3f6h

out dx,al

mov si,offset cmd

mov al,byte ptr

and al,1

mov cl,4

shl al,cl

or al,0a0h

mov byte ptr,al

mov dx,1f1h

mov cx,7

mloop3:

lodsb

out dx,al

inc dx

loop mloop3

dec dx

xor cx,cx

mloop4:

in al,dx

and al,10001000b

cmp al,00001000b

jz readdata

loop mloop4

jmp time-out

readdata:

cli

cld

mov dx,1f0h

mov di,offset hdinfo

mov cx,100h

repz insw

sti

mov dx,1f7h

in al,dx

and al,71h

xor al,50h

jnz errend

mov si,offset addr

mov di,offset nofc

add di,4

mov bh,0

mov cx,7

mloop6:

mov bl,byte ptr

mov dx,word ptr

call dec160

inc si

add di,28

loop mloop6

mov ax,1

mov si,offset addr

mov cx,3

mloop7:

mov bl,byte ptr

mul word ptr

inc si

loop mloop7

mov bx,2048

span bx

mov dx,ax

call dec160

mov bx,offset hdinfo

mov si,offset addr1

mov di,offset iofm

mov cx,3

mloop8:

push cx

push bx

add bx,

mov cx,

add si,4

mloop9:mov ax,word ptr

xchg ah,a1

stosb

mov al,ah

stosb

add bx,2

loop mloop9

pop bx

pop cx

add di,23

loop mloop8

mov dx,offset copy

jmp endproc

time-out:

mov dx,offset t-o-msg

jmp endproc

errend:

mov dx,offset errmsg

endproc:

mov ah,09h

int 21h

mov ah,4ch

int 21h

mainendp

end main

全文阅读已结束,如果需要下载本文请点击

下载此文档

相关推荐 更多