マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

命令作り直し

命令にバグがありそうなので命令を作り直してます。というところ


命令は配列に入れて、配列の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);
    }
}