跳轉到內容

單元 1.2.2 應用生成

來自 Wikibooks,開放世界中的開放書籍


開源和閉源

[編輯 | 編輯原始碼]

閉源程式是指軟體被編譯後提供給使用者,而不公開原始碼。這可以防止使用者為了個人利益或惡意使用而修改程式碼。它通常以商業方式出售,這意味著它經過了徹底的測試,並且通常附帶免費的支援。

  • 原始碼不可用
  • 使用者購買軟體使用許可證
  • 專門的幫助或聯絡熱線
  • 適應性、糾正性和完善性維護

開源軟體的原始碼公開供下載。這意味著任何人都可以根據需要修改程式碼並幫助進一步開發軟體。最著名的開源專案是 Linux,它是 Android 作業系統的基礎。它通常是免費的,但是一些公司會提供免費軟體,但收取支援費用。開源專案往往是由志願者、編碼員和測試人員組成的團隊開發的。它們可能缺乏閉源程式的完善性和徹底的測試,這可能會使它們感覺有點笨拙。但是,如果有很多人願意為它們做出貢獻,它們將定期更新,並且一個志願者的任何缺陷都可以由另一個志願者彌補。

  • 原始碼可用
  • 使用者可以修改、修改、學習或分享
  • 通常擁有龐大的開發者群體
  • 通常免費


一家遊戲公司決定釋出一款新的影片遊戲主機。該主機將使用名為 Linux 的作業系統的修改版本。

Linux 是開源的。

解釋 Linux 開源將如何使遊戲公司受益。

[2]

答案


這意味著他們需要的許多核心功能已經可用(1),因此公司只需對特定於其系統的功能進行修改/新增(1),從而節省時間和金錢(1)。


實用程式

[編輯 | 編輯原始碼]

實用程式是一個相對較小的程式,具有單一用途,通常涉及系統維護。例如,防病毒軟體、反垃圾郵件軟體、防火牆、備份軟體、磁碟碎片整理程式、壓縮程式和檔案管理器。


描述以下實用程式軟體示例,並說明如何使用它們。

(i) Hardware driver

描述 [2]

用途 [1]

(ii) Virus checker

描述 [2]

用途 [1]

答案


(i) -Software that is supplied with a piece of peripheral hardware    

-允許硬體和作業系統之間進行通訊  

-將來自一方的命令轉換為另一方可以執行的指令   

用途:-允許裝置與計算機通訊 [3]


(ii) -Software that is loaded permanently in memory    

-它持續檢查系統是否有病毒跡象  

-在後臺執行  

-如果發現有病毒指示,則隔離該檔案  

用途:  

-例如:教師可以使用它來檢查學生匯入的檔案中是否存在病毒   

-保持系統無病毒   

-如果發現病毒,則刪除/隔離 [3]


翻譯器

[編輯 | 編輯原始碼]

翻譯器將原始碼轉換為目的碼,同時檢測原始碼中的錯誤。

原始碼

[編輯 | 編輯原始碼]

用高階語言(如 Python、Basic、C++ 或 Ruby)編寫的程式。這些語言允許在自然語言和機器程式碼之間建立一箇中間橋樑 - 這使得開發更容易。

  • 但是,計算機無法執行原始檔
  • 它需要將其翻譯成機器程式碼

目的碼

[編輯 | 編輯原始碼]

一旦程式被轉換為機器程式碼,它就被稱為目標程式,由目的碼組成。目標/機器程式碼和彙編程式碼之間存在一一對應關係。每個操作碼都有一個機器和彙編程式碼等效項。此規則的唯一例外是標籤,標籤是在執行時建立的,因為實際位置在翻譯中替換了標籤。

直譯器

[編輯 | 編輯原始碼]

直譯器一次翻譯並執行一行/一條程式碼語句。直譯器在翻譯包含錯誤的行時會報告錯誤,然後停止解釋並指示錯誤的位置。每次執行程式時,都必須存在直譯器。由於翻譯需要時間並且某些行被翻譯多次(例如,如果它們位於迴圈中),因此程式執行速度會變慢。直譯器通常用於程式開發,以便在不為每個測試編譯程式的情況下查詢錯誤。


解釋為什麼在編寫高階語言程式時,直譯器可能比編譯器更受青睞作為翻譯器。[5]

答案


  • 整個程式尚未編寫...
  • 因此可能無法編譯
  • 需要進行測試...
  • 診斷將更加完整
  • 可以執行各個片段...
  • 允許隔離錯誤
  • 在進行非常小的更改後,將需要執行。
  • 持續編譯整個程式碼非常浪費/耗時(每個最多 5 個)


彙編器

[編輯 | 編輯原始碼]

在彙編程式碼中,操作碼由助記符表示,運算元為十進位制或十六進位制數。彙編器在程式執行之前將其轉換為機器程式碼。它為指令和資料保留儲存空間,並將助記符操作碼替換為機器程式碼。符號地址被替換為數字地址,它建立一個符號表以匹配標籤和地址。它還將檢查語法並提供錯誤診斷。

  1. 獲取每條彙編指令
  2. 檢查語法錯誤
  3. 從操作碼錶中查詢助記符的值
  4. 為標籤分配記憶體地址
  5. 轉換為機器程式碼


(a) 彙編器可以用來生成機器碼。

(i) State the type of language that an assembler processes to produce machine code.  [1]
(ii) Describe machine code.  [3] 
(iii) Describe the steps an assembler performs when producing machine code. [4]

答案


  • 彙編(語言) [1]


  • 二進位制表示/可執行形式
  • 所有可用指令的集合
  • (指令操作)取決於體系結構/處理器設計的位元組資料 [3]


  • 為指令和資料保留儲存空間
  • 用機器碼替換助記符操作碼
  • 用數字地址替換符號地址
  • 建立符號表...
  • ...以匹配標籤和地址
  • 檢查語法/給出錯誤診斷 [4]


編譯器

[編輯 | 編輯原始碼]

編譯器將整個高階程式作為一個單元進行翻譯,並建立一個可執行程式。這可以保護程式免受惡意使用或修改。編譯後的程式是特定於體系結構的,在編譯期間,編譯器可能會報告原始碼中的許多錯誤,其中一些錯誤可能是虛假的。在編譯期間,程式會被最佳化,這將提高其速度並減小其大小。一旦建立了可執行檔案,就不再需要編譯器。

編譯器的工作原理

[編輯 | 編輯原始碼]

編譯過程分為幾個階段,如下所述

1. 詞法分析
[編輯 | 編輯原始碼]
  • 從程式中刪除所有註釋和空白字元。
  • 使用計算機能夠識別的保留字,將高階程式碼轉換為一系列標記。
  • 建立一個符號表,用於跟蹤變數和子程式。
2. 語法分析
[編輯 | 編輯原始碼]
  • 檢查程式碼是否以有效的語法編寫
  • 為使用者編譯錯誤列表,其中程式碼不遵循語言規則
  • 它生成一個抽象語法樹,表示程式。
  • 進行語義分析,編譯器在此階段檢查邏輯錯誤
    • 型別不匹配,例如嘗試將字串字面量賦值給整數
    • 未宣告的變數或訪問超出範圍的變數
    • 在同一範圍內多次宣告同一個變數
    • 使用超出範圍的整數字面量訪問陣列
3. 程式碼生成
[編輯 | 編輯原始碼]
  • 在此,將抽象語法樹中的程式碼轉換為目的碼。
4. 最佳化
[編輯 | 編輯原始碼]
  • 刪除所有不必要的程式碼。
  • 它查詢指令或指令組的任何更有效的替代方案,並替換它們。

http://www.ocr.org.uk/Images/142267-mark-scheme-unit-f453-advanced-computing-theory-january.pdf

在編譯過程中使用標記。描述標記並在哪個階段建立它們。 [3]

在每一行中勾選一個框,以顯示以下每個語句為真的階段。 [6]

答案

從以下三個中選擇:

  • 在詞法分析期間建立
  • 用於保留字/關鍵字
  • 每個標記都是一串二進位制數字...
  • ...固定長度。


連結器、載入器和庫

[編輯 | 編輯原始碼]

庫包含預先編寫的程式碼,程式可以訪問和執行這些程式碼。它們允許開發人員使用預先編寫和預先測試的程式碼,這些程式碼通常旨在處理圖形或密碼學等複雜任務,這些任務通常需要一定的專業知識。它們透過應用程式程式設計介面 (API) 進行訪問和使用。

庫例程是這些預先編寫程式碼片段的示例。它們是預編譯的且無錯誤的,因此可以使用,從而減少程式設計所需的工作量和時間。它們可以多次使用,並且許多是用不同的源語言編寫的。它允許程式設計師利用其他人的專業知識,這意味著您無需不必要地“重新發明輪子”。

連結器

[編輯 | 編輯原始碼]

連結器的目的是將任何庫中使用的程式碼包含到最終程式中。它們可以是靜態的或動態的;靜態連結器將程式碼直接合併到可執行檔案中,這會大大增加其大小。動態連結器僅在執行時連結到程式碼,因為它儲存在程式的計算機上,從而減小了可執行檔案的大小。

載入器

[編輯 | 編輯原始碼]

載入器是作業系統的一部分,負責將程式及其依賴項(如動態連結庫)載入到記憶體中。它在程式執行時處理地址。


程式將在計算機系統上執行。

解釋以下內容在準備程式執行時的作用。

(i) 連結器

(ii) 載入器

答案


(i)

  • 用於組合已經編譯的過程...
  • 生成可執行檔案
  • 處理從主程式到其他(預編譯)模組的外部引用

(ii)

  • 將目的碼/可執行程式碼複製到...
  • 主存,準備執行
  • 處理定址異常/可重定位地址

(每條一行,最多 4 條)

[4]

華夏公益教科書