public Expression BuildInstructionSpaceExpression(IEnumerable<InstructionInfo> instructions,
                                                   IProgramControlExpressionLibrary programControlExpressionLibrary,
                                                   IInstructionExpressionBuilder instructionBuilder,
                                                   InstructionSpace instructionSpace)
 {
     if (instructionSpace.Prefix == null)
         return BuildSwitch(instructions, programControlExpressionLibrary, instructionBuilder, String.Empty);
     else
         return BuildSwitch(instructions, programControlExpressionLibrary, instructionBuilder, instructionSpace.Prefix);
 }
        public Expression BuildInstructionSpaceExpression(IEnumerable<InstructionInfo> instructions, 
                                                          IProgramControlExpressionLibrary programControlExpressionLibrary, 
                                                          IInstructionExpressionBuilder instructionBuilder, 
                                                          InstructionSpace instructionSpace)
        {
            List<SwitchCase> switchCases = new List<SwitchCase>();

            foreach (var info in instructions)
            {
                if (String.IsNullOrEmpty(info.Prefix))
                    continue;

                if (info.Prefix.StartsWith(instructionSpace.Prefix))
                {
                    switchCases.Add(
                        Expression.SwitchCase(instructionBuilder.BuildExpression(info),
                            Expression.Constant(info.Opcode))
                    );
                }
            }

            return Expression.Block(
                    // Read index parameter.
                    // index - (index & 0x80) << 1     -  Handles negative indexes.
                    Expression.Assign(programControlExpressionLibrary.ParameterByte2, programControlExpressionLibrary.ReadAndIncrementProgramCounter),
                    Expression.Assign(programControlExpressionLibrary.ParameterByte1,
                            Expression.Subtract(
                                programControlExpressionLibrary.ParameterByte2,
                                Expression.LeftShift(
                                    Expression.And(programControlExpressionLibrary.ParameterByte2, Expression.Constant(0x80)), Expression.Constant(0x01)
                                )
                            )
                        ),

                    Expression.Switch(programControlExpressionLibrary.ReadAndIncrementProgramCounter,
                        Expression.Assign(programControlExpressionLibrary.ParameterByte1, programControlExpressionLibrary.ParameterByte1),
                        switchCases.ToArray())
                );                
        }