2015-09-30 3 views
-1

J'essaye d'écrire un programme qui simule une machine virtuelle en Java pour une affectation. Ce sera une machine virtuelle basée sur le registre qui, évidemment, stocke et exécute de nombreuses instructions. J'ai un problème avec la façon de décoder les instructions de la machine en langage java de haut niveau.Décoder une instruction de mots dans Java

J'ai cherché en ligne et j'ai trouvé quelques exemples, comme celui ci-dessous, mais ils ne sont écrits qu'en C, ce que je n'ai pas assez de temps pour apprendre en ce moment.

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 ); 
} 

Je sorte de comprendre que ce code C est des bits de masquage pour récupérer l'int désiré. Mais comment puis-je l'implémenter en Java? Comment puis-je réduire une instruction dans opérandes et les registres de sorte qu'il ressemble à ceci:

int instr = 0x201A 

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

https: //docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html Honnêtement, la plupart de ce code devrait fonctionner. – CollinD

+0

Je ne google pas assez fort! Merci, c'est parfait. – rjw0924

Répondre