1

我编写了一个非常简单的内核,它在 GRUB 的帮助下加载到 QEMU 中。我可能在指针计算中遇到问题,但无法真正弄清楚出了什么问题。

以下代码按预期工作,它打印给定的字符。

char* video = 0xb8000 + 0;
char* color = 'A';

*video++ = c;
*video++ = color;

但是,当我将视频指针计算更改为此它不起作用时,屏幕上不会出现任何内容:

int pos = 0;
char* video = 0xb8000 + pos;

但是当我将 pos 变量设为 unsigned int 时,它工作不正确,但是当我将其设为 1 时,它作为第一个,但为什么它需要为 1?

unsigned int pos = 1;
char* video = 0xb8000 + pos;

我的 C 标志:CFLAGS = -std=c99 -pedantic -Wall -nostdlib -ffreestanding -g

4

1 回答 1

1

也许尝试像这样添加前缀: (char*)0xB8000

char* video = (char*)0xB8000;
int pos = 0;

video[pos++] = 'A';
video[pos++] = 0x7;
于 2013-09-08T14:31:54.133 回答