建立虛擬機器/介紹
本書是一本關於建立多種不同型別虛擬機器的教程。其目的是展示虛擬機器設計和實現的基本原理。作者將盡力使程式程式碼簡潔易懂。
本書不涉及的內容
本書假設您具有一定的程式設計經驗,並瞭解 二進位制數 和 十六進位制表示法 的基礎知識。熟悉一個 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 編譯器。
- Windows 使用者:從 Sun 的 Java 下載頁面 下載並安裝 Java SE JDK。
- Linux 使用者:您可以使用 OpenJDK,但我建議從 Sun 的 Java 下載頁面 下載並安裝 Java SE JDK。
- Mac 使用者:您應該已經安裝了 Java,或者從 java.com 下載。
對於 Erlang 語言中的暫存器虛擬機器,您需要安裝 Erlang。
- Windows 使用者
- Linux 使用者
- Mac 使用者:(1) 安裝 MacPorts,(2) 安裝 Erlang
當計算機遵循程式指令時,據說它正在執行程式。執行在這種情況下的另一個術語是執行。執行這個詞在這種情況下的意思是執行,使發生或實施。計算機程式設計師也談論殺死或終止程式,但在這種情況下,永遠不會使用執行這個詞。
如果您做過任何 Java、C 或 C++ 程式設計,您會注意到,當程式進行任何計數時,它通常從 0 開始計數。我們將在這幾個程式示例中做同樣的事情,不是因為慣例,而是因為必要性。一些高階語言鼓勵(或要求)從 0 開始計數,因為它們基於要求從 0 開始計數的機器語言。其原因與暫存器索引有關,隨著您閱讀本書,這一點應該會變得明瞭。
在編寫像這樣低級別的程式時,程式設計師經常談論單詞。單詞在這種情況下的意思是數字,但它缺乏 基數 和 序數 在通常的數字意義上的含義。相反,一個數字單詞包含 詞典學 資訊。單詞通常用 十六進位制 表示法來寫。
在我們繼續之前,我認為最好就該領域中一些容易混淆或被誤用的術語達成共識。這與其說是為了強加我的意志於你,不如說是為了建立一個語境。
- 抽象機器
- 一些機器的定義,通常只存在於“紙面上”。
- 虛擬機器
- 抽象機器的軟體實現。
- 模擬器
- 真實機器的軟體實現。
(自言自語:我認為這可能應該移到詞彙表中並進行擴充套件。)