Java模拟汇编
编写模拟机器代码的Java程序的最佳方法是什么?例如,我需要创建一系列指令,如加法、减法、增量、减量等。 假设我正在编写add指令,它接受3个参数/寄存器(将前2个寄存器中的值相加,并将结果存储在第3个寄存器中)。它是否像编写以下函数那样简单:Java模拟汇编,java,assembly,Java,Assembly,编写模拟机器代码的Java程序的最佳方法是什么?例如,我需要创建一系列指令,如加法、减法、增量、减量等。 假设我正在编写add指令,它接受3个参数/寄存器(将前2个寄存器中的值相加,并将结果存储在第3个寄存器中)。它是否像编写以下函数那样简单: int add(int x, int y) { int result; result = x + y; return result; } 我也有可能在这里偏离了底线。任何输入都将不胜感激。模拟汇编的最佳方法是处理原始位和字节,并相应地
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。许多方法没有参数(因为寄存器在“不透明”对象中),但有些方法有PARM,其中“实”指令将接受偏移量或其他内容。(例如,添加AX IMMED(5)。)
补充道:不过,分支问题需要一些额外的思考。Java没有一个GOTO等价物来很好地填补这个角色,因此最初(直到你想到更好的东西),你可能不得不使用标准的
if
/else
逻辑,等等,在机器状态类中测试“条件代码”。你可以用开关
块来实现指令的操作,在处理参数之前/之后添加内容这取决于您想要支持的操作。如果你想处理跳跃之类的事情,事情会变得复杂得多!您希望模拟哪个cpu?如果你有选择的话,选择一个8位的CPU,比如Z80