導航:首頁 > 源碼編譯 > 編譯器要生成獨立的目標代碼嗎

編譯器要生成獨立的目標代碼嗎

發布時間:2022-05-10 20:37:57

① 解釋程序和編譯程序那個能產生目標程序

都可以產生目標程序,不同的是,編譯程序是把高級語言編寫的源程序翻譯成機器語言的目標程序.解釋程序,是把某種程序設計語言編寫的源程序翻譯成機器語言的目標程序,且翻譯一條,執行一條的原則

② 匯編編譯器的工作和生成可執行文件的執行過程是怎樣的

匯編器,先生成目標代碼,其中有一些數據,代碼,還有一些表(重定位表等)
然後調用鏈接器,鏈接成可執行文件。

早期的匯編器,只負責生成目標代碼,鏈接器是一個獨立的程序。
需要手工分別作匯編,和鏈接

現在的匯編器,可以合並這兩步,直接調用鏈接器,是直接生成可執行文件。

偽指令是匯編命令,是用來操作匯編器的命令。
不是指令,不生成對應的代碼。

CPU只能識別二進制代碼,數據通過載入器的載入,或者燒寫器的燒寫,初始化,有些代碼,會在載入時重新定位。
代碼也可能是燒寫的,比如BIOS代碼。
對於PC:
操作系統的啟動代碼,是由BIOS中的專門代碼;
從磁碟的固定位置,載入在內存的固定位置的。
操作系統的其他部分,是由操作系統的啟動代碼載入的。

③ 編譯器或匯編器都能產生目標代碼嗎

編譯器或匯編器都能產生目標代碼
區別是
編譯器一般是中高級語言,它更接近人類的語言,方便編程

匯編器只是助記符,它是低級語言,對編程者要求高,但能編寫出高效率的程序

④ 編譯程序和解釋程序均能產生目標程序嗎

不能
因為:編譯程序能產生目標程序而解釋程序則不能
補充:解釋程序也稱為解釋器,它或者直接解釋執行源程序,或者將源程序翻譯成某種中間表示形式後再加以執行;編譯程序(編譯器)則是將源程序翻譯成目標語言程序,然後在計算機上運行目標程序。兩種語言處理程序的根本區別是:在編譯方式下,機器上運行的是與源程序等價的目標程序,源程序和編譯程序都不再參與目標程序的執行過程,而在解釋方式下,解釋程序和源程序(或某種等價表示)要參與到程序的運行過程中,運行程序的控制權在解釋程序。解釋器翻譯源程序時不生成獨立的目標程序,而編譯器則將源程序翻譯成獨立的目標程序。
補充:編譯程序(Compiler,compiling program)也稱為編譯器,是指把用高級程序設計語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序。編譯程序屬於採用生成性實現途徑實現的翻譯程序。它以高級程序設計語言書寫的源程序作為輸入,而以匯編語言或機器語言表示的目標程序作為輸出。編譯出的目標程序通常還要經歷運行階段,以便在運行程序的支持下運行,加工初始數據,算出所需的計算結果。

⑤ 為什麼解釋程序不保存目標程序,而編譯程序需保存目標程序

解釋程序

所謂解釋程序是高級語言翻譯程序的一種,它將源語言(如BASIC)書寫的源程序作為輸入,解釋一句後就提交計算機執行一句,並不形成目標程序。就像外語翻譯中的「口譯」一樣,說一句翻一句,不產生全文的翻譯文本。這種工作方式非常適合於人通過終端設備與計算機會話,如在終端上打一條命令或語句,解釋程序就立即將此語句解釋成一條或幾條指令並提交硬體立即執行且將執行結果反映到終端,從終端把命令打入後,就能立即得到計算結果。這的確是很方便的,很適合於一些小型機的計算問題。但解釋程序執行速度很慢,例如源程序中出現循環,則解釋程序也重復地解釋並提交執行這一組語句,這就造成很大浪費。

編譯程序

這是一類很重要的語言處理程序,它把高級語言(如FORTRAN、COBOL、Pascal、C等)源程序作為輸入,進行翻譯轉換,產生出機器語言的目標程序,然後再讓計算機去執行這個目標程序,得到計算結果。

解釋程序是不生成目標程序的

⑥ 編譯器是什麼

簡單講,編譯器就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。一個現代編譯器的主要工作流程:源代碼 (source code) → 預處理器 (preprocessor) → 編譯器 (compiler) → 目標代碼 (object code) → 鏈接器 (Linker) → 可執行程序 (executables)
高級計算機語言便於人編寫,閱讀交流,維護。機器語言是計算機能直接解讀、運行的。編譯器將匯編或高級計算機語言源程序(Source program)作為輸入,翻譯成目標語言(Target language)機器代碼的等價程序。源代碼一般為高級語言 (High-level language), 如Pascal、C、C++、Java、漢語編程等或匯編語言,而目標則是機器語言的目標代碼(Object code),有時也稱作機器代碼(Machine code)。
對於C#、VB等高級語言而言,此時編譯器完成的功能是把源碼(SourceCode)編譯成通用中間語言(MSIL/CIL)的位元組碼(ByteCode)。最後運行的時候通過通用語言運行庫的轉換,編程最終可以被CPU直接計算的機器碼(NativeCode)。
編譯是從源代碼(通常為高級語言)到能直接被計算機或虛擬機執行的目標代碼(通常為低級語言或機器語言)的翻譯過程。然而,也存在從低級語言到高級語言的編譯器,這類編譯器中用來從由高級語言生成的低級語言代碼重新生成高級語言代碼的又被叫做反編譯器。也有從一種高級語言生成另一種高級語言的編譯器,或者生成一種需要進一步處理的的中間代碼的編譯器(又叫級聯)。
典型的編譯器輸出是由包含入口點的名字和地址, 以及外部調用(到不在這個目標文件中的函數調用)的機器代碼所組成的目標文件。一組目標文件,不必是同一編譯器產生,但使用的編譯器必需採用同樣的輸出格式,可以鏈接在一起並生成可以由用戶直接執行的EXE,
所以我們電腦上的文件都是經過編譯後的文件。

⑦ 被包含文件是在編譯時先單獨生成目標文件,然後連接到可執行文件中去. 對嗎

不知道你是說那種語言,如果是C/C++的話,一般我們使用#include指令包含頭文件(當然,頭文件也是可以有實現),編譯器首先通過預編譯,將所有使用#include的地方全部使用包含的文件替換,然後在執行編譯,所以被包含不會生成單獨的目標文件
生成單獨的目標文件一般是頭文件的實現文件,頭文件的實現就是先編譯成單獨的目標文件,然後通過鏈接器連接到一起,成為一個完整的可執行文件

⑧ 編譯過程中,源程序為什麼要通過中間代碼生成目標程序

源程序是指程序員編寫的代碼,可以被編譯程序編譯為目標程序。
如果是c++,那麼後綴為.cpp
目標程序是編譯程序將源程序編譯後的結果,如果是c++,那麼後綴是.o
編譯程序一般是編譯器公司(比如微軟
intel他們都生產編譯器)做的,它將源代碼轉化為機器可識別的文件,經過鏈接,生成可執行程序。
解釋程序即解釋器,它不需要經過編譯階段即可根據用戶源程序執行。
程序語言分編譯類和解釋類語言。

⑨ 什麼是目標代碼

目標代碼(object code)指計算機科學中編譯器或匯編器處理源代碼後所生成的代碼,它一般由機器代碼或接近於機器語言的代碼組成。目標文件(object file)即存放目標代碼的計算機文件,它常被稱作二進制文件(binaries)。目標文件包含著機器代碼(可直接被計算機中央處理器執行)以及代碼在運行時使用的數據,如重定位信息,如用於鏈接或調試的程序符號(變數和函數的名字),此外還包括其他調試信息。目標文件是從源代碼文件產生程序文件這一過程的中間產物,鏈接器正是通過把目標文件鏈接在一起來生成可執行文件或庫文件。目標文件中唯一的要素是機器代碼,例如,用於嵌入式系統的目標文件可能僅僅含有機器代碼。
目標代碼通常採用三種形式:機器語言,匯編語言,待裝配機器語言模塊。
生成目標代碼時應著重考慮的問題: (1)如何使生成的目標代碼較短; (2)如何充分利用寄存器,以減少訪問內存次數; (3)如何充分利用指僅系統的的特點。

⑩ 編譯程序是否能夠產生目標程序

是的。雖然常用的集成開發環境把編譯過程及鏈接過程連在一起,但從嚴格意義上講,我們通常說的編譯(靜態編譯)是把源程序轉換成語義等價的目標程序,然後由鏈接器(linker)把一個(或多個)目標程序與程序庫鏈接成可執行文件

閱讀全文

與編譯器要生成獨立的目標代碼嗎相關的資料

熱點內容
安卓重力感應怎麼關 瀏覽:718
我的世界ios怎麼建伺服器地址 瀏覽:757
伺服器埠ip都是什麼意思 瀏覽:260
華為主題軟體app怎麼下 瀏覽:837
我們的圖片能夠收藏加密嗎 瀏覽:978
mysql空值命令 瀏覽:213
python整點秒殺 瀏覽:882
怎麼樣互傳app 瀏覽:292
python分布式抓包 瀏覽:36
輕量級php論壇 瀏覽:342
如何查看應用存儲在哪個文件夾 瀏覽:436
app開發項目范圍怎麼寫 瀏覽:76
androidjms 瀏覽:843
彈珠連貫解壓 瀏覽:243
程序員的網課 瀏覽:904
廣東加密狗防拷貝公司 瀏覽:450
rtf轉換pdf 瀏覽:350
單片機退出中斷 瀏覽:142
可以對單個內容加密的便簽 瀏覽:825
1024程序員節小米 瀏覽:316