c - 我将如何创建自己的虚拟机?

标签 c assembly x86 virtualization

我想知道如何创建一个以 Intel 16 位系统为模型的最小虚拟机。这将是我的第一个实际的 C 项目,我的大部分代码都是 100 行或更少,但我掌握了核心基础知识,阅读了 K&R,并了解事情应该如何工作,所以这几乎是一个斗智斗勇的考验。

任何人都可以指导我如何进行此操作的文档、工具、教程或简单的旧提示/指针吗?到目前为止,我知道我需要某个地方来存储数据、某种 CPU 和某种东西充当中断 Controller 的机制。

我这样做是为了学习:系统内部结构、ASM 内部结构和 C——我想在一个项目中学习的计算的三个方面。

请不要告诉我做一些更简单的事情 - 那只会很烦人。 :)

感谢您的阅读,并希望能够写作!

最佳答案

虚拟机分为两类:一次解释代码指令的虚拟机和将代码编译为 native 指令的虚拟机(例如“JIT”)。

解释类别通常围绕指令执行循环构建,使用 switch 语句、计算的 goto 或函数指针来确定如何执行每条指令。

有一个有趣的平台,因其简单和有趣而值得研究:Corewars。

Corewars是一款编程挑战游戏,用“Redcode”编写的程序在 MARS VM 上运行。有很多MARS VM s,通常用 C 编写。

它也启发了8086-based版本,其中用 8086 汇编程序编写的程序进行战斗。

关于c - 我将如何创建自己的虚拟机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1410499/

相关文章:

x86 - x86 cpu有什么样的地址指令?

c - 带动态分配的 MPI 矩阵乘法 : Seg. 故障

c - C 中的数组语法

c - -Xassembler 和 -Xpreprocessor 示例

assembly - 在编译器中实现闭包

linux - 通过用执行相同工作的另一条指令替换一条指令而导致的段错误。为什么?

assembly - LSD 能否从检测到的循环的下一次迭代中发出 uOP?

c - 阅读汇编中的数学函数

c - 将提交推送到 GitHub

ios - 使用最新的 iOS SDK 编译时,libcurl 在 iOS 9 上崩溃