小编Hex*_*ale的帖子

如何加载IDT?

我正在写自己的小操作系统。我已经完成启动,进入保护模式,一些文本打印以及与qemu的串行通信。我已经尝试添加中断两天了。我到处都在寻找,包括其他系统资源。不,我下面没有代码,qemu(我不知道为什么)关闭了。我包括geust errorsqemu。

这是我的主文件 kernel.cpp

__asm__ (".pushsection .text.start\r\n" \
          "jmp main\r\n" \
          ".popsection\r\n");

#include <stdbool.h>
#include "utils/debug.h"
#include "drivers/display.h"
#include "drivers/serial.h"
#include "drivers/keyboard.h"
#include "drivers/pic.h"
#include "interrupt/interrupt.h"


void initDrivers(){
    serial::init();
    pic::init();
    interrupt::init();
    interrupt::enable();
    terminal_initialize();
}

int main() {
    initDrivers();
    terminal_setcolor(VGA_COLOR_WHITE);
    terminal_writestring("Hello!");

    debug::println("after println");

    bool alive = true;
    while(alive) {

    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

PIC驱动程序pic.cpppic.h

#include "pic.h"
#include <stddef.h>
#include <stdint.h>
#include "IO.h"
#include "../utils/debug.h"
/*
* IMR - Interrupt Mask Register
* IRR - Interrupt Request …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly osdev interrupt-handling

4
推荐指数
1
解决办法
375
查看次数

标签 统计

assembly ×1

c ×1

interrupt-handling ×1

osdev ×1

x86 ×1