命令にバグがありそうなので命令を作り直してます。というところ
命令は配列に入れて、配列のopecode番目を実行としている。以前の方法と変わらず
instructions[0x00] = new AddRM8R8(); instructions[0x01] = new AddRMXRX(); instructions[0x02] = new AddR8RM8(); instructions[0x03] = new AddRXRMX(); instructions[0x04] = new AddALImm8(); instructions[0x05] = new AddAXImmX();
命令の実装。以前はmodrmは数値そのままだったが、今回はクラスを作った。某情報処理試験の影響でInstructionとしているが、まぁいいや
public class AddR8RM8 implements Instruction{ public void execute(VM vm){ ModRM modrm = vm.getModRM(); int r8 = modrm.getRegister8(); int rm8 = modrm.getRMValue8(); int result = r8 + rm8; modrm.setRMValue8(result); FlagCheck.addCheck(r8, rm8, result, vm.getEFlags(), 8); vm.addEIP(2); } }