ITEEDU

关于显示分页的情况在本章的前半部分中已有所述,很多项功能调用都要求在BH寄存器中放入显示页号,而且只有"当前"的显示页才会真正出现在屏幕上。这样一来如果程序在其他显示中写入了字符应该如何处理才能在屏幕上看到呢?这就需要使用10H中断的05H功能来设置当前显示页:

功能号:05H
用 途:设定当前显示页
参 数:AL=所选的显示页号
调 用:INT 10H
返 回:无

下面的程序演示了这个功能的应用,我们先在四个显示页中写入不同的信息,然后根据按下的数字键轮换设置四个显示页为当前显示页,这样就可以在屏幕上看到不同的显示内容。

        data  segment
              assume    ds:data
     pagemsg  db        'Zero PAGE',0	;定义放入不同显示页中信息
              db        'First PAGE',0
              db        'Second PAGE',0
              db        'Third PAGE',0
        data  ends
			
        code  segment
              assume    cs:code
        main  proc      far
              mov       ax,data	;初始化DS寄存器
              mov       ds,ax
			
              mov       si,offset pagemsg	;SI寄存器指向PAGEMSG
              mov       bl,1	;显示字符为蓝色
              mov       bh,0	;显示页号送入BH寄存器
      start:
              mov       dx,0	;设置光标的位置为(0,0)
    dispmsg:
              mov       ah,2	;利用10H中断的02功能
              int       10h	;设置光标位置
			
              lodsb     ;从字符串中取得一个字符
              or        al,al	;已经到字符串结尾了吗?
              jz        next_page	;已到结尾,转NEXT_PAGE
              mov       ah,9	;利用10H中断的09功能
              mov       cx,1	;在BH指出的显示页内输出一个字符
              int       10h
			
              inc       dl	;光标所在列号加1
              jmp       dispmsg	;显示下一个字符
  next_page:
              inc       bl	;改变字符属性
              inc       bh	;选择下一个显示页
              cmp       bh,4	;处理所有的显示页了吗?
              jb        start	;未处理所有的显示页,转START继续
      swich:
              mov       ah,0	;等待键盘输入
              int       16h
              sub       al,30h	;输入的字符ASCII码减30H
              jb        exit	;若ASCII码小于30H(不是数字键)结束
              cmp       al,03h	;若ASCII码大于33H(大于数字4)
              ja        exit	;转EXIT退出
              mov       ah,5	;利用10H中断的05功能
              int       10h	;将当前显示页设置为指定页
              jmp       swich	;转SWICH继续等待键盘输入
       exit:
              mov       ah,4ch	;结束程序
              int       21h
        main  endp
        code  ends
              end       main

这四个显示页有什么实际应用价值吗?可以这样设想,让程序在非当前的显示页中写入信息,而后将被写入的显示页切换为当前显示页,这样可以使整屏的信息在一瞬时"弹出(Popup)"于用户眼前,使得程序具有一种快速感。当然,有时我们可能感觉直接在当前显示页中写一整屏信息并不慢,这是因为在字符模式下我们要处理的数据量比较小造成的。如果显示图形,那么使用多个显示页轮换显示就会有快速的效果。