如何在 c 的保护模式下打印字符串



我是os Devin的初学者,并设法制作一个引导加载程序,然后是一个内核。我成功跳转到保护模式并将控制权转移到内核。我能够写单个字符,但打印字符串不起作用。这是我的printString()函数。

void printString(char * message[]){
 int i;
 for(i = 0; message[i] != ''; i++)
 {
     print(message[i]);
 }
}

我的打印字符功能在这里

void print(char *character){
unsigned char *vidmem = (unsigned char *) VIDEO_ADDRESS;
int offset;   //Variable which hold the offset where we want to print our character
offset =  GetCursor(); //Setting our offset to current cursor position
  vidmem[offset+1] = character;
  vidmem[offset+2] = 0x0f;
SetCursor(offset+2);    
}

这是对函数的调用

printString("manoj");

请帮助我,我是操作系统开发的初学者

我建议将 X 和 Y 坐标作为(静态)全局进行跟踪,并将它们用于内存偏移量。此外,它不应该是offset+1offset+2,而是offsetoffset+1。这是对唐格斯在回答中所说的补充。

可以在 http://www.jamesmolloy.co.uk/tutorial_html/3.-The%20Screen.html 找到学习如何打印到屏幕上的好教程 - 他详细介绍了如何打印东西。这也是开始了解OSDev以及 http://forum.osdev.org/index.php 的OSDev论坛的好地方。

你的函数有几个问题

首先,您的print函数将指针指向一个字符,该字符看起来像您想要该字符本身。

其次,你的printString函数实际上是在取一个pointer to pointer to char,如果你像printString("Hello World");一样调用printString函数,这不是你想要的。

您的编译器应该已经警告过您这些。

你的代码应该看起来像这样

void printString(char * message){
  // ...
}
void print(char character){
  // ...
  vidmem[offset+1] = character;
  // ...  
}

相关内容

  • 没有找到相关文章

最新更新