编写模拟机器代码的 Java 程序的最佳方法是什么?例如,我需要创建一系列指令,例如加、减、递增、递减等。假设我正在编写接受 3 个参数/寄存器的加指令(将前 2 个寄存器中的值相加并存储结果是第3个)。是否像编写一个函数一样简单,例如:
int add(int x, int y) {
int result;
result = x + y;
return result; }
我也对我离开这里的可能性持开放态度。任何输入将不胜感激。
如果您只想使用机器指令编写或多或少 1:1 的 Java 代码,我建议您为所有寄存器创建变量并为大多数指令定义方法(类似于您的建议)。但这不会像真正的机器指令那样“限制”你可以做的事情,因为当机器可能不允许时,你可以将 BX reg 乘以 AX reg。
更好的做法是定义一个表示机器状态(即寄存器和 RAM)的类以及该类上所有指令的方法。那么除非有 MUL_BX_AX 方法,否则你不能将 BX 乘以 AX。许多方法没有参数(因为寄存器在“不透明”对象内),但有些方法会有参数,其中“真实”指令将接受偏移量或其他。(例如,ADD_AX_IMMED(5)。)
补充:不过,存在分支问题,这需要一些额外的思考。Java 没有 GOTO 等价物可以很好地扮演这个角色,所以最初(直到你想到更好的东西)你可能不得不使用标准if
/else
逻辑等,在机器状态类中测试“条件代码”。
模拟组装的最佳方法是处理原始位和字节并相应地执行操作。
当然你可以这样做,但最重要的是如何打开操作码并进行所有地址字段计算。通常,地址字段可以包含文字常量、全局地址、寄存器、相对于寄存器的偏移量等。这取决于您模拟的是简单机器还是真实机器。