Microsoft Quick BASIC中断的调用

来自:basicfan.yeah.net  
 
  在Quick BASIC 中虽然有很多语句和函数,但是对于系统的、较低级的操作就不是那么容易的就可以实现的。Quick BASIC提供了中断调用的接口,来实现中断的调用。QB系统提供的快速库QB.QLB和QB.LIB就是为用户实现中断调用的。其中INTERRUPT 和 INTERRUPTX 是它们五个系统子程序中的两个,它们两个中断调用更方便,执行中断执行中断前后CPU的寄存器组用记录类型来处理。
在INTERRUPT中的定义:
TYPE RegType
ax AS INTEGER
bx AS INTEGER
cx AS INTEGER
dx AS INTEGER
dp AS INTEGER
si AS INTEGER
di AS INTEGER
flags AS INTEGER
END TYPE
在INTERRUPTX中的定义:
TYPE RegType
ax AS INTEGER
bx AS INTEGER
cx AS INTEGER
dx AS INTEGER
dp AS INTEGER
si AS INTEGER
di AS INTEGER
flags AS INTEGER
ds AS INTEGER
es AS INTEGER
END TYPE
它们的定义以及子程序的声明都写在系统头文件:QB.BI中。所以要在程序中调用中断必须要做到:(1)启动QB时,要加上命令参数/L,才能将QB.QLB系统快速库装入集成环境;(2)在程序开始处写入调用包含文件的语句:'$INCLUDE:'QB.BI'。
例如编写一个显示计算机当前基本内存和扩展内存的程序。
在操作系统的BIOS功能调用有两个可以利用:INT 12H确定基本内存的数量,入口参数无,出口参数是ax中返回当前内存的基本内存,单位是KB;INT 15H 确定扩展内存的数量,入口参数是AH=88H,即调用此中断的88H号功能,出口参数是ax中返回当前内存的1M地址以后的连续扩展内存数量,单位是KB。
启动QB是用:QB /L命令加载QB.QLB快速库
源代码如下:
'Filename:Mem.Bas
'本程序在QB4.5中调试通过
'$INCLUDE: 'E:\QB\QB.BI' '包含头文件
DIM InReg AS RegType, OutReg AS RegType '定义寄存器变量
INTERRUPT &H12, InReg, OutReg '调用12H中断
PRINT "基本内存:"; OutReg.ax; "KB" '将结果OutReg.ax输出
InReg.ax = &H880
INTERRUPT &H15, InReg, outreg '调用15H中断
PRINT "扩展内存:"; OutReg.ax; "KB" '将结果OutReg.ax输出
END
下面给出一个调用中断检测驱动器类型的QB程序
'$INCLUDE: 'qb.bi'
DIM InReg AS RegType, OutReg AS RegType
DIM dt$(3)
dt$(1) = "Floppy Disk_720(3.5)"
dt$(2) = "Floppy Disk_1.44(3.5)"
dt$(3) = "Hard Disk"
CLS
InReg.ax = &H1500: InReg.dx = &H0
INTERRUPT &H13, InReg, OutReg
PRINT "Floppy A:="; dt$(OutReg.ax \ 256)
InReg.ax = &H1500: InReg.dx = &H1
INTERRUPT &H13, InReg, OutReg
PRINT "Floppy B:"; dt$(OutReg.ax / 256)
intreg.ax = &H1500: InReg.dx = &H80
INTERRUPT &H13, InReg, OutReg
PRINT "Hard Disk1:"; dt$(OutReg.ax \ 256)
END
这样就实现了QB中断的调用,如果你在阅读过程中有不明白的地方,请参考相关的DOS中断调用手册。如果你是一个VB爱好者,想做一些低级的操作,而又不会用调用API的话,那么你也可以用QB调用中断,编写出低层操作的程序,然后编译成EXE文件,然后在VB中调用这个EXE文件就可以了。