B32assembler代码中的错误 [英] error in B32assembler code

查看:80
本文介绍了B32assembler代码中的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 使用系统;
使用 System.Collections.Generic;
使用 System.ComponentModel;
使用 System.Data;
使用使用System.Drawing;
使用 System.Linq;
使用 System.Text;
使用使用System.Windows.Forms;
命名空间 WindowsForm
{
         公共 部分  fmmainform:表格
{
私有 字符串 SourceProgram;
私有 System.Collections.Hashtable LabelTable;
私有  int  CurrentNdx;
私有  ushort  AsLength;
私有 布尔 IsEnd;
私有  ushort  ExecutionAddress;
        
私有 枚举注册
        {
            未知=  0 ,
            A =  4 ,
            B =  2 ,
            D =  1 ,
            X =  16 ,
            Y =  8 
        }
    
    
      公共 fmmainform()
        {
            InitializeComponent();
            LabelTable =  System.Collections.Hashtable( 50 );
            CurrentNdx =  0 ;
            AsLength =  0 ;
            ExecutionAddress =  0 ;
            IsEnd =  false ;
            SourceProgram = " ;
            txtOrigin_Click.Text = " ;
        }

        私有 无效 btnSourceFile_Click(对象发​​件人,EventArgs e)
        {
             .fdSourceFile.ShowDialog();
             .SourceFileName.Text = fdSourceFile.FileName;
        }
        私有 无效 btnOutputBrowse_Click(对象发​​件人,EventArgs e)
        {
             .fdDestinationFile.ShowDialog();
             .OutputFileName.Text = fdDestinationFile.FileName;
        }
       
        私有 无效 btnAssemble_Click(对象发​​件人,EventArgs e)
        {
            AsLength = Convert.ToUInt16( this  .txtOrigin_Click.Text, 16 );
            System.IO.BinaryWriter输出;
            System.IO.TextReader输入;
            System.IO.FileStream fs = 
            System.IO.FileStream( .OutputFileName.Text,System.IO.FileMode.Create);
            输出=  System.IO.BinaryWriter(fs);
            输入= System.IO.File.OpenText( this  .SourceFileName.Text);
            SourceProgram = input.ReadToEnd();
            input.Close();
            output.Write('  B');
            output.Write('  3');
            output.Write('  2');
            output.Write(Convert.ToUInt16( this  .txtOrigin_Click.Text, 16 )));
            output.Write(( ushort ) 0 );
            解析(输出);
            output.Seek( 5 ,System.IO.SeekOrigin.Begin);
            output.Write(ExecutionAddress);
            output.Close();
            fs.Close();
            MessageBox.Show(" );
          }
    
        
        私有 无效解析(System.IO.BinaryWriter OutputFile)
        {
            CurrentNdx =  0 ;
            同时(IsEnd ==  false )
                LabelScan(OutputFile, true );
            IsEnd =  false ;
            CurrentNdx =  0 ;
            AsLength = Convert.ToUInt16( this  .txtOrigin_Click.Text, 16 );
            同时(IsEnd ==  false )
                LabelScan(OutputFile, false );
        }
        私有 无效 LabelScan(System.IO.BinaryWriter OutputFile, bool 
IsLabelScan)
        {
            如果(字符 .IsLetter(SourceProgram [CurrentNdx]))
            {
                // 必须是标签
                如果(IsLabelScan)LabelTable.Add(GetLabelName(),AsLength);
                同时(SourceProgram [CurrentNdx] == '  \ n' )
                    CurrentNdx ++;
                CurrentNdx ++;
                返回;
            }
            EatWhiteSpaces();
            ReadMneumonic(OutputFile,IsLabelScan);
        }
        私有 无效 ReadMneumonic(System.IO.BinaryWriter OutputFile, bool  IsLabelScan)
        {
            字符串 Mneumonic = " ;
             while (!( char  .IsWhiteSpace(SourceProgram [CurrentNdx])))
            {
                Mneumonic = Mneumonic + SourceProgram [CurrentNdx];
                CurrentNdx ++;
            }
            如果(Mneumonic.ToUpper()== " )InterpretLDX(OutputFile,
            IsLabelScan);
            如果(Mneumonic.ToUpper()== " )InterpretLDA(OutputFile,
            IsLabelScan);
            如果(Mneumonic.ToUpper()== " )InterpretSTA(OutputFile,
            IsLabelScan);
            如果(Mneumonic.ToUpper()== " )
            {
                IsEnd =  true ;
                DoEnd(OutputFile,IsLabelScan); EatWhiteSpaces(); ExecutionAddress =
                 ( ushort )LabelTable [(GetLabelName())]; 返回;
            }
            同时(SourceProgram [CurrentNdx]!= '  \ n' )
            {
                CurrentNdx ++;
            }
            CurrentNdx ++;
        }
        私有 无效 InterpretLDA(System.IO.BinaryWriter OutputFile, bool 
IsLabelScan)
        {
            EatWhiteSpaces();
            如果(SourceProgram [CurrentNdx] == ' #')
            {
                CurrentNdx ++;
                字节 val = ReadByteValue();
                AsLength + =  2 ;
                如果(!IsLabelScan)
                {
                    OutputFile.Write(( byte )0x01);
                    OutputFile.Write(val);
                }
            }
        }
               
               私有 无效 InterpretLDX(System.IO.BinaryWriter OutputFile, bool 
IsLabelScan)
        {
            EatWhiteSpaces();
            如果(SourceProgram [CurrentNdx] == ' #')
            {
                CurrentNdx ++;
                 ushort  val = ReadWordValue();
                AsLength + =  3 ;
                如果(!IsLabelScan)
                {
                    OutputFile.Write(( byte )0x02);
                    OutputFile.Write(val);
                }
            }
        }
        私有 无效 InterpretSTA(System.IO.BinaryWriter OutputFile, bool 
IsLabelScan)
{
EatWhiteSpaces();
如果(SourceProgram [CurrentNdx] == ' ,')
{
寄存器r;
字节 opcode = 0x00;
CurrentNdx ++;
EatWhiteSpaces();
r = ReadRegister();
开关(r)
{
大小写 Registers.X:
操作码= 0x03;
 break ;
}
AsLength + =  1 ;
如果(!IsLabelScan)
{
    OutputFile.Write(opcode);
}
}
}
        私有  void  DoEnd(System.IO.BinaryWriter OutputFile,> bool 
IsLabelScan)
        {
            AsLength ++;
            如果(!IsLabelScan)
            {
                OutputFile.Write(( byte )0x04);
            }
        }
        私有注册ReadRegister()
        {
            寄存器r = Registers.Unknown;
            如果(((SourceProgram [CurrentNdx] == '  X' )||
            (SourceProgram [CurrentNdx] == '  x')r = Registers.X;
            如果(((SourceProgram [CurrentNdx] == '  Y' )||
            (SourceProgram [CurrentNdx] == '  y')r = Registers.Y;
            如果((SourceProgram [CurrentNdx] == '  D' )||
            (SourceProgram [CurrentNdx] == '  d'))r = Registers.D;
            如果((SourceProgram [CurrentNdx] == '  A' )||
            (SourceProgram [CurrentNdx] == '  a'))r = Registers.A;
            如果((SourceProgram [CurrentNdx] == '  B' )||
            (SourceProgram [CurrentNdx] == '  b'))r = Registers.B;
            CurrentNdx ++;
            返回 r;
        }
        私有  ushort  ReadWordValue()
        {
             ushort  val =  0 ;
            布尔 IsHex =  false ;
            字符串 sval = " ;
            如果(SourceProgram [CurrentNdx] == '  $')
            {
                CurrentNdx ++;
                IsHex =  true ;
            }
            同时(字符.IsLetterOrDigit(SourceProgram [CurrentNdx]))
            {
                sval = sval + SourceProgram [CurrentNdx];
                CurrentNdx ++;
            }
            如果(IsHex)
            {
                val = Convert.ToUInt16(sval, 16 );
            }
            其他
            {
                val =  ushort  .Parse(sval);
            }
            返回 val;
        }
        私有 字节 ReadByteValue()
        {
          byte  val =  0 ;
          布尔 IsHex =  false ;
         字符串 sval = " ;
         如果(SourceProgram [CurrentNdx] == '  $')
        {
         CurrentNdx ++;
         IsHex =  true ;
         }
           同时(字符.IsLetterOrDigit(SourceProgram [CurrentNdx]))
           {
            sval = sval + SourceProgram [CurrentNdx];
            CurrentNdx ++;
           }
              如果(IsHex)
              {
               val = Convert.ToByte(sval, 16 );
              }
                 其他
              {
               val = 字节 .Parse(sval);
              }
               返回 val;
           }
        私有 无效 EatWhiteSpaces()
        {
            同时(字符 .IsWhiteSpace(SourceProgram [CurrentNdx]))
            {
                CurrentNdx ++;
            }
        }
        私有 字符串 GetLabelName()
        {
            字符串 lblname = " ;
        
            同时(字符.IsLetterOrDigit(SourceProgram [CurrentNdx]))
            {
                如果(SourceProgram [CurrentNdx] == ' :')
                {
                    CurrentNdx ++;
                     break ;
                }
                lblname = lblname + SourceProgram [CurrentNdx];
                CurrentNdx ++;
            }
            返回 lblname.ToUpper();
        }
        私有 无效 button3_Click(对象发​​件人,EventArgs e)
        {
                        AsLength = Convert.ToUInt16( this  .txtOrigin_Click.Text, 16 );
            System.IO.BinaryWriter输出;
            System.IO.TextReader输入;
            System.IO.FileStream fs = 
            System.IO.FileStream( .OutputFileName.Text,System.IO.FileMode.Create);
            输出=  System.IO.BinaryWriter(fs);
            输入= System.IO.File.OpenText( this  .SourceFileName.Text);
            SourceProgram = input.ReadToEnd();
            input.Close();
            output.Write('  p');
            output.Write('  3');
            output.Write('  2');
            output.Write(Convert.ToUInt16( this  .txtOrigin_Click.Text, 16 )));
            output.Write(( ushort ) 0 );
            解析(输出);
            output.Seek( 5 ,System.IO.SeekOrigin.Begin);
            output.Write(ExecutionAddress);
            output.Close();
            fs.Close();
            MessageBox.Show(" );
        }
        私有 无效 SourceFile_Click_Click(对象发​​件人,EventArgs e)
        {
             .fdSourceFile.ShowDialog();
             .SourceFileName.Text = fdSourceFile.FileName;
        }
        私有 无效 OutputBrowse_Click_Click(对象发​​件人,EventArgs e)
        {
             .fdDestinationFile.ShowDialog();
             .OutputFileName.Text = fdDestinationFile.FileName;
        }
        
    }
} 


这是我的编码错误是在while语句中如何清除getlabelname中的indexoutofbound期望..plz帮助我

[edit]添加了代码块,将我的内容作为纯文本..."选项已禁用-OriginalGriff [/edit]

解决方案

')) { CurrentNdx ++; IsHex = true ; } 同时(字符.IsLetterOrDigit(SourceProgram [CurrentNdx])) { sval = sval + SourceProgram [CurrentNdx]; CurrentNdx ++; } 如果(IsHex) { val = Convert.ToUInt16(sval, 16 ); } 其他 { val = ushort .Parse(sval); } 返回 val; } 私有 字节 ReadByteValue() { byte val = 0 ; 布尔 IsHex = false ; 字符串 sval = " ; 如果(SourceProgram [CurrentNdx] == '

') { CurrentNdx ++; IsHex = true ; } 同时(字符.IsLetterOrDigit(SourceProgram [CurrentNdx])) { sval = sval + SourceProgram [CurrentNdx]; CurrentNdx ++; } 如果(IsHex) { val = Convert.ToByte(sval, 16 ); } 其他 { val = 字节 .Parse(sval); } 返回 val; } 私有 无效 EatWhiteSpaces() { 同时(字符 .IsWhiteSpace(SourceProgram [CurrentNdx])) { CurrentNdx ++; } } 私有 字符串 GetLabelName() { 字符串 lblname = " ; 同时(字符.IsLetterOrDigit(SourceProgram [CurrentNdx])) { 如果(SourceProgram [CurrentNdx] == ' :') { CurrentNdx ++; break ; } lblname = lblname + SourceProgram [CurrentNdx]; CurrentNdx ++; } 返回 lblname.ToUpper(); } 私有 无效 button3_Click(对象发​​件人,EventArgs e) { AsLength = Convert.ToUInt16( this .txtOrigin_Click.Text, 16 ); System.IO.BinaryWriter输出; System.IO.TextReader输入; System.IO.FileStream fs = System.IO.FileStream( .OutputFileName.Text,System.IO.FileMode.Create); 输出= System.IO.BinaryWriter(fs); 输入= System.IO.File.OpenText( this .SourceFileName.Text); SourceProgram = input.ReadToEnd(); input.Close(); output.Write(' p'); output.Write(' 3'); output.Write(' 2'); output.Write(Convert.ToUInt16( this .txtOrigin_Click.Text, 16 ))); output.Write(( ushort ) 0 ); 解析(输出); output.Seek( 5 ,System.IO.SeekOrigin.Begin); output.Write(ExecutionAddress); output.Close(); fs.Close(); MessageBox.Show(" ); } 私有 无效 SourceFile_Click_Click(对象发​​件人,EventArgs e) { .fdSourceFile.ShowDialog(); .SourceFileName.Text = fdSourceFile.FileName; } 私有 无效 OutputBrowse_Click_Click(对象发​​件人,EventArgs e) { .fdDestinationFile.ShowDialog(); .OutputFileName.Text = fdDestinationFile.FileName; } } }


这是我的编码错误,是在while语句中如何清除getlabelname中的indexoutofbound期望..plz帮助我

[edit]已添加代码块,将我的内容作为纯文本..."选项已禁用-OriginalGriff [/edit]


出现此问题是因为您没有检查CurrentNdx确保您没有用完数组.
每次增加它时,都需要检查它是否不超过可用空间.

顺便说一句:不要仅仅发布整个程序:它被称为代码转储,被认为是懒惰而粗鲁的.请以后再发布相关的代码片段.这将帮助我们为您提供帮助,因为我们无需费心查看格式错误的代码即可找到相关部分.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsForm
{
         public partial class fmmainform : Form
{
private string SourceProgram;
private System.Collections.Hashtable LabelTable;
private int CurrentNdx;
private ushort AsLength;
private bool IsEnd;
private ushort ExecutionAddress;
        
private enum Registers
        {
            Unknown = 0,
            A = 4,
            B = 2,
            D = 1,
            X = 16,
            Y = 8
        }
    
    
      public fmmainform()
        {
            InitializeComponent();
            LabelTable = new System.Collections.Hashtable(50);
            CurrentNdx = 0;
            AsLength = 0;
            ExecutionAddress = 0;
            IsEnd = false;
            SourceProgram = "";
            txtOrigin_Click.Text = "1000";
        }

        private void btnSourceFile_Click(object sender, EventArgs e)
        {
            this.fdSourceFile.ShowDialog();
            this.SourceFileName.Text = fdSourceFile.FileName;
        }
        private void btnOutputBrowse_Click(object sender, EventArgs e)
        {
            this.fdDestinationFile.ShowDialog();
            this.OutputFileName.Text = fdDestinationFile.FileName;
        }
       
        private void btnAssemble_Click(object sender, EventArgs e)
        {
            AsLength = Convert.ToUInt16(this.txtOrigin_Click.Text, 16);
            System.IO.BinaryWriter output;
            System.IO.TextReader input;
            System.IO.FileStream fs = new
            System.IO.FileStream(this.OutputFileName.Text, System.IO.FileMode.Create);
            output = new System.IO.BinaryWriter(fs);
            input = System.IO.File.OpenText(this.SourceFileName.Text);
            SourceProgram = input.ReadToEnd();
            input.Close();
            output.Write('B');
            output.Write('3');
            output.Write('2');
            output.Write(Convert.ToUInt16(this.txtOrigin_Click.Text, 16));
            output.Write((ushort)0);
            Parse(output);
            output.Seek(5, System.IO.SeekOrigin.Begin);
            output.Write(ExecutionAddress);
            output.Close();
            fs.Close();
            MessageBox.Show("Done!");
          }
    
        
        private void Parse(System.IO.BinaryWriter OutputFile)
        {
            CurrentNdx = 0;
            while (IsEnd == false)
                LabelScan(OutputFile, true);
            IsEnd = false;
            CurrentNdx = 0;
            AsLength = Convert.ToUInt16(this.txtOrigin_Click.Text, 16);
            while (IsEnd == false)
                LabelScan(OutputFile, false);
        }
        private void LabelScan(System.IO.BinaryWriter OutputFile, bool
IsLabelScan)
        {
            if (char.IsLetter(SourceProgram[CurrentNdx]))
            {
                // Must be a label
                if (IsLabelScan) LabelTable.Add(GetLabelName(), AsLength);
                while (SourceProgram[CurrentNdx] == '\n')
                    CurrentNdx++;
                CurrentNdx++;
                return;
            }
            EatWhiteSpaces();
            ReadMneumonic(OutputFile, IsLabelScan);
        }
        private void ReadMneumonic(System.IO.BinaryWriter OutputFile, bool IsLabelScan)
        {
            string Mneumonic = "";
            while (!(char.IsWhiteSpace(SourceProgram[CurrentNdx])))
            {
                Mneumonic = Mneumonic + SourceProgram[CurrentNdx];
                CurrentNdx++;
            }
            if (Mneumonic.ToUpper() == "LDX") InterpretLDX(OutputFile,
            IsLabelScan);
            if (Mneumonic.ToUpper() == "LDA") InterpretLDA(OutputFile,
            IsLabelScan);
            if (Mneumonic.ToUpper() == "STA") InterpretSTA(OutputFile,
            IsLabelScan);
            if (Mneumonic.ToUpper() == "END")
            {
                IsEnd = true;
                DoEnd(OutputFile, IsLabelScan); EatWhiteSpaces(); ExecutionAddress =
                 (ushort)LabelTable[(GetLabelName())]; return;
            }
            while (SourceProgram[CurrentNdx] != '\n')
            {
                CurrentNdx++;
            }
            CurrentNdx++;
        }
        private void InterpretLDA(System.IO.BinaryWriter OutputFile, bool
IsLabelScan)
        {
            EatWhiteSpaces();
            if (SourceProgram[CurrentNdx] == '#')
            {
                CurrentNdx++;
                byte val = ReadByteValue();
                AsLength += 2;
                if (!IsLabelScan)
                {
                    OutputFile.Write((byte)0x01);
                    OutputFile.Write(val);
                }
            }
        }
               
               private void InterpretLDX(System.IO.BinaryWriter OutputFile, bool
IsLabelScan)
        {
            EatWhiteSpaces();
            if (SourceProgram[CurrentNdx] == '#')
            {
                CurrentNdx++;
                ushort val = ReadWordValue();
                AsLength += 3;
                if (!IsLabelScan)
                {
                    OutputFile.Write((byte)0x02);
                    OutputFile.Write(val);
                }
            }
        }
        private void InterpretSTA(System.IO.BinaryWriter OutputFile, bool
IsLabelScan)
{
EatWhiteSpaces();
if (SourceProgram[CurrentNdx] == ',')
{
Registers r;
byte opcode = 0x00;
CurrentNdx++;
EatWhiteSpaces();
r = ReadRegister();
switch (r)
{
case Registers.X:
opcode = 0x03;
break;
}
AsLength += 1;
if (!IsLabelScan)
{
    OutputFile.Write(opcode);
}
}
}
        private void DoEnd(System.IO.BinaryWriter OutputFile, bool
IsLabelScan)
        {
            AsLength++;
            if (!IsLabelScan)
            {
                OutputFile.Write((byte)0x04);
            }
        }
        private Registers ReadRegister()
        {
            Registers r = Registers.Unknown;
            if ((SourceProgram[CurrentNdx] == 'X') ||
            (SourceProgram[CurrentNdx] == 'x')) r = Registers.X;
            if ((SourceProgram[CurrentNdx] == 'Y') ||
            (SourceProgram[CurrentNdx] == 'y')) r = Registers.Y;
            if ((SourceProgram[CurrentNdx] == 'D') ||
            (SourceProgram[CurrentNdx] == 'd')) r = Registers.D;
            if ((SourceProgram[CurrentNdx] == 'A') ||
            (SourceProgram[CurrentNdx] == 'a')) r = Registers.A;
            if ((SourceProgram[CurrentNdx] == 'B') ||
            (SourceProgram[CurrentNdx] == 'b')) r = Registers.B;
            CurrentNdx++;
            return r;
        }
        private ushort ReadWordValue()
        {
            ushort val = 0;
            bool IsHex = false;
            string sval = "";
            if (SourceProgram[CurrentNdx] == '$')
            {
                CurrentNdx++;
                IsHex = true;
            }
            while (char.IsLetterOrDigit(SourceProgram[CurrentNdx]))
            {
                sval = sval + SourceProgram[CurrentNdx];
                CurrentNdx++;
            }
            if (IsHex)
            {
                val = Convert.ToUInt16(sval, 16);
            }
            else
            {
                val = ushort.Parse(sval);
            }
            return val;
        }
        private byte ReadByteValue()
        {
         byte val = 0;
          bool IsHex = false;
         string sval = "";
         if (SourceProgram[CurrentNdx] == '$')
        {
         CurrentNdx++;
         IsHex = true;
         }
           while (char.IsLetterOrDigit(SourceProgram[CurrentNdx]))
           {
            sval = sval + SourceProgram[CurrentNdx];
            CurrentNdx++;
           }
              if (IsHex)
              {
               val = Convert.ToByte(sval, 16);
              }
                 else
              {
               val = byte.Parse(sval);
              }
               return val;
           }
        private void EatWhiteSpaces()
        {
            while (char.IsWhiteSpace(SourceProgram[CurrentNdx]))
            {
                CurrentNdx++;
            }
        }
        private string GetLabelName()
        {
            string lblname = "";
        
            while (char.IsLetterOrDigit(SourceProgram[CurrentNdx]))
            {
                if (SourceProgram[CurrentNdx] == ':')
                {
                    CurrentNdx++;
                    break;
                }
                lblname = lblname + SourceProgram[CurrentNdx];
                CurrentNdx++;
            }
            return lblname.ToUpper();
        }
        private void button3_Click(object sender, EventArgs e)
        {
                        AsLength = Convert.ToUInt16(this.txtOrigin_Click.Text, 16);
            System.IO.BinaryWriter output;
            System.IO.TextReader input;
            System.IO.FileStream fs = new
            System.IO.FileStream(this.OutputFileName.Text, System.IO.FileMode.Create);
            output = new System.IO.BinaryWriter(fs);
            input = System.IO.File.OpenText(this.SourceFileName.Text);
            SourceProgram = input.ReadToEnd();
            input.Close();
            output.Write('p');
            output.Write('3');
            output.Write('2');
            output.Write(Convert.ToUInt16(this.txtOrigin_Click.Text, 16));
            output.Write((ushort)0);
            Parse(output);
            output.Seek(5, System.IO.SeekOrigin.Begin);
            output.Write(ExecutionAddress);
            output.Close();
            fs.Close();
            MessageBox.Show("Done!");
        }
        private void SourceFile_Click_Click(object sender, EventArgs e)
        {
            this.fdSourceFile.ShowDialog();
            this.SourceFileName.Text = fdSourceFile.FileName;
        }
        private void OutputBrowse_Click_Click(object sender, EventArgs e)
        {
            this.fdDestinationFile.ShowDialog();
            this.OutputFileName.Text = fdDestinationFile.FileName;
        }
        
    }
}


this is my coding error is indexoutofbound expection in getlabelname in while statement how to clear it.. plz help me

[edit]Code block added, "Treat my content as plain text..." option disabled - OriginalGriff[/edit]

解决方案

') { CurrentNdx++; IsHex = true; } while (char.IsLetterOrDigit(SourceProgram[CurrentNdx])) { sval = sval + SourceProgram[CurrentNdx]; CurrentNdx++; } if (IsHex) { val = Convert.ToUInt16(sval, 16); } else { val = ushort.Parse(sval); } return val; } private byte ReadByteValue() { byte val = 0; bool IsHex = false; string sval = ""; if (SourceProgram[CurrentNdx] == '


') { CurrentNdx++; IsHex = true; } while (char.IsLetterOrDigit(SourceProgram[CurrentNdx])) { sval = sval + SourceProgram[CurrentNdx]; CurrentNdx++; } if (IsHex) { val = Convert.ToByte(sval, 16); } else { val = byte.Parse(sval); } return val; } private void EatWhiteSpaces() { while (char.IsWhiteSpace(SourceProgram[CurrentNdx])) { CurrentNdx++; } } private string GetLabelName() { string lblname = ""; while (char.IsLetterOrDigit(SourceProgram[CurrentNdx])) { if (SourceProgram[CurrentNdx] == ':') { CurrentNdx++; break; } lblname = lblname + SourceProgram[CurrentNdx]; CurrentNdx++; } return lblname.ToUpper(); } private void button3_Click(object sender, EventArgs e) { AsLength = Convert.ToUInt16(this.txtOrigin_Click.Text, 16); System.IO.BinaryWriter output; System.IO.TextReader input; System.IO.FileStream fs = new System.IO.FileStream(this.OutputFileName.Text, System.IO.FileMode.Create); output = new System.IO.BinaryWriter(fs); input = System.IO.File.OpenText(this.SourceFileName.Text); SourceProgram = input.ReadToEnd(); input.Close(); output.Write('p'); output.Write('3'); output.Write('2'); output.Write(Convert.ToUInt16(this.txtOrigin_Click.Text, 16)); output.Write((ushort)0); Parse(output); output.Seek(5, System.IO.SeekOrigin.Begin); output.Write(ExecutionAddress); output.Close(); fs.Close(); MessageBox.Show("Done!"); } private void SourceFile_Click_Click(object sender, EventArgs e) { this.fdSourceFile.ShowDialog(); this.SourceFileName.Text = fdSourceFile.FileName; } private void OutputBrowse_Click_Click(object sender, EventArgs e) { this.fdDestinationFile.ShowDialog(); this.OutputFileName.Text = fdDestinationFile.FileName; } } }


this is my coding error is indexoutofbound expection in getlabelname in while statement how to clear it.. plz help me

[edit]Code block added, "Treat my content as plain text..." option disabled - OriginalGriff[/edit]


The problem occurs because you have no checking on CurrentNdx to make sure you do not run out of the array.
You need to check that it does not exceed the available space each time you increment it.

BTW: Don''t just post your whole program: it is called a Code Dump and considered lazy and rude. Post just the relevant code fragments in future, please. This helps us to help you as we do not have to wade through your badly formatted code to find the relevant parts.


这篇关于B32assembler代码中的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆