gpt4 book ai didi

C 内核-打印字符串不起作用

转载 作者:行者123 更新时间:2023-11-30 17:13:56 28 4
gpt4 key购买 nike

我正在从头开始制作一个 C 内核,我实际上只是从网站上复制了这段代码,因为我的代码无法工作,所以我很困惑。

void kmain(void)
{
const char *str = "my first kernel";
char *vidptr = (char*)0xb8000; //video mem begins here.
unsigned int i = 0;
unsigned int j = 0;

/* this loops clears the screen
* there are 25 lines each of 80 columns; each element takes 2 bytes */
while(j < 80 * 25 * 2) {
/* blank character */
vidptr[j] = ' ';
/* attribute-byte - light grey on black screen */
vidptr[j+1] = 0x07;
j = j + 2;
}

j = 0;

/* this loop writes the string to video memory */
while(str[j] != '\0') {
/* the character's ascii */
vidptr[i] = str[j];
/* attribute-byte: give character black bg and light grey fg */
vidptr[i+1] = 0x07;
++j;
i = i + 2;
}
return;
}

当我运行内核时,它会在屏幕上打印一个 S,而不会打印任何其他内容。我知道我的内核正在启动,因为如果我这样做

vidptr[0] = 'h';
vidptr[2] = 'e';
vidptr[4] = 'l';
vidptr[6] = 'l';
vidptr[8] = 'o';

它按预期工作。发生了什么事?

编辑:这可能是我的代码加载内核的原因(可能没有设置某些寄存器),所以我只会研究 grub 和其他东西。

最佳答案

尝试将 volatile 关键字与变量一起使用

引用页面:http://wiki.osdev.org/Printing_To_Screen

// note this example will always write to the top
// line of the screen
void write_string( int colour, const char *string )
{
volatile char *video = (volatile char*)0xB8000;
while( *string != 0 )
{
*video++ = *string++;
*video++ = colour;
}
}

关于C 内核-打印字符串不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30552163/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com