Skip to content

Commit

Permalink
adding the byteToMnemonicsString() method that takes bytecode and sto…
Browse files Browse the repository at this point in the history
…res mnemonics as a String
  • Loading branch information
xersky committed Dec 21, 2023
1 parent 79cae99 commit 96a33df
Show file tree
Hide file tree
Showing 2 changed files with 135 additions and 3 deletions.
6 changes: 4 additions & 2 deletions Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,11 @@ public static void main(String[] args) {

//vm.byteToMnemonics(summationOfTwentyThreeByteArray);

List<String> mnemonics = vm.byteToMnemonicsArray(summationOfTwentyThreeByteArray);
/* List<String> mnemonics = vm.byteToMnemonicsArray(summationOfTwentyThreeByteArray);
for (String s : mnemonics) {
System.out.println(s);
}
} */

System.out.println(vm.byteToMnemonicsString(summationOfTwentyThreeByteArray));
}
}
132 changes: 131 additions & 1 deletion VirtualMachine.java
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,129 @@ public List<String> byteToMnemonicsArray(byte[] byteCode) {
return mnemonics;
}

public String byteToMnemonicsString(byte[] byteCode) {

StringBuffer mnemonics = new StringBuffer();

for(int i = 0; i < byteCode.length; i++) {

Instruction opCode = Instruction.fromInt(byteCode[i]);

mnemonics.append(opCode.toString() + " ");

switch (opCode) {

case PUSH:
mnemonics.append(byteToString(byteCode, i + 1, 4));
i += 4;
break;

case POP:
mnemonics.append("\n");
break;

case ADD:
mnemonics.append("\n");
break;

case MUL:
mnemonics.append("\n");
break;

case SUB:
mnemonics.append("\n");
break;

case DIV:
mnemonics.append("\n");
break;

case POW:
mnemonics.append("\n");
break;

case MOD:
mnemonics.append("\n");
break;

case RETURN:
mnemonics.append("\n");
break;

case STOP:
break;

case JUMP:
mnemonics.append(byteToString(byteCode, i + 1, 2));
i += 2;
break;

case CJUMP:
mnemonics.append(byteToString(byteCode, i + 1, 2));
i += 2;
break;

case LOAD:
mnemonics.append(byteToString(byteCode, i + 1, 2));
i += 2;
break;

case STORE:
mnemonics.append(byteToString(byteCode, i + 1, 2));
i += 2;
break;

case DUP:
mnemonics.append(byteToString(byteCode, i + 1, 2));
i += 2;
break;

case SWAP:
mnemonics.append(byteToString(byteCode, i + 1, 2));
i += 2;
break;

case GT:
mnemonics.append("\n");
break;

case LT:
mnemonics.append("\n");
break;

case EQ:
mnemonics.append("\n");
break;

case LHS:
mnemonics.append("\n");
break;

case RHS:
mnemonics.append("\n");
break;

case NEG:
mnemonics.append("\n");
break;

case AND:
mnemonics.append("\n");
break;

case OR:
mnemonics.append("\n");
break;

case XOR:
mnemonics.append("\n");
break;
}
}

return mnemonics.toString().trim();
}

public void byteToMnemonics(byte[] byteCode) {

for(int i = 0; i < byteCode.length; i++) {
Expand Down Expand Up @@ -439,6 +562,13 @@ public void byteToMnemonics(byte[] byteCode) {
}

public void byteDisplayer(byte[] byteCode, int indexOfByteCode, int range) {
for(int i = indexOfByteCode; i < indexOfByteCode + range; System.out.format("%02x ", byteCode[i++]));
for(int i = indexOfByteCode; i < indexOfByteCode + range; System.out.format("%02X ", byteCode[i++]));
}

public String byteToString(byte[] byteCode, int indexOfByteCode, int range) {
StringBuffer bytes = new StringBuffer();
for(int i = indexOfByteCode; i < indexOfByteCode + range; bytes.append(String.format("%02X ", byteCode[i++])));
bytes.append("\n");
return bytes.toString();
}
}

0 comments on commit 96a33df

Please sign in to comment.