跳轉到內容

建立虛擬機器/介紹

來自華夏公益教科書,開放的書籍,開放的世界

本書是一本關於建立多種不同型別虛擬機器的教程。其目的是展示虛擬機器設計和實現的基本原理。作者將盡力使程式程式碼簡潔易懂。

本書不涉及的內容

本書假設您具有一定的程式設計經驗,並瞭解 二進位制數十六進位制表示法 的基礎知識。熟悉一個 CPU 或其他 CPU 的 機器碼組合語言 程式設計也將有所幫助,但並非嚴格必要。事實上,我發現研究虛擬機器是學習組合語言的有效方法。

所需軟體

[編輯 | 編輯原始碼]

為了編譯和執行示例,您需要在計算機上安裝某些軟體。

對於 C 語言中的暫存器虛擬機器,您需要有一個基本的 C 編譯器(C++ 編譯器也可以正常工作)。

  • Windows 使用者:我推薦 Quincy。它是免費的,易於使用。
  • Linux 使用者:如果您的系統中還沒有安裝 GCC,請安裝它。Code::Blocks 也可以正常工作。
    • Debian(及衍生版本)使用者開啟命令列,以 root 使用者身份登入,並輸入 apt-get install gcc
  • Mac 使用者:從您計算機附帶的額外磁碟或 透過 AppStore 安裝 Xcode 軟體包,免費。

對於 Swift 語言中的暫存器虛擬機器,您需要有一個 Swift 直譯器。

  • Mac 使用者:安裝 Xcode(免費)。使用直譯器的最簡單方法是將程式碼貼上到一個新的“遊樂場”中。
  • 其他平臺:2015 年 6 月,Apple 宣佈將“在今年晚些時候將 Swift 開源”。由於 Swift 語言中的暫存器虛擬機器沒有使用任何 Foundation、Cocoa 或 UIKit,因此它應該可以在任何符合標準的語言移植版本中執行。

對於 Java 語言中的棧暫存器虛擬機器,您需要有一個相當新的 Java 編譯器。

對於 Erlang 語言中的暫存器虛擬機器,您需要安裝 Erlang。

  • Windows 使用者
  • Linux 使用者
  • Mac 使用者:(1) 安裝 MacPorts,(2) 安裝 Erlang

術語和定義

[編輯 | 編輯原始碼]

執行和執行

[編輯 | 編輯原始碼]

當計算機遵循程式指令時,據說它正在執行程式。執行在這種情況下的另一個術語是執行執行這個詞在這種情況下的意思是執行使發生實施。計算機程式設計師也談論殺死或終止程式,但在這種情況下,永遠不會使用執行這個詞。

我們從 0 開始計數

[編輯 | 編輯原始碼]

如果您做過任何 Java、C 或 C++ 程式設計,您會注意到,當程式進行任何計數時,它通常從 0 開始計數。我們將在這幾個程式示例中做同樣的事情,不是因為慣例,而是因為必要性。一些高階語言鼓勵(或要求)從 0 開始計數,因為它們基於要求從 0 開始計數的機器語言。其原因與暫存器索引有關,隨著您閱讀本書,這一點應該會變得明瞭。

單詞是數字

[編輯 | 編輯原始碼]

在編寫像這樣低級別的程式時,程式設計師經常談論單詞單詞在這種情況下的意思是數字,但它缺乏 基數序數 在通常的數字意義上的含義。相反,一個數字單詞包含 詞典學 資訊。單詞通常用 十六進位制 表示法來寫。

其他術語

[編輯 | 編輯原始碼]

在我們繼續之前,我認為最好就該領域中一些容易混淆或被誤用的術語達成共識。這與其說是為了強加我的意志於你,不如說是為了建立一個語境。

抽象機器
一些機器的定義,通常只存在於“紙面上”。
虛擬機器
抽象機器的軟體實現。
模擬器
真實機器的軟體實現。

(自言自語:我認為這可能應該移到詞彙表中並進行擴充套件。)

華夏公益教科書