微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题自测光驱速度的小程序
栏目外设类维护与维修
作者北京 黄震
发布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  (北京  黄 震)