Java模仿程序集

时间:2013-07-24 18:39:13

标签: java assembly

编写模拟机器代码的Java程序的最佳方法是什么?例如,我需要创建一系列指令,如加,减,递增,递减等。 假设我正在编写add指令,它接受3个参数/寄存器(在前2个寄存器中添加值并将结果存储在第3个寄存器中)。它是否像编写如下函数一样简单:

int add(int x, int y) {
   int result;
   result = x + y;
   return result; }

我也很开放我离开这里的可能性。任何意见都会非常感激。

3 个答案:

答案 0 :(得分:1)

如果您只想编写与机器指令大致相同的Java代码,我建议您为所有寄存器创建变量,并为大多数指令定义方法(类似于您的建议) 。但这不会“限制”你可以像真机操作指令那样做什么,因为当机器可能不允许时,你可以将BX reg乘以AX reg。

最好是为所有指令定义一个表示类的机器状态(即寄存器和RAM)和类的方法。然后,除非有MUL_BX_AX方法,否则无法将BX乘以AX。许多方法都没有参数(因为寄存器在“不透明”对象中),但有些方法会有“真实”指令接受偏移或其他的参数。 (例如,ADD_AX_IMMED(5)。)

已添加:但是,存在分支问题需要一些额外的想法。 Java没有可以很好地填充角色的GOTO等价物,所以最初(直到你想到更好的东西)你可能必须使用标准的if / else逻辑,等等,测试“条件代码“在机器状态类中。

答案 1 :(得分:0)

模拟汇编的最佳方法是处理原始位和字节并相应地执行操作。

答案 2 :(得分:0)

当然你可以做到这一点,但最重要的是如何打开操作码并进行所有地址字段计算。 通常,地址字段可以包含文字常量,全局地址,寄存器,相对于寄存器的偏移等。 这取决于你是在模拟一台简单的机器还是一台真机。