【轉】第一個彙編器是怎麼實現的

文章轉載自:第一個彙編器是怎麼實現的 - 御坂研究所

需要理解的是,彙編(或者編譯)的過程是不一定需要由計算機來完成的。人類設計的最早的電子計算機的計算過程是由電纜的插拔來實現的,後來爲了方便操作人們開始使用紙帶來實現對計算機的計算過程的抽象,這裏紙帶上所記錄的內容我們就可以理解爲機器語言,機器語言本身是機器的指令,可以實現對計算機的直接控制。

一段時間之後,人們覺得直接寫機器指令實在是太過於繁瑣和低效。所以人們就把機器指令進行總結和分類,把機器指令分爲計算、跳轉、複製等等的類別,之後給每個分類冠以相應的僞碼。這樣一來,程序員就不再需要直接手寫機器指令,整個編碼過程分爲如下三步:

  • 用匯編指令(即僞碼)書寫程序;
  • 人工的把寫好的彙編代碼翻譯成相應的機器指令;
  • 再把機器指令輸入到計算機中讓計算機執行;

點擊這個鏈接可以看到人們是如何在紙上書寫彙編語言的(或者你也可以直接查看文末的圖片列表)。

彙編語言極大地提高了程序員的開發速度,因爲相比於毫無意義的機器指令,彙編語言更容易讓人理解,開發起來也就更加的容易。

人類的需求是沒有止境的。一段時間之後,人們覺得每次都是人工的把彙編語言翻譯成機器指令,這樣既繁瑣也容易出錯,而且這種翻譯本質上是十分機械的工作。所以人們開始嘗試用現有的彙編語言寫一個彙編器,這個彙編器可以使用計算機來自動的把彙編語言轉化爲機器語言。

到這裏我們就明白了,世界上第一個彙編器並不是由機器指令寫的,它本身是由彙編語言寫的。在第一個彙編器實現了之後,後面的彙編語言就都可以使用這個彙編器來實現彙編了。需要注意的是,這個彙編器只能支持某一個特定類型的計算機。不論是彙編器本身的執行還是彙編器工作時彙編語言到機器指令的轉化,它們都及其依賴於目標機器的指令集。

不過,在之後每當有擁有新的指令集的計算機被設計出來之後,我們可以在已經擁有彙編器的計算機上實現新的指令集計算機的彙編器,新的指令集的編碼過程分爲如下三步:

  • 設計新指令集的彙編語言,使用該彙編語言書寫程序;
  • 在舊的指令集計算機上實現新指令集的彙編器,使用匯編器對彙編語言進行彙編得到機器指令;
  • 在新的指令集計算機上執行機器指令;

當然,即使是新指令集的計算機你也可以像最早的那樣手動的去實現一個彙編器,沒有任何問題。

到這裏我們就發現了,彙編語言的彙編器是獨立於計算機的,它的目的在於轉化而非執行,而在這裏轉化的載體是人還是機器或者說是什麼樣的機器其實並不重要。

順便說一下,計算機科學本身是來自於數學的,個人認爲這主要體現在兩個地方:

計算硬件以及相關的計算理論皆來自於數學;
編程語言在設計時很多理論參考了數學中的相關的理論;
但事實上,在編程語言高度抽象的今天,大部分程序員都不再需要關注計算機本身,更不需要關注於數學,更多的程序員打交道最多的其實是 “邏輯”。也就是說,程序員的大部分工作其實是把現實世界的一些東西抽象成邏輯並且用計算機語言把它們實現出來,之後把程序交由計算機去執行。

參考:
R Thorne's answer to How was the first assembler programmed? - Quora
History of programming languages - Wikipedia
第一個計算機語言編程程序是怎麼做出來的? - 知乎
1985 年程序員是如何寫代碼的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章