基本 BIOS Int 13H 调用是 BIOS 提供的磁盘基本输入输出中断调用, 它可以完成磁盘(包括硬盘和软盘)的复位, 读写, 校验, 定位, 诊断, 格式化等功能.
它使用的就是 CHS 寻址方式, 因此最大识能访问 8 GB 左右的硬盘
扩展 Int13H 接口的目的是为了扩展 BIOS 的功能, 使其支持多于1024柱面的硬盘, 以及可移动介质的琐定, 解锁及弹出等功能
DAP 是基于绝对扇区地址的, 因此利用 DAP, Int13H 可以轻松地逾越 1024 柱面的限制, 因为它根本就不需要 CHS 的概念.
操作系统 win98、dos71
使用编程软件 qbasic 版本号4.5
结果: 调试成功
在qbasic中调用中断编译执行请用qb/l命令!
'$INCLUDE: 'qb.bi'
DIM SHARED ax, bx, cx, dx, bp, si, di, ds, flags, es
BUFFdat$ = STRING$(512, 0)'设置读扇区后存放数据的缓冲区
d1% = varSEG(buffdat$)'获得缓冲区的段地址
d2% = SADD(buffdat$)'获得缓冲区的偏移地址
dat1$ = CHR$(&H10) + CHR$(0) + MKI$(1) + MKI$(d2%) + MKI$(d1%) + MKL$(0) + MKL$(0)'按要求设置数据包
ds = varSEG(dat1$)'获得数据包的段地址
si = SADD(dat1$)'获得数据包的偏移地址
ax = &H4200'扩展读扇区命令
dx = &H80'读第一个硬盘
xint &H13'调用中断
OPEN "d:\testhd.dat" FOR BINARY AS #1'保存扇区数据的文件名
PUT 1,1,BUFFDAT$'写入文件
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