基本 BIOS Int 13H 调用是 BIOS 提供的磁盘基本输入输出中断调用, 它可以完成磁盘(包括硬盘和软盘)的复位, 读写, 校验, 定位, 诊断, 格式化等功能.
它使用的就是 CHS 寻址方式, 因此最大识能访问 8 GB 左右的硬盘
扩展 Int13H 接口的目的是为了扩展 BIOS 的功能, 使其支持多于1024柱面的硬盘, 以及可移动介质的琐定, 解锁及弹出等功能
DAP 是基于绝对扇区地址的, 因此利用 DAP, Int13H 可以轻松地逾越 1024 柱面的限制, 因为它根本就不需要 CHS 的概念.
我在win98、dos71下用qb45调试成功
'在qbasic中调用中断,1 必须加入L命令,比如QB/L 2. 必须引用qb.bi',如下
[ Last edited by qb45 on 2006-7-9 at 11:14 ]
它使用的就是 CHS 寻址方式, 因此最大识能访问 8 GB 左右的硬盘
扩展 Int13H 接口的目的是为了扩展 BIOS 的功能, 使其支持多于1024柱面的硬盘, 以及可移动介质的琐定, 解锁及弹出等功能
DAP 是基于绝对扇区地址的, 因此利用 DAP, Int13H 可以轻松地逾越 1024 柱面的限制, 因为它根本就不需要 CHS 的概念.
我在win98、dos71下用qb45调试成功
'在qbasic中调用中断,1 必须加入L命令,比如QB/L 2. 必须引用qb.bi',如下
'$INCLUDE: 'qb.bi'
DIM SHARED ax, bx, cx, dx, bp, si, di, ds, flags, es '// 全局共享
BUFFdat$ = STRING$(512, 0) '// 建立一个读写扇区缓冲区(512字节)
d1% = varSEG(buffdat$) '// 获得缓冲区的段地址
d2% = SADD(buffdat$) '// 获得缓冲区的偏移地址
'// 把段地址,偏移地址,读写命令等数据按要求写入数据包(DAP)
dat1$ = CHR$(&H10) + CHR$(0) + MKI$(1) + MKI$(d2%) + MKI$(d1%) + MKL$(0) + MKL$(0)
ds = varSEG(dat1$) '// DS=数据包(DAP)的段地址
si = SADD(dat1$) '// SI=数据包(DAP)的偏移地址
ax = &H4200 '// AX=调用扩展INT13的读扇区命令
dx = &H80 '// DX=第一个硬盘
xint &H13 '// 调用INT13中断
'//------把读出的MBR扇区内容保存到D盘的TESTHD.DAT文件中------
OPEN "d:\testhd.dat" FOR BINARY AS #1
PUT 1,1,BUFFDAT$
CLOSE #1
'//----------------------------------------------------------------------
END
'//中断调用的子程序
SUB xint (num%)
DIM inregs AS RegTypeX
DIM outregs AS RegTypeX
inregs.ax = ax
inregs.bx = bx
inregs.cx = cx
inregs.dx = dx
inregs.si = si
inregs.di = di
inregs.ds = ds
inregs.es = es
CALL INTERRUPTX(num%, inregs, outregs)
ax = outregs.ax
bx = outregs.bx
cx = outregs.cx
dx = outregs.dx
si = outregs.si
di = outregs.di
ds = outregs.ds
es = outregs.es
END SUB
[ Last edited by qb45 on 2006-7-9 at 11:14 ]


