Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:880回复:1

关于Int 13h

楼主#
更多 发布于:2001-12-24 12:33
远在DOS年代,执行磁盘的读写操作归根结底都是通过如下的方式
mov ah,2(read)/3(write)
mov al,要写的扇区数
mov cx,起始扇区
mov dx,80(硬盘)/0(floppy)
int 13
当硬盘的空间一度增大到超过8.4G时,传统的BIOS int 13h已经不能访问到大于8.4的空间了。于是乎 Extention BIOS应运而出,新的扩展int 13h不再通过寄存器传参数而代之以一个参数包,包的大小可以大至10h字节不等,并以DS:SI的值指向这个包。于是就成了
mov ds,seg Package
mov si,offset package
mov ax,4200h(read)/4300h(write)
int 13h
这样就解决了8.4G以上的硬盘不能识别的问题。但到此为至,所有的对硬盘的操作还是16位的。
到了windows win32时代,对硬盘的读写也变成了32位的,这样的传统的读/写盘中断int 13h又不能适应,于是又推出了win32环境下的32位的读/写盘方法。这就是为什么DOS下的关于拦截磁盘读写操作的TSR不能在win32 下工作的原因。当然你可以禁止(通过某些设置)这项功能而继续沿用老的16位磁盘操作。
以上是我的一点总结,有兴趣的朋友欢迎跟贴,并指出我可能错误的地方。另外本人对32位环境下读/写磁盘的物理根本原理还没完全弄明白,也望能得到各位朋友的指点,谢谢!!!
Tom_lyd
yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-10 10:02
正解
 
游客

返回顶部