繁体   English   中英

如何使用BIOS中断打印字符串

[英]How to print strings using bios interrupts

我正在研究使用某些汇编函数和16位C编译器创建操作系统的尝试。 我的任务是使用0x10中断在屏幕上打印字符串。 由于可以在汇编文件中调用中断,因此向我提供了一个汇编文件,其中包含一个名为interrupt的函数,该函数带有五个参数:中断号以及在AXBXCXDX传递的中断参数。 例如,要使用提供的功能打印“ Q”,我需要这样写:

char al = 'Q'
char ah = 0xE
int ax = ah*256+al;
interrupt(0x10,ax,0,0,0);

或者,简单地:

interrupt(0x10,0xE*256+'Q',0,0,0);

在名为kernel.cC程序中

我的任务是在C语言中编写一个函数printString(char *chars) ,该函数接受一个字符串,并使用讨论的汇编函数将其打印在屏幕上。

我这样做是这样的:

void printString(char * chars){
int i = 0; 
int l = length(chars);
 for(; i < l; i++){
   interrupt(0x10,0xE*256+chars[i],0,0,0);
 }
}

但它会多次打印字符串,而不是一次打印。 当我尝试打印“ Hello World”时,它被打印了11次,因为它包含11个字符,其他字符串也是如此。

我认为您需要寻找一个空字符来终止读取。 我注意到汇编文件的字符缓冲区也做了一些奇怪的事情。 当我直接从main()调用中断函数时,我什至打印了多个字符。

添加以下行:while(1); 防止main()返回。 引导加载程序执行main()的多个实例是导致重复输出的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM