主要區別
彙編程式和編譯器的區別在於編譯器獲取原始碼並將其轉換為彙編程式碼,而彙編程式則獲取編譯器生成的彙編程式碼並將其轉換為機器程式碼。
彙編程式(assembler) vs. 編譯器(compiler)
在程式執行中起著最重要作用的兩個術語是編譯器和彙編程式。編譯器的工作是獲取經過預處理的原始碼並將其轉換為彙編程式碼。然後彙編程式的工作就是從編譯器中獲取彙編程式碼並將其轉換為機器程式碼。如果我們討論主要的區別,那麼彙編程式和編譯器的主要區別是編譯器獲取原始碼並將其轉換為彙編程式碼,而彙編程式使用編譯器生成的彙編程式碼並將其轉換為機器程式碼。用源語言編寫的程式由編譯器讀取。編譯器是一個計算機程式,它將原始碼轉換為組合語言,並將組合語言程式碼傳送給彙編程式。編譯器的型別有單通道編譯器、多通道編譯器、載入和執行編譯器以及除錯和最佳化編譯器。彙編程式獲取編譯器生成的彙編程式碼並將其轉換為機器程式碼。彙編程式的主要工作是將資料作為輸入,形成可重定位的機器程式碼。有編譯器可以執行彙編程式的任務並直接生成機器程式碼,但這並不意味著我們不能研究彙編程式的功能。彙編程式碼和機器程式碼有很多不同。所有這些不同型別的編譯器執行不同的功能,並且根據工作的不同而不同。彙編程式碼是機器程式碼的助記符版本,而機器程式碼使用二進位制程式碼來表示記憶體地址的操作。在彙編程式中有兩個過程,第一個過程標識彙編程式碼並將程式碼儲存在符號表中,第二個過程再次掃描程式碼並對程式碼執行操作。編譯有兩個步驟,一個步驟是分析部分,在這一部分中,原始碼被分成幾部分並執行中間表示。在合成部分,目的碼形成中間表示。編譯器的階段包括詞法分析器、語法分析器、語義分析器、中間程式碼生成、程式碼最佳化器、程式碼生成器、符號表和錯誤處理程式。
比較圖
什麼是編輯者(a compiler)?
用源語言編寫的程式由編譯器讀取。編譯器是一個計算機程式,它將原始碼轉換為組合語言,並將組合語言程式碼傳送給彙編程式。編譯器的型別有單通道編譯器、多通道編譯器、載入和執行編譯器以及除錯和最佳化編譯器。所有這些不同型別的編譯器執行不同的功能,並且根據工作的不同而不同。編譯有兩個步驟,一個步驟是分析部分,在這一部分中,原始碼被分成幾部分並執行中間表示。在合成部分,目的碼形成中間表示。編譯器的階段包括詞法分析器、語法分析器、語義分析器、中間程式碼生成、程式碼最佳化器、程式碼生成器、符號表和錯誤處理程式。
彙編程式和編譯器不是相同的程序,但是它們執行的工作與生成源程式的物件程式碼並將其交給連結器所做的工作相同。連結器的主要過程是在連結器完成此工作後,獲取物件程式碼並生成程式的可執行程式碼,並將程式碼分配給載入程式。有一些內建的庫和標頭檔案,它們使用高階語言。在內建庫中定義了一些庫函式。這些函式由連結器連結到庫函式。如果找不到特定函式的庫函式,則會通知編譯器。當有一個大程式時,它被分成更小的程式,即模組。物件模組是在編譯或組裝這些模組時生成的。連結器必須將整個程式合併在一起。連結器有兩種型別:一種是連結編輯器,它生成重新定位的可執行模組,另一種是一種動態連結器,將外部模組連結到載入模組生成為止。必須執行的程式存在於主記憶體中。載入程式,在作業系統中載入可執行檔案。載入程式將記憶體空間分配給主記憶體中的可執行模組。有三種類型的裝載機:絕對裝載機、可重定位裝載機和動態執行時載入。這三種裝載機有不同的載入方式,即絕對載入法、可重定位載入法和動態執行時載入法。絕對載入程式將程式的可執行檔案載入到相同的主記憶體位置。在絕對裝載程式中,程式設計師必須知道分配。重新定位載入程式編譯或組裝實際的主記憶體地址。動態執行時載入程式,絕對記憶體程式是在執行指令時生成的。
什麼是彙編程式(assembler)?
彙編程式獲取編譯器生成的彙編程式碼並將其轉換為機器程式碼。彙編程式的主要工作是將資料作為輸入,形成可重定位的機器程式碼。有編譯器可以執行彙編程式的任務並直接生成機器程式碼,但這並不意味著我們不能研究彙編程式的功能。彙編程式碼和機器程式碼有很多不同。彙編程式碼是機器程式碼的助記符版本,而機器程式碼使用二進位制程式碼來表示記憶體地址的操作。在彙編程式中有兩個過程是預成型的,第一個過程標識彙編程式碼並將程式碼儲存在符號表中,然後第二個過程再次掃描程式碼並對程式碼執行操作。
主要區別
- 彙編程式是一種將編譯器生成的彙編程式碼轉換成機器程式碼的計算機程式,而編譯器則是一種獲取原始碼並將其轉換為彙編程式碼的計算機程式。
- 彙編程式輸入組合語言程式碼,而編譯器輸入原始碼。
- 彙編程式的階段是第一階段和第二階段,編譯器的階段是詞法分析器、語法分析器、語義分析器、生成的中間程式碼、程式碼最佳化器、程式碼生成器、符號表和錯誤處理程式。
- 彙編程式的輸出是二進位制程式碼,而編譯器的輸出是程式碼的助記符版本。