我是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+1
和offset+2
,而是offset
和offset+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;
// ...
}