在没有库的情况下使用C进行打印和清除

在没有库的情况下使用C进行打印和清除,c,printing,C,Printing,我正在尝试开发一种操作系统。 它可以工作,但我编写的函数“print”有一个错误: 如果我打印两个字符串,则只显示一个字符串,并且命令\n不起作用。 我的问题是: 如何使用命令\n? 和 如何在不使用库的情况下创建函数清除? 这是功能打印: void print(char* message, int color) { char* mem = (char*)(0xb8000); while(*message != 0) { *mem = *message;

我正在尝试开发一种操作系统。
它可以工作,但我编写的函数“print”有一个错误:
如果我打印两个字符串,则只显示一个字符串,并且命令
\n
不起作用。
我的问题是: 如何使用命令
\n


如何在不使用库的情况下创建函数清除?
这是功能打印:

void print(char* message, int color)
{
    char* mem = (char*)(0xb8000);
    while(*message != 0)
    {
        *mem = *message;
        mem++;
        message++;
        *mem = (char*)color;
        mem++;
    }
}

PS它可以工作,但问题是如果我使用函数print两次(带或不带
\n
仅打印第二部分。

要模拟换行,您可能需要在视频内存中写入与当前行中剩余字符相同的空格。因此,您需要记住写入当前行的字符数


这同样适用于滚动。您需要复制内存,以使屏幕上的最后一行再次变为空白。

您应该了解打印功能的某些上下文

您应该有一个全局(或静态)变量来记住视频输出内存的最后打印位置

比如:

```

```


清除时:只需填充整个视频输出内存以清空并重置
last_pos

请不要用粗体呼喊。“
…(0xb8000);
“我多久没有看到这个神奇的数字了…:-)您总是从左上角开始编写字符串。您应该编写处理a)的代码光标位置,b)字符,如
\n
等…您的问题中缺少基本部分,特别是地址0xb8000处的内容以及格式。作为一个老恐龙,我记得它应该是PC系统在实模式下的屏幕文本缓冲区地址,一个字节代表字符,后一个字节代表颜色。但它过去取决于屏幕大小和可用的颜色。如果没有这些信息,你的问题就很难理解。操作系统比真实模式的屏幕驱动程序更重要。。。
static int last_pos = 0;
void print(char* message, int color)
{
    char* mem = (char*)(0xb8000);
    mem += last_pos * 2;
    while(*message != 0)
    {
        if(*message == '\n') {
            set the mem to next line and calculate the new last_pos
            continue;
        }
        *mem = *message;
        mem++;
        message++;
        *mem = (char*)color;
        mem++;
        last_pos ++;
        if (last_pos >= max_video_buffer) {
             move content the buffer to scroll the screen
             or
             simply reset the last_pos and mem to restart from top-left.
        }
    }
}