|
中断调用,读写内存、端口应用讲解(3) |
|
| 来自:http://qbdos.51.net/cgi-bin/bbs | 作者: |
| 我写了模板 这是一个INT21中断调用的BAS,大家可以很方便的写有关中断调用的程序了 启动QB的时候 别忘了用QB/L 比如资料上说,INT21号中断显示功能调用,入口AH=9 DS:DX=ASC字符串+$,可以在程序里这样用 buff$="Test Show ..." buff$=buff$+"$" '以$结尾 BuffSeg=varseg(buff$) '得到字符的段址 Buffoff=sadd(buff$) '得到字符串的偏移地址 ah=&H9 ds=buffseg dx=buffoff Xint &h21 这样就可以显示了 varseg、sadd,是返回字符串段址偏移地址的 语句 下面就 是整个源程序! 代码: TYPE RegTypeX ax AS INTEGER bx AS INTEGER cx AS INTEGER dx AS INTEGER bp AS INTEGER si AS INTEGER di AS INTEGER flags AS INTEGER ds AS INTEGER es AS INTEGER END TYPE DIM SHARED ax, bx, cx, dx, si, di, flags, ds, es, AH, AL, BH, BL, CH, CL, DH, dl SUB Xint (intnum%) DIM Reg AS RegTypeX IF ax = 0 THEN ax = ah * &H100 + al IF bx = 0 THEN bx = bh * &H100 + bl IF cx = 0 THEN cx = ch * &H100 + cl IF dx = 0 THEN dx = dh * &H100 + dl Reg.ax = ax Reg.bx = bx Reg.cx = cx Reg.dx = dx Reg.si = si Reg.di = di Reg.ds = ds Reg.es = es CALL INTERRUPTX(IntNum%, Reg, Reg) ax = Reg.ax bx = Reg.bx cx = Reg.cx dx = Reg.dx si = Reg.si di = Reg.di ds = Reg.ds es = Reg.es ah = ax AND &HFF00: ah = ah / &H100 al = ax AND &HFF bh = bx AND &HFF00: bh = bh / &H100 bl = bx AND &HFF ch = cx AND &HFF00: ch = ch / &H100 cl = cx AND &HFF dh = dx AND &HFF00: dh = dh / &H100 dl = dx AND &HFF END SUB 4 写内存语句的使用举例 我们先来看一个小例子 PRINT “*” 我想这个都懂吧! 可是如果不用PRINT语句能显示*么,当然能! 我们先学习一下计算机的有关知识! 显示器的显示属性定义 显示缓冲区地址 B800:0000—— 2000H字 彩色显示器文本模式的显示缓冲区。每个字中的低字节是字符的ASCII码,高字节是其属性( 背景属性 前景属性 ) 我们就以彩色显示器文本模式的显示缓冲区为例子! 目的:往显示缓冲区写东西,看看屏幕上的结果 思路:先定义段到B800,然后写内存 如果我们要显示背景为兰色,前景为灰色的*,如下: 用QB提供的语句: COLOR 7,1 PRINT “*” 自己调用写内存的语句: DEF SEG=&HB800 POKE 0,42 '(42是字符*的ASC码) POKE 1,&H17 '写字符的属性 DEF SEG '恢复段 |
|