背景信息:最终,我想写一个真机的模拟器,比如原来的任天堂或Gameboy。然而,我决定我需要从一个简单得多的地方开始。我的计算机科学顾问/教授向我提供了一个非常简单的假想处理器的规格,他首先创建了该处理器以进行模拟。有一个寄存器(累加器)和 16 个操作码。每条指令由 16 位组成,其中前 4 位包含操作码,其余为操作数。指令以二进制格式的字符串形式给出,例如“0101 0101 0000 1111”。
我的问题:在 C++ 中,解析处理指令的最佳方法是什么?请记住我的最终目标。以下是我考虑过的几点:
我不能只是在阅读指令时处理和执行指令,因为代码是自我修改的:一条指令可以改变后面的指令。我能看到解决此问题的唯一方法是存储所有更改并为每条指令检查是否需要应用更改。这可能会导致与每条指令的执行进行大量比较,这是不好的。所以,我想我必须以另一种格式重新编译指令。
尽管我可以将操作码解析为字符串并对其进行处理,但在某些情况下,必须将整个指令视为一个数字。例如,递增操作码甚至可以修改指令的操作码部分。
如果我要将指令转换为整数,我不确定如何仅解析 int 的操作码或操作数部分。即使我将每条指令重新编译为三部分,整个指令为 int,操作码为 int,操作数为 int,这仍然无法解决问题,因为我可能必须递增整个指令然后解析受影响的操作码或操作数。此外,我是否必须编写一个函数来执行此转换,或者是否有一些 C++ 库具有将“二进制格式”的字符串转换为整数的函数(如 Java 中的 Integer.parseInt(str1, 2))?
另外,我希望能够执行移位等操作。我不确定如何实现,但这可能会影响我实现此重新编译的方式。
感谢您提供的任何帮助或建议!