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); }
public static OpcodeEncoder AppendRM(this OpcodeEncoder encoder, byte value) { return(encoder.Append3Bits(value)); }
public static OpcodeEncoder AppendRM(this OpcodeEncoder encoder, Register register) { return(encoder.Append3Bits(register.RegisterCode)); }
public static OpcodeEncoder AppendRegister(this OpcodeEncoder encoder, Operand operand) { return(encoder.Append3Bits(operand.Register.RegisterCode)); }