自测光驱速度的小程序 北京 黄 震 1996-11-15 基本原理 光驱的性能可通过转速、寻址时间、差错率等来衡量,但最重要指标是平均传输速率。我们可以这样测试平均传输速率:记录一定时间内(本程序取5秒)光驱读取的光盘扇区数,将之乘以一个扇区的大小(2KB),然后除以所用时间便得到光驱的平均传输速率。倍速,四速,六速光驱的标准传输速率分别为300KB/S,600KB/S,900KB/S。 程序中时间的读取可使用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 (北京 黄 震)