有沒有辦法讓我的C或C++程序可以在沒有操作系統的情況下運行,並且會在左上角繪製像紅色像素的東西?我一直想知道如何製作這些類型的應用程序。由於Windows是用C編寫的,我想有一種方法可以做到這一點。爲X86創建本機應用程序?
感謝
有沒有辦法讓我的C或C++程序可以在沒有操作系統的情況下運行,並且會在左上角繪製像紅色像素的東西?我一直想知道如何製作這些類型的應用程序。由於Windows是用C編寫的,我想有一種方法可以做到這一點。爲X86創建本機應用程序?
感謝
如果你正在編寫一個裸處理器,沒有庫支持可言,你必須把所有的硬件手冊,找出如何訪問您的視頻內存,並執行任何操作硬件要求得到一個畫在顯示器上的像素(或蜂鳴器上的聲音,或從磁盤讀取的一塊存儲器,或其他)。
當你使用的操作系統,你會依靠設備驅動程序知道這一切爲您。對於沒有操作系統的平臺,程序仍然每天編寫,但很少用於裸處理器。許多小型MPU帶有一個支持庫,通常是一組例程,可讓您操作所支持的任何外圍設備。
你需要寫一個引導程序和裝載組合,其次是涉及被中斷手動設置VGA模式,抓住把手基本的視頻緩衝區,然後寫一個值到0字節的有效載荷。
從這裏開始:http://en.wikipedia.org/wiki/Bootstrapping_(computing)
沒有一個操作系統很難有裝載機,這意味着沒有動態的libc。你必須靜態鏈接,並且有大量的彙編代碼(儘管它可以作爲目標文件提供,然後你可以鏈接)。另外,由於你會受制於任何系統,所以你會被VESA視頻模式困住(除非你想編寫你自己的圖形驅動程序和子系統,你不這麼做)。
也一定能做到。您通常使用C語言編寫代碼,而且您幾乎必須自己完成所有任務,而無需使用標準庫。要設置像素,通常會加載一個指向屏幕物理地址的指針,並將正確的值寫入該指針。或者,在PC上,您可以考慮使用VESA BIOS。誠實地說,它與大多數MS-DOS代碼編寫方式非常相似(大多數使用MS-DOS在磁盤上讀取和寫入數據,但其他方面很少)。
有,但一般不從OS中。最初,它們是從驅動器上的MBR執行的asm存根。見MBR。對於x86處理器,這通常是16位處理代碼,這通常從此處跳轉到操作系統代碼,並根據操作系統和芯片組升級到32位/ 64位模式。
核心引導程序和自舉被寫入裝配在OS內核的一部分。有關操作系統啓動方式的簡要說明,請參閱http://en.wikipedia.org/wiki/Booting。我不知道如何在不使用匯編語言的情況下純粹使用C或C++等更高級別的語言編寫引導加載程序或內核。
的Linux/x86平臺顯然有它的第一個C語句前7個裝配instuctions,所以這是非常微不足道的。 GRUB也主要是C.所以,你可以相當接近。此外,這沒有根本原因。編譯器已經爲`main`生成了特殊的代碼;它可能包括必要的組裝。 – MSalters 2010-11-25 09:01:06