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

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

作り直し途中

x86エミュレータを作り直している途中で、前はどう作ればいいのかわからず、ビット演算とか思いついたまま書いていた。しかし、ビット演算がいろんなところにでてきてしまうので、なんとか整理しようと思い、変更。メソッドの名前がまだ適切な感じではないが、ちょっとすっきりした。以下、修正前と修正後のコード

前のコード

public class MoveReg16SReg implements Instruction{
    public void execute(byte[] buff, int[] registers, VMManager manager){
        int op1 = buff[registers[CS] * 16 + registers[EIP] + 1] & 0xFF;

        int mod = (op1 & 0xC0) >> 6;
        int reg = (op1 & 0x38) >> 3;
        int rm = op1 & 0x07;

        int seg = reg + 9;

        /* 省略(微妙に長いコード) */

        registers[EIP] += 2;
    }
}

今のコード

public class MoveRM16SReg implements Instruction{
    public void execute(VM vm){
        int modrm = vm.getCode8(1);
        int index = VMUtil.getRegOp(modrm);
        int value = vm.getSegReg(index);

        VMUtil.setModRMData(vm, modrm, value);
        vm.nextEIP(2);
    }
}