2025年3月28日 星期五 甲辰(龙)年 月廿七 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

怎样在C语言程序中调用BIOS函数?

时间:12-30来源:作者:点击数:79

与前文中的例子一样,在使用象一setvideomode()这样的函数时,将频繁地调用BIOS函数。此外,就连前文例子中使用过的DOS函数(INT 21H,AH=01H和INT 21H,AH=09H)最终也要通过调用BIOS来完成它们的任务。在这种情况下,DOS只是简单地把你的DOS请求传给相应的低级BIOS函数。下面的例子很好地说明了这一事实,该例与前文中的例子完成相同的任务,只不过它完全跳过了DOS,直接调用了BIOS。

  • # include <stdlib.h>
  • # include <dos.h>
  • char GetAKey(void) ;
  • void OutputString( char * );
  • main(int argc, char * * argv)
  • {
  • char str[128];
  • union REGS regs;
  • int ch;
  • /* copy argument string; if none, use "Hello World" */
  • strcpy(str, (argv[1] == NULL ? "Hello World" : argv[1]));
  • while ((ch = GetAKey()) !=27){
  • OutputString(str);
  • }
  • }
  • char GetAKey()
  • {
  • union REGS regs;
  • regs. h. ah = 0; /* get character */
  • int86(0xl6, &xegs, &regs);
  • return( (char)regs. h. al) ;
  • }
  • void OutputString(char * string)
  • {
  • union REGS regs;
  • regs. h. ah = 0x0E; /* print character */
  • regs. h. bh = 0;
  • /* loop, printing all characters */
  • for(; * string !='\0'; string+ + ){
  • regs. h. al= * string;
  • int86(0xl0, &regs, &regs);
  • }
  • }

你可以发现,唯一的变化发生在GetAKey()和OutputString()自身之中。函数GetAKey()跳过了DOS,直接调用键盘BIOS来获得字符(注意,在本例这个调用中,键入的字符并不在屏幕上显示,这一点与前文中的例子不同);函数OutputString()跳过了DOS,直接调用了Video BIOS来打印字符串。注意本例效率不高的一面——打印字符串的C代码必须位于一个循环中,每次只能打印一个字符。尽管Vidoeo BIOS支持打印字符串的函数,但C无法存取创建对该函数的调用所需的所有寄存器,因此不得不一次打印一个字符。不管怎样。运行该程序可以得到与前文例子相同的输出结果。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门