跳转到内容

创建虚拟机/介绍

来自维基教科书,开放的书籍,开放的世界

本书是一本关于创建多种不同类型虚拟机的教程。其目的是展示虚拟机设计和实现的基本原理。作者将尽力使程序代码简洁易懂。

本书不涉及的内容

本书假设您具有一定的编程经验,并了解 二进制数十六进制表示法 的基础知识。熟悉一个 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 开始计数的机器语言。其原因与寄存器索引有关,随着您阅读本书,这一点应该会变得明了。

单词是数字

[编辑 | 编辑源代码]

在编写像这样低级别的程序时,程序员经常谈论单词单词在这种情况下的意思是数字,但它缺乏 基数序数 在通常的数字意义上的含义。相反,一个数字单词包含 词典学 信息。单词通常用 十六进制 表示法来写。

其他术语

[编辑 | 编辑源代码]

在我们继续之前,我认为最好就该领域中一些容易混淆或被误用的术语达成共识。这与其说是为了强加我的意志于你,不如说是为了建立一个语境。

抽象机器
一些机器的定义,通常只存在于“纸面上”。
虚拟机
抽象机器的软件实现。
模拟器
真实机器的软件实现。

(自言自语:我认为这可能应该移到词汇表中并进行扩展。)

华夏公益教科书