private static byte ComputeRegOrMemToken(X86Operand operand)
{
// Mechanism:
// http://ref.x86asm.net/coder32.html#modrm_byte_32
// ModR/M byte:
// mod | reg/mem | (reg2)
// -----+---------+-------
// 7 6 | 5 4 3 | (2 1 0)
var modifier = DetermineRegOrMemModifier(operand);
var token = (byte)((byte)modifier << 6);
if (operand.ScaledIndex != null)
token |= ComputeRegisterToken(X86Register.Esp);
else if (operand.Value is X86Register)
token |= ComputeRegisterToken((X86Register)operand.Value);
else
return ComputeRegisterToken(X86Register.Ebp);
return token;
}