|
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文件就可以了。 |
|