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

如何理解从文档中放入寄存器的内容?

  •  0
  • iProgram  · 技术社区  · 7 年前

    this question . 我现在明白了它是如何工作的,但通过尝试,我发现了一个错误。

    让我感兴趣的是@Margaret Bloom在其中一条评论中提到的内容:

    对我来说,这意味着只需阅读规范,就可以知道要使用哪些寄存器以及要在其中放入什么。

    使用VGA文本模式示例,建议您将地址 0xB8000 ax 和 dx ,字符在中的位置 di 以及 ES:DI

    同样,在读取C代码时,如下面所示,

    void WriteCharacter(unsigned char c, unsigned char forecolour, unsigned char backcolour, int x, int y)
    {
         uint16_t attrib = (backcolour << 4) | (forecolour & 0x0F);
         volatile uint16_t * where;
         where = (volatile uint16_t *)0xB8000 + (y * 80 + x) ;
         *where = c | (attrib << 8);
    }
    

    我如何知道将值放入相应的寄存器中?

    我希望这一切都有意义。如果没有,请随时要求我澄清。

    文件是 linked hear

    1 回复  |  直到 7 年前
        1
  •  1
  •   Peter Cordes    7 年前

    将字符写入VGA内存是关于修改 记忆 0xB8000 无论VGA内存的末尾在哪里。

    编译该C函数时,编译器完全可以自由使用它想要的任何寄存器(只要它根据调用约定保留所有保留调用的寄存器);唯一可以观察到的副作用是通过 volatile uint16_t*

    其余的都是带有自动存储的局部变量,因此“仿佛”规则允许它使用它想要的任何代码产生这种副作用。

    推荐文章