我一直在阅读并遵循Nick Blundell从零开始编写操作系统的教程,可以在https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-找到dev.pdf
我已经成功编写了一个可以调用C代码的引导加载程序,因此我开始在C中编写内核.我现在正在尝试编写可以在屏幕上打印字符和字符串的函数.当我开始执行C代码时,我处于32位保护模式,所以我试图正确计算视频内存地址0xb8000的内存偏移量.
当我尝试使用计算的偏移量访问视频内存的特定区域时,我的问题就出现了.由于文本区域是25行乘80列,我使用公式((行*80)+列)*2,因为我必须有一个字符字节和一个属性字节.当我设置row = 0和column = 0时,我正在尝试打印的X不存在.设置row = 0和column = 1,X出现在左上角.
从char*video_memory = 0xb8000开始并重复发出video_memory ++允许我正确访问每个字节并在黑色背景上打印空格.
这是我的主要代码:
#include "../drivers/screen.h"
void main() {
//clear_screen();
//print_character('X', 0, 0, 0);
// Helper variables.
int row;
int column;
// We need to point at 0xB8000, where video memory resides.
unsigned char* video_memory = (unsigned char*)0xB8000;
for(row = 0; row < 25; row++) {
for(column = 0; column < 80; column++) {
// Clear the screen by printing a space on a …Run Code Online (Sandbox Code Playgroud)