TUP.AsmResolver.ASM.x86Disassembler.DecodeRegisterPair C# (CSharp) Méthode

DecodeRegisterPair() private méthode

private DecodeRegisterPair ( x86Instruction instruction, byte registerToken, x86Register &register1, x86Register &register2 ) : void
instruction x86Instruction
registerToken byte
register1 x86Register
register2 x86Register
Résultat void
        internal void DecodeRegisterPair(x86Instruction instruction, byte registerToken, out x86Register register1, out x86Register register2)
        {
            byte registerToken1 = (byte)(registerToken >> 4 << 4); // high bits.
            byte registerToken2 = (byte)(registerToken - registerToken1); // lower bits.

            while (registerToken1 >= 0x40)
                registerToken1 -= 0x40;
            registerToken1 /= 8;
            if (registerToken2 > 0x7)
            {
                registerToken2 -= 8;
                registerToken1++;
            }

            switch (instruction.OpCode.OperandType)
            {
                case x86OperandType.Multiple16Register:
                    // add bit16 mask
                    registerToken1 |= (byte)x86Register.Bit16Mask;
                    registerToken2 |= (byte)x86Register.Bit16Mask;
                    break;
                case x86OperandType.Multiple32Or8Register:
                    // Not sure if right or not
                    byte mask1;
                    byte mask2;
                    GetDoubleRegisterMask(registerToken, out mask1, out mask2);
                    registerToken1 |= mask1;
                    registerToken2 |= mask2;
                    break;
                case x86OperandType.Multiple32Register:
                    // do nothing, normal registers are used.
                    break;

            }
            // notice inverted registers.
            register2 = (x86Register)registerToken1;
            register1 = (x86Register)registerToken2;
        }