代码之家  ›  专栏  ›  技术社区  ›  Mustafa

BIOS视频内存交互位置计算怪异

  •  1
  • Mustafa  · 技术社区  · 11 年前

    我已经编写了一个非常简单的内核,它在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

    1 回复  |  直到 11 年前
        1
  •  1
  •   DmitryK    11 年前

    也许可以试着这样加前缀:(char*)0xB8000

    char* video = (char*)0xB8000;
    int pos = 0;
    
    video[pos++] = 'A';
    video[pos++] = 0x7;
    
    推荐文章