-2

switch 命令に誤りがありますが、その理由がわかりません。Main クラスを見てください。

            try {  
            var result = string.Join(" ",File.ReadAllBytes(args[0]).Select(x => x.ToString("X")));
            Console.WriteLine(result);
            ASM asm = new ASM(); 
            if(result != null) asm.EXEC(result); //Error here?
        }
        catch(Exception ex) {
            Console.WriteLine(ex.Message);
        }

そしてASMクラス。EXEC メソッドと switch-case 命令にエラーがあると思います:

public class ASM
{
    public void EXEC(string ex) 
    {
        if (ex == null)
            Console.WriteLine("ASM opcode is null!");
        string[] a = ex.Split(' ');
        int i = 0;
        while (i<a.Length)
        {
            switch (a [i])
            {
                case "AF":  //hlt
                    Environment.FailFast("hlt");
                    break;
                case "AB":  //Write
                    i++;
                    string memorySegment = a[i];
                    i++;
                    int memoryValue = Convert.ToInt32(a[i]);
                    if(memorySegment == "F0") Memory.Write("0xC00",memoryValue);
                    else if (memorySegment == "F1") Memory.Write("0x100",memoryValue);
                    else if (memorySegment == "F2") Memory.Write("0x200",memoryValue);
                    else if (memorySegment == "F3") Memory.Write("0xA00",memoryValue);
                    else if (memorySegment == "F4") Memory.Write("0xB00",memoryValue);
                    break;
            }
            i++;
        }
    }

コンソールにAB F1 19 AF Object reference not set to an instance of an object、このエラーを回避するにはどうすればよいですか? と表示されます。コードはファイルの 16 進コードを正常に書き込みますが、ASM.EXEC メソッド (結果) の引数は null ではありませんが、メソッドの読み取りはできません。ありがとう、下手な英語でごめんなさい。

4

1 に答える 1

0

これが例外の理由であるかどうかはわかりませんが、新しい値がまだ配列 a の境界内にあるかどうかを確認せずに、内部case "AB"で値をインクリメントするという事実を指摘する必要があります。i

配列の最後のバイトとしてケースにヒットするABと、例外が発生します (ただし、IndexOutOfRange 例外である必要があります)。

于 2013-05-15T08:19:33.513 に答える