[英]How to print strings using bios interrupts
我正在研究使用某些汇编函数和16位C编译器创建操作系统的尝试。 我的任务是使用0x10中断在屏幕上打印字符串。 由于可以在汇编文件中调用中断,因此向我提供了一个汇编文件,其中包含一个名为interrupt的函数,该函数带有五个参数:中断号以及在AX
, BX
, CX
和DX
传递的中断参数。 例如,要使用提供的功能打印“ 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.c
的C程序中
我的任务是在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.