我是os Deving的首发,并设法创建一个bootloader然后一个kernel.I cam成功跳转到保护模式并将控件转移到kernel.I能够写单个字符但打印字符串不起作用。这是我的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");
请帮助我,我是os deving的首发
答案 0 :(得分:1)
我建议将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论坛的好地方。
答案 1 :(得分:0)
你的功能有几个问题
首先,你的print
函数会获取一个指向你想要角色本身的角色的指针。
其次,如果你正在调用像printString
这样的pointer to pointer to char
函数,那么printString
函数实际上正在使用printString("Hello World");
这不是你想要的。
你的编译器应该警告你这些。
您的代码看起来应该是这样的
void printString(char * message){
// ...
}
void print(char character){
// ...
vidmem[offset+1] = character;
// ...
}