解码java

时间:2015-09-30 20:28:07

标签: java cpu-registers opcode vm-implementation instructions

我试图编写一个程序来模拟Java中的虚拟机以进行分配。它将是一个基于寄存器的VM,显然会存储和执行大量指令。我遇到了如何将机器指令解码为高级java语言的问题。

我在网上搜索了一些例子,比如下面的例子,但是他们只写了C,我现在还没有足够的时间学习。

unsigned program[] = { 0x1064, 0x11C8, 0x2201, 0x0000 };

void decode( int instr )
{
  instrNum = (instr & 0xF000) >> 12;
  reg1     = (instr & 0xF00 ) >>  8;
  reg2     = (instr & 0xF0  ) >>  4;
  reg3     = (instr & 0xF   );
  imm      = (instr & 0xFF  );
}

有点明白这个C代码正在屏蔽位以检索所需的int。但是我如何在Java中实现它呢?如何将指令分解为操作数和寄存器,使其看起来像这样:

int instr = 0x201A 

int opcode = 2
int reg0 = 0
int constant = 1A 

1 个答案:

答案 0 :(得分:4)

Java支持与C相同的按位运算符。

HashMultimap

请参阅文档:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html