自测光驱速度的小程序
程序中时间的读取可使用BIOS中断的1Ah中断,光盘读取可使用2FH中断,具体说明如下:
一、读时钟
AH=0
INT 21H
返回变量:CH:CL=小时:分
DH:DL=秒:1%秒
二、CD-ROM 安装检查
BX=0
AX=1500H
INT ZFH
返回变量:BX=CD-ROM个数
CX=CD-ROM盘号
三、绝对光盘读入
BX=缓冲区偏移量
CX=CD-ROM盘号
DX=一次所读扇区数
ES=缓冲区段地址
SI=起始扇区高位字
DI=起始扇区低位字
AX=1508H
INT 2FH
返回变量:ES:BX=缓冲区段地址:偏移量
AL=错误代码(第15位标志位为1)
本程序在Pentium-133,六倍速光驱上调试通过。
data segment
drate db'Average Speed Rate;'
drate1 db 6dup(20h),'kb/s',0dh,0ah,24h
msg db 0dh,0ah,'Running Test',0dh,0ah,24h
time dw 0
cd-num dw 0
cd-name dw 0
buf db 2000 dup(?)
data ends
;
code segment
main proc far
assume cs:code,ds:data,es:data
start;
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov es,ax
lea dx,msg
mov ah,9
int 21h
;
mov bx,0
mov ax,1500h
int 2fh
or bx,bx
jz exit
;
mov word ptr ds:[cd-num],bx
mov word ptr ds:[cd-name],cx
cd1;
mov ah,0
int 1ah
mov si,0
mov di,1
mov bx,dx
add bx,91
mov word ptr ds:[time],bx
account:
mov cx,ds:[cd-name]
mov bx,offset buf
mov dx,1
mov ax,1508h
int 2fh 绝对光盘读入
mov bx,ds:[time]
mov ah,0
int 1 ah 读时钟计数
inc di
cmp bx,dx
ja account 记录在5秒内光驱所读取的光盘扇区数,乘以2KB,除以5秒,得到平均传输速率
dec di
mov bx,0
mov dx,0
mov ax,di
mov cx,2
mul cx
mov cx,5
div cx
int 3
;account over
call change
lea dx,drate
mov ah,9
int 21h
dec word ptr ds:[cd-num]
cmp word ptr ds:[cd-num],0
jz exit
inc word ptr ds:[cd-name]
jmp cd1
exit:mov ah,4ch
int 21hx 结束程序
main endp
change proc near
lea bx,dratel
mov cx,6
push di
mov di,bx
push ax
mov al,20h
cld
vePNZ stosb
pop ax
mov bx,di
pop di
mov si,10
cc:mov dx,0
div si
add d1,30h
mov byte ptr[bx],d1
dec bx
or ax,ax
jnz cc
ret
change endp
;
code ends
end start (北京 黄 震)