Example #1
0
        public static OpcodeEncoder AppendSIB(this OpcodeEncoder encoder, int scale, Register index, Register @base)
        {
            Debug.Assert(scale == 1 || scale == 2 || scale == 4 || scale == 8);

            int svalue = 0;

            if (scale == 1)
                svalue = 0;
            else if (scale == 2)
                svalue = 1;
            else if (scale == 4)
                svalue = 2;
            else if (scale == 8)
                svalue = 3;

            // scale
            encoder.AppendBits(svalue, 2);

            // index
            if (index == null)
                encoder.Append3Bits(Bits.b100);
            else
                encoder.AppendRegister(index);

            // base
            if (@base == null)
                encoder.Append3Bits(Bits.b101);
            else
                encoder.AppendRegister(@base);

            return encoder;
        }
Example #2
0
 public static OpcodeEncoder AppendRM(this OpcodeEncoder encoder, Register register)
 {
     return encoder.Append3Bits(register.RegisterCode);
 }
Example #3
0
 public static OpcodeEncoder AppendRegister(this OpcodeEncoder encoder, Operand operand)
 {
     return encoder.Append3Bits(operand.Register.RegisterCode);
 }
Example #4
0
 public static OpcodeEncoder AppendRM(this OpcodeEncoder encoder, byte value)
 {
     return encoder.Append3Bits(value);
 }
Example #5
0
 public static OpcodeEncoder AppendRegister(this OpcodeEncoder encoder, int value)
 {
     return encoder.Append3Bits(value);
 }