【轉】第一個匯編器是怎么實現的


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM