0

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

void printString(char * message[]){
 int i;
 for(i = 0; message[i] != '\0'; 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");

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

4

2 回答 2

1

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

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

于 2014-02-28T04:55:46.553 回答
0

您的功能有几处问题

首先,你的print函数需要一个指向一个字符的指针,看起来你想要这个字符本身。

其次,如果您printString调用类似.pointer to pointer to charprintStringprintString("Hello World");

你的编译器应该警告你这些。

你的代码应该是这样的

void printString(char * message){
  // ...
}

void print(char character){
  // ...
  vidmem[offset+1] = character;
  // ...  
}
于 2014-01-12T11:14:29.740 回答