Пример #1
0
        private static void add_rm32_imm8(Emulator emu, ModRM modrm)
        {
            UInt32 rm32 = modrm.get_rm32(emu);
            UInt32 imm8 = (UInt32)emu.getSignedCode8(0);

            emu.eip += 1;
            modrm.set_rm32(emu, rm32 + imm8);
        }
Пример #2
0
        static void cmp_rm32_imm8(Emulator emu, ModRM modrm)
        {
            UInt32 rm32 = modrm.get_rm32(emu);
            UInt32 imm8 = (UInt32)emu.getSignedCode8(0);

            emu.eip += 1;
            UInt64 result = (UInt64)rm32 - (UInt64)imm8;

            emu.update_eflags_sub(rm32, imm8, result);
        }
Пример #3
0
        // opcode 0xEB
        public static void short_jump(Emulator emu)
        {
            SByte diff = (SByte)emu.getSignedCode8(1);

            emu.eip += (UInt32)(diff + 2);
        }
Пример #4
0
        // opcode 0x7E
        public static void jle(Emulator emu)
        {
            int diff = emu.eflags.HasFlag(Eflags.ZERO) || (emu.eflags.HasFlag(Eflags.SIGN) != emu.eflags.HasFlag(Eflags.OVERFLOW)) ? emu.getSignedCode8(1) : 0;

            emu.eip += (uint)(diff + 2);
        }
Пример #5
0
        // opcode 0x79
        public static void jns(Emulator emu)
        {
            int diff = emu.eflags.HasFlag(Eflags.SIGN) ? 0 : emu.getSignedCode8(1);

            emu.eip += (uint)(diff + 2);
        }
Пример #6
0
        // opcode 0x74
        public static void jz(Emulator emu)
        {
            int diff = emu.eflags.HasFlag(Eflags.ZERO) ? emu.getSignedCode8(1) : 0;

            emu.eip += (uint)(diff + 2);
        }