如今存在用機器語言編寫出的程序么?

最近發現一個很神奇的問題,我們如今在操作系統上調用各個軟體,包括編寫程序的種種IDE,始終飄於眾層抽象之上。最初的操作系統或者編譯器究竟是怎麼來的呢?這個金字塔究竟是如何疊上去的?

你或許會說可能是用彙編語言編寫的,但是使用彙編也需要彙編器啊,更何況調用彙編器還需要操作系統,究竟是怎麼發展到現在的程度的?


更新答案:

回復 傅曉昕 :所以我覺得你應該搞搞單片機,學學簡單的數電,玩玩fpga,搭個CPU,就能找到感覺了。最初的計算設備肯定是由最硬的方法構建出來的,CPU可以簡單地想像成一堆門電路組成的寄存器,CPU動作其實就是寄存器狀態的變化,本質就是電信號01變化,特定的動作可以用特定01編碼表示,這就是所謂的機器語言了。我覺得最初的設備可以用純硬體搭起的,有了輸入設備就可以輸入01編碼來控制CPU,01編碼過於底層,於是我們可以將01編碼對應為相對容易理解的彙編,然後便可開發更複雜的程序了,程序複雜了,便需要一個系統來調度程序任務,於是便有了操作系統。。。以後的事你應該可以想像到了

——————————————————————

你買個51單片機寫個彙編程序玩玩就明白了,假如程序複雜,需要運行多個任務,便需要一個框架調度任務的執行順序,這便是操作系統的雛形,

還嫌不夠底層的話,買塊FPGA,在上面搭個簡單的8位CPU,運行個簡單的程序,最後聯繫你學過的計算機理論,就能徹底懂了


彙編的詞法語法分析比較簡單,足夠的人力完全可以在紙上彙編成機械語

80年代很多機器還需要用這種方式編程,比如日本的pc6001系列、FC的family basic要寫高級程序必須把機器代碼寫在basic的字元串里,用程序簡單解碼後call


第一個彙編器,是使用機器碼敲16進位一點一點搞出來的。


當然存在。C/C++的編譯器一般都支持嵌入彙編,所以任何編譯器無法編譯出來部分都可以直接嵌入彙編代碼來實現。


燈泡就是一個簡單的計算機,擁有一位指令集,一位輸入,一位輸出。╮(╯▽╰)╭


數字電路實驗做過嗎?全加器輸入數字就是撥弄一排開關,輸出的結果是一排燈,而程序的功能實際上是在電路設計中實現的。妥妥的機器語言啊。


實名反對樓上所有提到的彙編語言的答案。不是C/CPP里嵌入一段彙編語言就叫「機器語言」了。必須要說明的是,機器語言和彙編語言是兩碼事。對於某種架構的CPU的彙編器來說,彙編語言和機器語言是一一對應的。但是,對於不同架構的CPU,相同的彙編語句對應的機器語言可能是完全不同的。最簡單的例子就是單片機,各家都有自己的架構,自己的編譯器和彙編器。(估計你們也沒接觸過除了x86和arm之外其他架構的處理器)所以,任何機器在執行彙編語言前都要先被彙編器翻譯成二進位機器語言。

真正依然使用機器語言進行編程的只有單板機。可輸入的代碼就是它本身的機器語言。

=====原答案=====

當然存在。上面說的什麼單片機,單片機的IDE那麼多,外加各種級別模擬工具,已經不能更爽。早已脫離寫機器語言和彙編語言的時代了。

我來給個參考答案:當今(2015年)少數單板機程序,是唯一使用機器語言編寫的程序。


存在啊。在電子/計算機工程學生的課堂上、作業里、考試里。至於金字塔怎麼搭的各種答案都說了。如果要詳細了解的話...推薦我們的教科書 Introduction to Computing Systems: From Bits and Gates to C and Beyond


隨便找個程序編譯成二進位指令…你就得到了一段機器語言寫的程序。轉成彙編指令…你就得到了一段彙編語言寫的程序。


我記得之前有個大神在minecraft里,從門電路開始建造了一個計算器,支持括弧、三角函數和開方。

現在人類依然完全了解計算機的底層結構,並且現在還有人對底層軟體(指令集)進行優化,題主提到的情況,幾百年之內都不會出現。


早幾年顯卡的可編程渲染單元只支持彙編。


推薦閱讀:

你工作中最推薦的 C/C++ 程序庫有哪些,為什麼?
ACM 怎麼樣零基礎到入門?
現在 C 語言可以設計 FPGA 么?
pthread_cond_wait 為什麼需要傳遞 mutex 參數?
在哪裡可以找到C語言標準庫的實現源代碼?

TAG:編程語言 | C編程語言 | CC |