我想嘗試編寫一個裝配中的操作系統。請不要只說「白癡,你必須在%s,%s,%s,%s等方面更好地思考這個問題。」我知道這通常不是一個邊學邊做的事情,需要幾個月的工作,但我想嘗試,如果我沒有在這裏得到答案,我只會問別的地方。您可以將我與nasm的入門教程聯繫起來,還是通過組裝的方式寫入屏幕而不使用C函數?我幾乎瞭解所有主要裝配說明,並且已經編碼了很長時間。 編輯:我想使用nasm和win32純裝配 - 無鏈接C函數
回答
不使用C函數或系統調用的唯一方法是讓您的彙編代碼在沒有任何其他操作系統的情況下運行,或者在模擬器(如Bochs或QEMU)內運行。
Here是一個簡單的nasm教程,它寫入屏幕並且不使用C函數,並且在該級別上不依賴於Win32。如果你想在Windows中運行時寫這樣的東西,那麼恐怕C函數是唯一的方法,除非你可以學習一些軟件中斷接口。
另外,osdev.org包含許多優秀的文章和教程,其中包括許多關於如何在操作系統開發的許多不同方面編寫代碼的程序集。
除了上述的其他很好的建議,有一個NASM論壇(你可以得到NASM和友好手冊的最新版本)的:
它可能看起來奇怪的是,「網際彙編」彙編在其主頁上有一個國家代碼。不要把它想成「美國」,把它想成「像我們一樣,老兄!」 :)
由於一旦切換到pmode時BIOS中斷將不可用,因此瞭解如何直接訪問硬件是有意義的。寫入屏幕是一個容易的開始。你需要知道「屏幕」通常在0xB800000(B800:0000的段:偏移量形式 - 你可能需要)。您需要知道佈局是字符的一個(偶數編號)字節和「屬性」(主要是顏色)的一個(奇數編號)字節。即使你不使用中斷,RBIL也包含「ports.lst」,你可能會發現它有幫助。如上所述,osdev.org是你最好的朋友!
快樂Bootin',
弗蘭克
舉Nick Morgan,我與他同意:
好了,我不認爲學習的x86是非常有用的。我認爲你不需要在日常工作中編寫彙編語言 - 這個[學習彙編程序]純粹是一種學術練習,可以擴展你的想法和想法。 6502 [彙編語言]是在另一個時代編寫的,大多數開發人員都是直接編寫彙編語言,而不是使用這些新編的高級編程語言。所以,它的設計是由人類寫的。更多的現代彙編語言是由編譯器編寫的,所以讓我們把它留給他們。另外,6502很有趣。沒有人稱過x86的樂趣。
我目前還在編寫DCPU-16 assembly language(您可能聽說過)的「操作系統」。這很有趣,因爲我可以使用許多可用的瀏覽器內「IDE」之一,例如this one,我想你應該瞭解x86組件的相同原理。
如果你tageting Win32中,有通過Iczelion古典Win32彙編教程:http://win32assembly.online.fr/tutorials.html
- 1. 用GNU鏈接器包裝C++函數
- 2. 用純React鏈接異步函數?
- 3. C#函數鏈接
- 4. C++共享庫:純虛函數不會導致鏈接錯誤
- 5. C++ - 純虛函數
- 6. 純函數C++ 11
- 7. C++純虛函數
- 8. C鏈接C++靜態函數
- 9. 純函數圖連接
- 10. C++多態/純虛函數
- 11. C隨機數生成(純C代碼,無庫或函數)
- 12. C#鏈接參數函數調用
- 13. C和函數中的鏈接列表
- 14. 鏈接函數
- 15. 函數鏈接
- 16. 純函數式編程語言中的雙向鏈接列表
- 17. 用C語言裝配函數segfault
- 18. 使用Boost封裝純虛函數:: Python
- 19. __cdecl包裝的WinSock函數回調純C和調用它
- 20. 純數字wordpress永久鏈接
- 21. C++流行函數鏈接列表
- 22. C#和JS函數的鏈接
- 23. C++鏈接列表破壞函數
- 24. C++私有函數的內部鏈接?
- 25. 鏈接列表查找函數C++
- 26. C#/ ASP.NET ActionLink /函數/錯誤鏈接
- 27. 鏈接列表指向函數C
- 28. 打印函數 - 鏈接列表C++
- 29. C#構造函數鏈接? (怎麼辦?)
- 30. C++鏈接列表包含()函數
嘗試搜索www.codeproject.com我記得有一次我讀過一篇好文章寫一個引導裝載程序。 – valdo 2012-07-10 20:01:43
http://wiki.osdev.org/Printing_to_Screen – cnicutar 2012-07-10 20:03:28
或使用BIOS http://wiki.osdev.org/BIOS#BIOS_functions – 2012-07-10 20:17:23