編譯中間語言匯編語言
1、匯編程序
把匯編語言書寫的程序翻譯成與之等價的機器語言程序的翻譯程序。匯編程序輸入的是用匯編語言書寫的源程序,輸出的是用機器語言表示的目標程序。匯編語言是為特定計算機或計算機系列設計的一種面向機器的語言,由匯編執行指令和匯編偽指令組成。
採用匯編語言編寫程序雖不如高級程序設計語言簡便、直觀,但是匯編出的目標程序佔用內存較少、運行效率較高,且能直接引用計算機的各種設備資源。它通常用於編寫系統的核心部分程序,或編寫需要耗費大量運行時間和實時性要求較高的程序段。
2、解釋程序
解釋程序是一種語言處理程序,在詞法、語法和語義分析方面與編譯程序的工作原理基本相同,但在運行用戶程序時,它直接執行源程序或源程序的內部形式(中間代碼)。因此,解釋程序並不產生目標程序,這是它和編譯程序的主要區別。
3、編譯程序
編譯程序也稱為編譯器,是指把用高級程序設計語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序。編譯程序屬於採用生成性實現途徑實現的翻譯程序。
它以高級程序設計語言書寫的源程序作為輸入,而以匯編語言或機器語言表示的目標程序作為輸出。編譯出的目標程序通常還要經歷運行階段,以便在運行程序的支持下運行,加工初始數據,算出所需的計算結果。
(1)編譯中間語言匯編語言擴展閱讀:
工作過程
1、匯編程序
輸入匯編語言源程序。檢查語法的正確性,如果正確,則將源程序翻譯成等價的二進制或浮動二進制的機器語言程序,並根據用戶的需要輸出源程序和目標程序的對照清單;如果語法有錯,則輸出錯誤信息,指明錯誤的部位、類型和編號。最後,對已匯編出的目標程序進行善後處理。
2、解釋程序
由總控程序完成初始化工作。依次從源程序中取出一條語句進行語法檢查,如有錯,輸出錯誤信息;如果通過了語法檢查,則根據語句翻澤成相應的指令並執行它。檢查源程序是否已經全部解釋執行完畢,如果未完成則繼續解釋並執行下一條語句,直到全部語句都處理完畢。
3、編譯程序
先進行詞法分析與語法分析,然後生成中間代碼,接著對程序進行多種等價變換來代碼優化,最後生成目標代碼。
㈡ 匯編語言編程
匯編語言中EAX 與 EBX 相乘movx,eax;EAX 的值送入 X寄存器register是 CPU 中被命名的存儲位置,用於保存操作的中間結果。這個例子的重點不是說明 C++ 與匯編語言哪個更好,而是展示它們的關系。匯編語言可移植嗎。一種語言,如果它的源程序能夠在各種各樣的計算機系統中進行編譯和運行,那麼這種語言被稱為是可移植的portable。例如,一個 C++ 程序,除非需要特別引用某種操作系統的庫函數,否則它就幾乎可以在任何一台計算機上編譯和運行。Java 語言的一大特點就是,其編譯好的程序幾乎能在所有計算機系統中運行。匯編語言不是可移植的,因為它是為特定處理器系列設計的。目前廣泛使用的有多種不同的匯編語言,每一種都基於一個處理器系列。對於一些廣為人知的處理器系列,匯編語言指令會直接與該計算機體系結構相匹配,或者在執行時用一種被稱為微代碼解釋器的處理器內置程序來進行轉換。為什麼要學習匯編語言。
㈢ 高級編程語言也要編譯成匯編語言,不同的cpu匯編語言不一樣,那會編譯成那種匯編語言呢
高級語言一般最終不是編譯成匯編語言而是機器語言,而像C#這類語言編譯後為公共語言,不是機器碼,運行時公共語言代碼由NET框架負責進一步即時翻譯即時執行為機器指令。只有C++這類語言編譯後為CPU可以直接執行的機器碼。
附圖是VS2019中C++語言的一段調試時的反匯編窗口,其中白字是C++源代碼,下面是對應的匯編碼,匯編行左列為內存地址,中間是對應的機器指令和數據(內存中的實際值),右側是對應的匯編碼。
比如,定義整數變數a並賦值1的語句,被編譯器編譯成C7 45 F8 01 00 00 00 這樣幾個位元組,其中C7為匯編碼中的MOV指令,可以操作16位寄存器和內存以及立即數,45 F8 是當前命名空間中變數地址,即變數a的地址(F845),而01 00 00 00 為32位寬度的數值1(內存排列順序是前低後高)。也就是說機器語言的指令格式為:指令代碼,地址,數據,當然根據不同指令,有時候地址和數據是不需要的。而右側 MOV dword ptr[a],1 是指令助記符,也就是匯編指令,而用匯編指令編寫的程序也是需要編譯成機器指令的。
指令C7對應的匯編碼及含義
㈣ 匯編,解釋,編譯是三種不同的語言嗎有什麼什麼區別
是指三種將不同的源程序翻譯成目標程序的方式。「匯編」是指將匯編語言源程序翻譯成目標代碼,然後來執行這個目標代碼,這個翻譯過程由「匯編程序」來完成,如8086匯編;「解釋」是指將高級語言源程序的語句翻譯一行,執行一行,即便翻譯,邊執行,如QBASIC;「編譯」是指將高級語言源程序翻譯成目標代碼,然後來執行這個目標代碼,這個翻譯過程由「編譯程序」來完成,如c語言。
㈤ 匯編語言編譯
1、編程語言包含匯編語言,匯編語言只是編程語言的一種。
2、編程語言:
編程語言(programming language),是用來定義計算機程序的形式語言。它是一種被標准化的交流技巧,用來向計算機發出指令。一種計算機語言讓程序員能夠准確地定義計算機所需要使用的數據,並精確地定義在不同情況下所應當採取的行動。
3、匯編語言:
匯編語言(assembly language)是一種用於電子計算機、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。在匯編語言中,用助記符(Mnemonics)代替機器指令的操作碼,用地址符號(Symbol)或標號(Label)代替指令或操作數的地址。在不同的設備中,匯編語言對應著不同的機器語言指令集,通過匯編過程轉換成機器指令。普遍地說,特定的匯編語言和特定的機器語言指令集是一一對應的,不同平台之間不可直接移植。
㈥ 編譯和匯編的區別是什麼
1.定義區別
①編譯原理旨在介紹編譯程序構造的一般原理和基本方法。內容包括語言和文法、詞法分析、語法分析、語法制導翻譯、中間代碼生成、存儲管理、代碼優化和目標代碼生成。
②匯編語言(assembly language)是一種用於電子計算機、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。
2.處理方式區別
①編譯過程與解釋挺像,區別就在於編譯是將所有的源代碼指令一次性成翻目標代碼並執行。
②匯編過程就是把匯編指令一對一地翻譯成01機器碼的過程。而採用這種處理方式的語言只有一類:匯編語言。
3.特點區別
①編譯語言的特點就是不需要解釋器的參與,所以運行比較快,但是編譯好的程序只能在當前平台運行,是個局限性。
②匯編語言是當今世界上歷史最早,應用最廣,功能最強大,運行速度最快的編程語言。但是匯編語言開發工期長,可讀性差,並且不能跨平台編程。
㈦ C語言編譯的時候會不會先生成中間語言
C語言編譯時,會生成中間語言叫做匯編語言,再由匯編生成機器語言!同時,C語言程序編譯的過程經過4個階段:預處理(Preprocessing)、編譯(Compilation)、匯編(Assembly)、鏈接(Linking)。
1)預處理階段在該階段主要完成對源代碼的預處理工作,主要包括對宏定義指令,頭文件包含指令,預定義指令和特殊字元的處理,如對宏定義的替換以及文件頭中所包含的文件中預定義代碼的替換等,總之這步主要完成一些替換工作,輸出是同源文件含義相同但內容不同的文件。
2)編譯、優化階段編譯就是將第一階段處理得到的文件通過詞法語法分析等轉換為匯編語言。優化包括對中間代碼的優化,如刪除公共表達式,循環優化等;和對目標代碼的生成進行的優化,如如何充分利用機器的寄存器存放有關變數的值,以減少內存訪問次數。
3)匯編階段將匯編語言翻譯成機器指令
4)鏈接階段鏈接階段的主要工作是將有關的目標文件連接起來,即將在一個文件中引用的符號同該符號在另外一個文件中的定義連接起來,使得所有的目標文件成為一個能夠被操作系統裝入執行的統一整體。
具體詳情可以參照:
http://wenku..com/link?url=-
㈧ 簡述什麼是源語言,目標語言,中間語言
1、源語言:源語言是可以引導出另一種語言的語言。
2、目標語言:目標語言,是一種利用特定語言輸入目標語言的方法。
3、中間語言:是一種面向語法,易於翻譯成目標程序的源程序的等效內部表示代碼。
拓展資料
一、中間語言
中間語言與具體機器特性無關,一種中間語言可以為生成多種不同型號的目標機的目標代碼服務。可對中間語言進行與機器無關的優化,有利於提高目標代碼的質量。把源程序映射成中間代碼表示,再映射成目標代碼的工作分在幾個階段進行,使編譯演算法更加清晰。
二、目標語言
翻譯程序的輸出稱目標程序。一般說,目標程序都是機器語言程序,輸出的語言就稱為目標語言。
目標語言是由源碼編譯或匯編所得的語言。它是自動編碼程序輸出的一種語言。在將信息從一種語言轉換成另一種語言時,原來的語言被稱為源語言,而輸出的語言則被稱為目標語言。通常,目標語言與機器語言可以是相同的,但當編碼程序是由一系列步驟才能完成時,則目標語言中的一個步驟可以是下一步的源語言。
(資料來源:中間語言——網路)
㈨ 匯編語言,編譯語言,總是傻傻分不清,請問這有啥區別呢…
匯編需要是一種計算機需要,就像漢語,英語一樣;編譯語言,好比用英語,漢語等寫作一樣。