简单的OS内核 - 屏幕输出长字符串数组问题

时间:2015-08-18 02:11:10

标签: operating-system kernel

我遵循以下步骤:“从头开始编写简单的操作系统”。我启动并运行了基本内核,但是当我尝试输出一个非常长的字符串时出现了一个奇怪的错误。

以下代码输出全“0”。但是当我使用较短的“msg”字符串时,屏幕会打印“x”。

我想知道是否有人可以帮助我,非常感谢! (我在Windows 8的Bochs中测试它。)

这是kernel.c

void start () 
{
    // Create a pointer to a char , and point it to the first text cell of
    // video memory (i.e. the top - left of the screen )

    unsigned char *video_memory = ( unsigned char*) 0xb8000;
    // At the address pointed to by video_memory , store the character 'X'
    // (i.e. display 'X' in the top - left of the screen ).

    // this string: the outputs are "0"s.  
    const char msg[] = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzAbcdefghijkAbcdefghijklmnopqrstuvwxyzA";

    // this string: output are "x"s.
    //const char msg[] = "abcdefghijklmnopqrstuvwxyzabcdefghijk";

    int i = 0;
    int offset = 0;

    while(i<85)
    {
        // Test if msg points to the right memory
        if(msg[i]==0)   
        {
            video_memory[offset] = '0';
        }           
        else
        {           
            video_memory[offset] = 'x';
        }

        video_memory[offset+1] = 0x02; // Green color

        i = i + 1;
        offset = offset + 2;

        //set_cursor(offset);   
    }
}

0 个答案:

没有答案