首页 百科知识 函数图形显示系统设计

函数图形显示系统设计

时间:2022-10-16 百科知识 版权反馈
【摘要】:在使用int86函数进行BIOS接口的系统调用时,有的中断调用设有若干选择项,这些选择项可以根据调用时AH寄存器中的值来进行访问。将设置图形工作模式的0号功能送入ah寄存器(第7行),将表示图形工作方式的mode值送入a1寄存器(第6行),调用int86函数,产生10H号中断服务,结果是将显示器设置为mode表示的工作方式。

10.2.2 DOS系统调用函数

在用于DOS系统调用的函数中,仅介绍最常用的intdos和int86函数。

1.intdos函数

函数原型:

int intdos(union REGS *in_regs,union REGS *out_regs)

函数intdos用于访问in_regs指向的联合变量中,由系统调用号所指定的DOS系统调用。它执行一次INT 21H中断指令,并将结果放入out_regs指向的联合中。放入AX寄存器中的返回值为DOS的返回信息。返回时,如果进位标志被置位,说明出现错误,类型REGS是在dos.h中定义的。

例10-5 使用0x2C系统调用直接从系统时钟中读取时间。

img613

运行结果:

time is 18:4:27

程序第7行将系统调用号0x2c赋予联合REGS变量的ah寄存器中,第8行执行系统调用,产生中断服务,返回的时、分、秒放入ch、cl和dh字节寄存器中。

2.int86函数

函数原型:

int int86(int int_num,union REGS *in_regs,union REGS *out_regs)

函数int86用来执行由int_num指定的软件中断。首先将指针in_regs指向的联合变量中的内容拷贝到处理器的寄存器中,随即产生对应的中断,指针out_regs指向的联合变量将保存中断调用后的返回值,返回值放在AX寄存器中。

在使用int86函数进行BIOS接口的系统调用时,有的中断调用设有若干选择项,这些选择项可以根据调用时AH寄存器中的值来进行访问。

在ROM_BIOS中为显示器适配器提供显示服务的程序是VIDEO_I/O,在CGA情况下,它由16个功能模块组成,编号为00H~0FH。调用方式为:将功能编号送入AH寄存器,通过软中断10H(十进制16号中断),便可对相应功能模块进行调用,实现显示功能。

例如,要设置显示器的工作模式和在显示器上写点或读点,可调用0号功能和12号功能或13号功能。其功能为:

img614

AH=13 读点,DX=行数 CX=列数 AL=返回所读的点

使用BIOS中的基本图形功能进行图形编程,可以大大简化程序设计过程,提高设计效率。凡BIOS中能实现的功能,可直接调用,用不着自己重新编写。

将显示器设置为指定的图形工作方式的程序段:

img615

将设置图形工作模式的0号功能送入ah寄存器(第7行),将表示图形工作方式的mode值送入a1寄存器(第6行),调用int86函数,产生10H号中断服务,结果是将显示器设置为mode表示的工作方式。当mode为6时,设置显示器为640×200黑白图形工作方式。

必须说明,在增强型图形适配器EGA的情况下,适配器的工作范围比CGA已扩展很多,因此,适配器的mode取值范围为0~16(8~11未用)。

例10-6 使用命令行参数将上面程序段编写成一个设置显示器工作方式的完整程序。

参考程序为:

img616

如果这个源程序名为setmode.c,经编译、链接生成的可执行程序为setmode.exe,那么,运行方式为:

  C:>setmode 6

将显示器设置为分辨率为640×200黑白图形方式。

  C:>setmode l4

在EGA显示适配器中,将显示器设置为分辨率为640×200,具有16种颜色的图形方式。

当结束图形方式,需要返回到文本方式时,可以使用:

  C:>setmode 3

在图形程序设计中,任何图形都可以当做是由点和线段组成的,但最终可认为是由点组成的。因此,点是图形中最基本的图元。有了点就可以构成线。有了点和线,使用一定的算法,就可以构成其他复杂的图形。

使用12号功能,编写了一个写点函数point。形参x和y表示点的x和y坐标,clr为选取的颜色。在工作方式为6的情况下,clr为l是亮点,为0是暗点,x和y的屏幕坐标取值为:

  0≤x≤639,0≤y≤199;

程序使用写点函数point,编写了一个画圆函数circle。形参中x、y、clr和写点函数相同。x和y表示圆心坐标,r表示半径长度,a=1/r为圆上相邻两个点间的角增量,用点画圆算法是,每增加一个角增量,求出圆上对应点的坐标(x,y),然后用point函数画出该点。圆由(2*pi*r)个点组成。f为校正因子(小于1)。由于显示器屏幕的网格为非正方形矩形,相邻两个像素间的距离,在y方向大于x方向,所以使求出的y坐标要乘以校正因子,以减小圆的失真度。如不校正,显示出的圆为一个椭圆。通常f取0.5左右,可以根据不同的显示器调整。

程序main开始执行,调用setmode函数,将显示器设置为工作模式后,调用circle函数,在指定的圆心位置,按指定的半径长度和颜色在显示器上画出一个圆。程序从键盘输入数据,例如,输入数据流为:

input x y r clr f:

  319 99 50 1 0.45

程序以显示屏中心为圆心,以50个单位长度(像素距离)为半径,在屏上画一个圆。校正因子取0.45。

例10-7 从键盘输入数据,在显示器上画一个圆。

img617

img618

img619

Turbo C中有关时间、日期、BIOS接口和系统调用的函数十分丰富,这为系统软件及应用软件的开发提供了有利的支持。其他函数,这里不再一一介绍,使用时请参阅有关手册。

需要说明的是,尽管计算机软硬件资源已经有了很大的发展,但上述例子的设计思想、方法和实现技术对提高和培养学生的软件开发能力是大有益处的。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈