osdev

    1熱度

    1回答

    我目前遵循啓用GDT分段的指南。我使用GNU彙編程序,用Bochs進行仿真。 我知道我需要用GDT描述符加載GDT寄存器。我已經完成了,接下來的步驟是現在將所有帶有偏移量的段寄存器加載到代碼/數據段描述符的各個位置。這樣做的代碼表述爲以下幾點: reloadSegments: ; Reload CS register containing code selector: JMP

    -1熱度

    1回答

    編輯:對於源代碼,您可以在Github上檢查我的回購:https://github.com/tuhdo/os-study。 我映射到2層的PIC(86)到第32項及以後在IDT的的IRQ。爲了測試PIC中斷,我把前31個例程設置爲相同的功能。問題是,我無法獲得第15箇中斷入口,因爲它是根據Interrupt Vector Table保留的。也就是說,只要我進入保護模式,啓用後的模式cr0然後跳轉到

    -9熱度

    1回答

    我目前正在使用我的操作系統。自從前天開始,我已經開始構建它。我想知道如何使用C語言或程序集打開.bin文件。我希望它在我的操作系統運行時打開,然後單擊一個按鈕。 我只能集中使用或C.

    -2熱度

    2回答

    我正在用C語言和程序集編寫操作系統,並且在實現EXT2文件系統時遇到了問題。我需要在C中將十六進制的四個字節轉換爲十進制。例如,將00 00 01(10000)轉換爲65536。我需要轉換爲十進制,因爲解析超級塊需要所有值都是十進制。最特別的ext2文件我的工作是在這裏: #include "ext2.h" #include <stdlib.h> long hex2dec(unsigned c

    1熱度

    1回答

    我在GDT,IDT和ISR上關注Bran's tutorial。我寫了異常處理程序,但是當我通過除零來測試它時,它發生了三重故障。我不確定我做錯了什麼。這裏是descriptor_table.h: #ifndef VOS_DESCRIPTOR_TABLE_H #define VOS_DESCRIPTOR_TABLE__H #include <stddef.h> #include <stdi

    0熱度

    3回答

    我正在寫一點操作系統,我需要能夠打印添加的變量。我有一個工作atoi函數,所以我倒過來給我一個itoa函數。沒有辦法訪問空閒內存,所以我需要弄清楚爲了創建適當大小的字符數組的位數。我想我需要用10除以得到它,然後將這些值模數化到正確的位置。這是我的C代碼到目前爲止: char* itoa(int res) { int size = 0; int t = res; w

    1熱度

    1回答

    我想在x86程序集(16位實模式)中創建一個簡單的第二階段命令系統。函數com_dir假設在扇區以字母'F'開始時讀取720KB軟盤和打印字符串。 這裏是第二個階段: [BITS 16] [ORG 0x0000] mov ax, cs mov ds, ax mov [drive_num], dl mov [root_drive], dl mov bx, load_msg call

    1熱度

    1回答

    根據體系結構概述文檔,Aarch64支持4k和64k頁面。一些CPU也支持16k頁。查看地址翻譯方案的細節我得出這樣的結論:這種CPU 不支持同時存在不同大小的頁面(不同於x86_64允許)。我對嗎?

    1熱度

    1回答

    我的引導程序代碼遇到問題。我嘗試用BOCHS將INT 13h AH = 42h:「Extended Read Sectors From Drive」BIOS 3.0版本的功能(EDD-3.0)從實際模式中將硬盤映像中的內核代碼複製到0x100000以上的內存位置。 當我使用INT13 AH = 41h BX = 55AAh函數來檢查EDD-3.0的支持時,我得到了肯定的結果。我正在使用BOCHS

    -1熱度

    2回答

    我正在編寫一個小型業餘操作系統作爲學習體驗。它針對32位x86架構。 我處於需要創建初始page_directory的位置,以便啓用分頁。此時分頁(因此VM)未啓用。 我有一個功能,保留4kb未使用的內存並返回此內存塊的起始地址。 我想創建一個數組,page_dir(由1024個int組成),位於上述函數返回的內存位置。 我明白基本指針(我認爲),但我無法弄清楚如何做到這一點。 如何在運行時返回的