private void SecondPass()
        {
            MachineCode mc = new MachineCode();
            int previousIndex = 0;
            for(int i = 0 ; i < _code.Count ; i++)
            {
                _code[i].SecondPass(this);

                if (_code[i].Relocation != null && _code[i].Relocation.Count >= 1 )
                {
                    mc.MRecord.AddRange(_code[i].Relocation);
                }
                if (_code[i].Code != null && _code[i].Code[0] != "")
                {
                    if (_code[i].Code[0][0] == 'H' || _code[i].Code[0][0] == 'E' ||
                        _code[i].Code[0][0] == 'D' || _code[i].Code[0][0] == 'R' )
                    {
                        if (_previousOutputAddress != NoAddress)
                        {
                            mc.TRecord[mc.TRecord.Count - 1] += string.Format("{0:X}", _code[i - 1].Location - _previousOutputAddress + _code[i - 1].Length).PadLeft(2, '0');
                            for (int j = previousIndex; j < i; j++)
                            {
                                mc.TRecord[mc.TRecord.Count - 1] += _code[j].Code[0];
                            }
                            _previousOutputAddress = NoAddress;
                        }
                        if (_code[i].Code[0][0] == 'H')
                        {
                            mc.HRecord = _code[i].Code[0];
                        }
                        else if (_code[i].Code[0][0] == 'E')
                        {
                            mc.ERecord = _code[i].Code[0];
                        }
                        else if (_code[i].Code[0][0] == 'D')
                        {
                            mc.DRecord = _code[i].Code[0];
                        }
                        else if (_code[i].Code[0][0] == 'R')
                        {
                            mc.RRecord = _code[i].Code[0];
                        }
                    }
                    else
                    {
                        _code[i].Code[0] = _code[i].Code[0].Substring(1);
                        if (_previousOutputAddress == NoAddress)
                        {
                            mc.TRecord.Add("");
                            _previousOutputAddress = _code[i].Location;
                            mc.TRecord[mc.TRecord.Count-1] += string.Format("T{0}", string.Format("{0:X}", _previousOutputAddress).PadLeft(6, '0'));
                            previousIndex = i;
                        }
                        else if ((_code[i-1].Location - _previousOutputAddress + _code[i-1].Length) + _code[i].Length >= 0x20 ||
                            _code[previousIndex].BlockLocation != _code[i].BlockLocation)
                        {
                            mc.TRecord[mc.TRecord.Count-1] += string.Format("{0:X}", _code[i-1].Location - _previousOutputAddress + _code[i-1].Length).PadLeft(2, '0');
                            for (int j = previousIndex; j < i; j++)
                            {
                                mc.TRecord[mc.TRecord.Count-1] += _code[j].Code[0];
                            }
                            mc.TRecord.Add("");
                            _previousOutputAddress = _code[i].Location;
                             mc.TRecord[mc.TRecord.Count-1] += string.Format("T{0}", string.Format("{0:X}", _previousOutputAddress).PadLeft(6, '0'));
                            previousIndex = i;
                        }
                    }
                }
                else
                {
                    if (_code[i].Length > 0 || _code[previousIndex].BlockLocation != _code[i].BlockLocation)
                    {
                        if (_previousOutputAddress != NoAddress)
                        {
                            mc.TRecord[mc.TRecord.Count - 1] += string.Format("{0}", string.Format("{0:X}", _code[i - 1].Location - _previousOutputAddress + _code[i - 1].Length).PadLeft(2, '0'));
                            for (int j = previousIndex; j < i; j++)
                            {
                                mc.TRecord[mc.TRecord.Count - 1] +=  _code[j].Code[0];
                            }
                            _previousOutputAddress = NoAddress;
                        }
                    }
                }
            }
            mc.Write(_codeWriter);
        }