public List <DecodedInstruction> Decode(int count = int.MaxValue)
        {
            var decoded = new List <DecodedInstruction>();

            try
            {
                var dasm = arch.CreateDisassembler(memoryArea.CreateLeReader((uint)Offset));

                foreach (var instr in dasm)
                {
                    var len         = instr.Length;
                    var address     = instr.Address.Offset;
                    var instruction = instr.ToString().Replace('\t', ' ');

                    // preference
                    instruction = instruction.Replace(",", ", ");

                    // fix up
                    instruction = ChangeHex(instruction);

                    var sb = new StringBuilder();

                    sb.AppendFormat("{0:x8}", address);
                    sb.Append(' ');
                    sb.Append(BytesToHex(memory, (uint)Offset, len));
                    sb.Append(string.Empty.PadRight(41 - sb.Length, ' '));
                    sb.Append(instruction);

                    decoded.Add(new DecodedInstruction()
                    {
                        Address     = address,
                        Length      = len,
                        Instruction = instruction,
                        Full        = sb.ToString()
                    });

                    count--;

                    if (count == 0)
                    {
                        break;
                    }

                    Offset += (uint)len;
                }

                return(decoded);
            }
            catch
            {
                return(decoded);
            }
        }