單元 1.2.2 應用生成
閉源程式是指軟體被編譯後提供給使用者,而不公開原始碼。這可以防止使用者為了個人利益或惡意使用而修改程式碼。它通常以商業方式出售,這意味著它經過了徹底的測試,並且通常附帶免費的支援。
- 原始碼不可用
- 使用者購買軟體使用許可證
- 專門的幫助或聯絡熱線
- 適應性、糾正性和完善性維護
開源軟體的原始碼公開供下載。這意味著任何人都可以根據需要修改程式碼並幫助進一步開發軟體。最著名的開源專案是 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 個)
在彙編程式碼中,操作碼由助記符表示,運算元為十進位制或十六進位制數。彙編器在程式執行之前將其轉換為機器程式碼。它為指令和資料保留儲存空間,並將助記符操作碼替換為機器程式碼。符號地址被替換為數字地址,它建立一個符號表以匹配標籤和地址。它還將檢查語法並提供錯誤診斷。
- 獲取每條彙編指令
- 檢查語法錯誤
- 從操作碼錶中查詢助記符的值
- 為標籤分配記憶體地址
- 轉換為機器程式碼
(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]
編譯器將整個高階程式作為一個單元進行翻譯,並建立一個可執行程式。這可以保護程式免受惡意使用或修改。編譯後的程式是特定於體系結構的,在編譯期間,編譯器可能會報告原始碼中的許多錯誤,其中一些錯誤可能是虛假的。在編譯期間,程式會被最佳化,這將提高其速度並減小其大小。一旦建立了可執行檔案,就不再需要編譯器。
編譯過程分為幾個階段,如下所述
- 從程式中刪除所有註釋和空白字元。
- 使用計算機能夠識別的保留字,將高階程式碼轉換為一系列標記。
- 建立一個符號表,用於跟蹤變數和子程式。
- 檢查程式碼是否以有效的語法編寫
- 為使用者編譯錯誤列表,其中程式碼不遵循語言規則
- 它生成一個抽象語法樹,表示程式。
- 進行語義分析,編譯器在此階段檢查邏輯錯誤
- 型別不匹配,例如嘗試將字串字面量賦值給整數
- 未宣告的變數或訪問超出範圍的變數
- 在同一範圍內多次宣告同一個變數
- 使用超出範圍的整數字面量訪問陣列
- 在此,將抽象語法樹中的程式碼轉換為目的碼。
- 刪除所有不必要的程式碼。
- 它查詢指令或指令組的任何更有效的替代方案,並替換它們。
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]
