我有一個關於計算機編程的問題。假設我只有一臺沒有運行OS的電腦。並想開始「開發」一個操作系統。基本上我所擁有的是一張白紙和一支鋼筆。一對電子設備。我如何將指令放入電腦?因爲今天我們使用編譯器的解釋器,將編程語言「轉向」他們稱之爲「機器代碼」的東西。但我的問題可能是如何從無處生成機器碼。 謝謝你的回覆,學習如何做的鏈接將是必須的。計算機編程
計算機編程
回答
第一臺直接編程生成「機器代碼」的計算機。只是將一個零點打成卡片(好吧,實際上他們打了八進制數字)。
這樣做是這樣做的,直到有人認爲有一個彙編程序將機器代碼指令翻譯爲那些零和零是一個好主意。
之後,另一個人認爲有一種編程語言是非常好的想法,他會將「頂級」指令翻譯成機器碼。
然後,或者可能同時,爲了簡化編程而創建的一些「內部程序」:打開文件,關閉文件,您唯一需要做的就是調用內部子程序該機器不是自己編寫所有打開的文件和關閉文件子例程:種植操作系統的種子。
交叉編譯此處評論的問題是現在爲新計算機創建操作系統的方式:使用工作計算機作爲「槓桿」爲新計算機創建操作系統。
計算機基於物理處理器,該物理處理器被設計爲接受僅允許諸如移位,移動,複製,添加等原始指令的指令(例如,在彙編代碼中)。這個處理器決定它是如何說話的(例如,字(8位)和其他規格(速度/標準等)有多大。使用某種類型的存儲器,我們可以存儲指令(穿孔卡,磁盤)並執行巨大這些指令流。
如果重複一遍又一遍的說明,您可以移動到一個地址和執行什麼就在這個位置,創建循環和其它結構(分支,上下文切換,遞歸)。
由於你會有外圍設備,你可以通過某種方式與它交互(繪製,打印點),並且你可以創建例程來構建字母,字體,框和線,然後你可以運行一個子程序在屏幕上打印字母'a'。
操作系統基本上是所有這些較低級別指令的高級實現。它實際上是所有與不同領域(I/O,計算等)接口的指令的集合。 Unix是不同人員在不同領域工作並將他們全部插入單個操作系統的完美例子。
這取決於你想走多遠。最早的「編程」就是將電線從一個基本類似的線路轉移到另一個線路。 此時的女性/女性編程被稱爲電腦,並使用鉛筆和紙張。
稍後您將使用鉛筆和紙張以及指令集的數據表/文檔。基本上手工組裝,目前沒有編譯器甚至沒有編程語言的概念,但這仍然需要進一步發展。你以任何你喜歡的形式(二進制或八進制)寫下了這些零和零。在這一點上輸入代碼
一個方法是使用交換機。當然,計算機會先於它,但是要查找pdp8或altair等的前面板的圖片,您需要爲數據值和地址設置開關,然後手動選通寫入。你以這種方式和/或整個程序加載bootstrap。設置起始地址並切換到運行模式。
隨着時間的推移,他們制定了關於你的手(開關)加載引導,那麼你可以使用閱讀器來加載較大的程序更容易卡和磁帶讀者。卡片可以打在打字機類型的東西上,實際上是一個鍵盤,但不是通過打印到紙上的色帶,而是切割卡上的插槽。
操作系統和編程語言開始在這一點上發展。直到你引導你的編譯器,你必須用其他語言編寫第一個用於新語言的編譯器(與今天沒有不同)。所以第一個彙編程序必須使用機器代碼,然後從彙編程序中創建一些其他語言,等等。
如果你想重複這個東西今天你也要建造一臺計算機與某種手動輸入等。你當然可以,但你必須這樣設計,就像你需要去除掉爆炸一樣,但例如你可以使用帶有外部閃存的處理器,無論是並行還是串行,多路複用到交換機(交換機控制多路複用器),並尋址/數據/寫入你的程序,或爲了好玩可以使用spi閃存並將程序串行加載到閃存中。更好地使用pdp或altair等在線模擬器來體驗體驗。
這裏沒有魔法,沒有雞和蛋的問題都沒有。人類必須在計算機完成之前手動完成。更小/更簡單的程序必須產生更復雜的程序,等等。這種漫長而緩慢的演變在整個互聯網和各地圖書館的書籍中均有記載。
謝謝@dwelch。你能否給我提供一些關鍵詞,以便通過互聯網或者一些書引用來幫助你。再次感謝您的回覆。 Regards –
https://en.wikipedia.org/wiki/ENIAC https://en.wikipedia.org/wiki/PDP-8 https://en.wikipedia.org/wiki/Altair_8800花了幾秒鐘的時間搜索對於。 https://en.wikipedia.org/wiki/Bootstrapping等。關於這個主題的大量書籍,基本上與計算機歷史有關的任何書籍都足夠長,這將涉及從使用交換機將卡/磁帶加載器加載到操作系統或程序的過渡。我不認爲術語裸金屬被當時使用,因爲一切都是裸機。 –
您還可以查看最新的語言,全新的語言,它們需要第一個編譯器使用當前(不同)語言才能重新編寫該語言的編譯器。最終像當前的語言依靠其他計算機交叉編譯來啓動第n臺計算機。 (從頭開始學習linux,如何從頭開始編譯現有的os?使用其他os或安裝) –
- 1. 關閉計算機編程
- 2. C編程:虛擬計算機
- 3. 查詢的Linux計算機編程
- 4. 計算機圖形編程語言
- 5. 遠程計算機
- 6. 遠程計算機
- 7. C編程計算
- 8. jQuery的編程計算和計算
- 9. 通過CAN通訊編程連接到計算機的電機?
- 10. 在遠程計算機
- 11. 訪問遠程計算機
- 12. 登錄遠程計算機
- 13. 從遠程計算機
- 14. 我從遠程計算機
- 15. 不能遠程計算機
- 16. 計算機編程程序集中的條件語句? (MIPS)
- 17. 查詢計算與編程
- 18. C編程(GPA計算器)
- 19. C編程和計算
- 20. C編程 - 不計算值
- 21. 編程與雲計算
- 22. 訪問遠程計算機的MSMQ給出「遠程計算機不可用」
- 23. 遠程控制計算機並在遠程計算機上顯示
- 24. Java SSH從另一臺遠程計算機連接到遠程計算機
- 25. 將文件夾從遠程計算機(Azure)複製到遠程計算機
- 26. 從遠程計算機卸載程序
- 27. 集計算機
- 28. 計算機
- 29. 計算機
- 30. 計算機
您通常使用另一臺計算機,*使用*操作系統,並使用*交叉編譯*編譯目標。我建議你閱讀[OSDev wiki](http://wiki.osdev.org/Expanded_Main_Page)上的教程。 –
hello @JoachimPileborg我明白了,但是第一臺電腦怎麼使用呢?第一個編譯器是如何開發的。這實際上我正在尋找 –
嚴格地說,你只需要能夠將你的程序下載到機器上的某種內存中,然後告訴CPU從該內存位置開始工作,並且你擁有它。但是如何在不使用軟件的情況下做到這一點,並不是SO的主題問題。 – Lundin