Указатель с ++ не содержит ожидаемого значения? - PullRequest
0 голосов
/ 17 июня 2020

Я новичок в программировании операционных систем и читаю книгу, которая помогает создать загрузчик для моей операционной системы C ++. Загрузчик работает, но мой код на C ++ не работает. Я пытаюсь распечатать текст в ячейку памяти 0xb8000, которая хранится в коротком указателе. При итерации по переданному указателю char значения кажутся неправильными. Он не распечатывает Hello. Он просто распечатывает целую кучу символов деления на сером фоне. Изображение vm . Что я могу сделать, чтобы это исправить? Я использую g cc и ld nasm mingw для компиляции всего.

int printf(const char *str);

extern "C" int kernel_main()
{
    printf("Hello");
    return 0;
}

int printf(const char *str)
{
    unsigned short *VideoMemory = (unsigned short *)0xb8000;
    int i = 0;
    for (int i = 0; str[i] != '\0'; ++i)
    {
        VideoMemory[i] = str[i];
    }
    return i;
}
...