阿摩線上測驗 登入

申論題資訊

試卷:95年 - 95 專技高考_資訊技師:計算機概論(包括軟體、硬體)#49501
科目:計算機概論、大意(資訊科學概論,電腦常識,電子計算機概論)
年份:95年
排序:0

申論題內容

五、編譯程式將一原始碼變成目的碼,請詳述轉譯的過程。從目的程式到可執行程式尚 需什麼動作?(10 分)

詳解 (共 3 筆)

詳解 提供者:QQ綾
連結>>載入>>執行
詳解 提供者:hchungw

編譯程式(Compiler)將原始碼(Source Code)轉換為目的碼(Object Code)的過程稱為編譯過程。這個過程通常分為幾個階段,每個階段都對原始碼進行不同的處理。從目的程式到可執行程式(Executable Program),還需要經過連結(Linking)等步驟。以下是詳細說明:

編譯過程

  1. 詞法分析(Lexical Analysis)

    • 目的:將源程式的字符流轉換為詞法單位(Token)。
    • 過程:識別關鍵字、標識符、操作符和分隔符等詞法單位,並生成詞法單位流。
    • 工具:詞法分析器(Lexer)。
  2. 語法分析(Syntax Analysis)

    • 目的:檢查詞法單位序列是否符合語法規則,並構建語法樹(Parse Tree)。
    • 過程:將詞法單位組織成結構化的樹形結構,檢查語法錯誤。
    • 工具:語法分析器(Parser)。
  3. 語義分析(Semantic Analysis)

    • 目的:檢查語法樹是否符合語義規則,進行類型檢查和作用域檢查。
    • 過程:確保操作符和操作數的類型一致,變量在使用前已經聲明等。
    • 工具:語義分析器(Semantic Analyzer)。
  4. 中間代碼生成(Intermediate Code Generation)

    • 目的:將語法樹轉換為一種中間表示形式(Intermediate Representation, IR),方便後續優化和生成機器碼。
    • 過程:生成中間代碼,如三地址碼(Three-Address Code)、靜態單賦值形式(SSA)等。
  5. 代碼優化(Code Optimization)

    • 目的:改進中間代碼,使其更高效。
    • 過程:進行常量折疊、死代碼消除、循環優化等。
    • 工具:優化器(Optimizer)。
  6. 目標代碼生成(Code Generation)

    • 目的:將優化後的中間代碼轉換為目標機器碼(Object Code)。
    • 過程:根據目標機器的指令集生成機器碼,分配寄存器,進行指令選擇和安排。
    • 工具:代碼生成器(Code Generator)。
  7. 目標代碼優化(Target Code Optimization)

    • 目的:對生成的機器碼進行進一步的優化。
    • 過程:指令合併、消除冗餘指令、提高指令佈局效率等。

從目的程式到可執行程式

  1. 連結(Linking)

    • 目的:將多個目的文件(Object Files)和庫(Libraries)組合成一個可執行文件。
    • 過程:
      • 靜態連結(Static Linking):將所有依賴的目標代碼和庫代碼組合到一個可執行文件中。
      • 動態連結(Dynamic Linking):在運行時將依賴的動態庫(Dynamic Libraries,如 .dll 或 .so)加載到內存中。
    • 工具:連結器(Linker)。
  2. 裝載(Loading)

    • 目的:將可執行文件載入內存,準備執行。
    • 過程:操作系統的裝載器(Loader)將可執行文件載入內存,設置程式的執行環境。
  3. 執行(Execution)

    • 目的:運行可執行程式。
    • 過程:程式計數器指向可執行文件的入口點,開始執行指令。

總結

編譯過程包括詞法分析、語法分析、語義分析、中間代碼生成、代碼優化和目標代碼生成。目的程式生成後,需要經過連結步驟,將多個目標文件和庫組合成一個可執行文件。最後,操作系統將可執行文件載入內存並開始執行。這整個過程保證了從原始碼到最終可執行程式的轉變和運行。

詳解 提供者:Lin Youlin
編譯 連結 載入