Esempio n. 1
0
 public string GetSymbolPostfix(ConcreteInstruction instr)
 {
     if (verbose && instr.NoOfArgBytes > 0)
     {
         string postfix = dualScope.findUsedSymbol(instr.Argument);
         return(postfix == null ? "" : " " + postfix);
     }
     return("");
 }
Esempio n. 2
0
        private void OutputDisassembledPart(ConcreteInstruction instr)
        {
            int missingArgBytes = instr.MissingBytes;

            switch (instr.NoOfArgBytes)
            {
            case 0:
                output.WriteLine("");
                break;

            case 1:
                if (0 == missingArgBytes)
                {
                    if (verbose && instr.IsBranchInstruction)
                    {
                        // special case for branch instructions
                        output.WriteLine(" {0}", GetArg1OrBranchDestination(instr));
                    }
                    else if (verbose && instr.IsZeroAddressing)
                    {
                        // special postfix for instructions with symbols
                        output.WriteLine(" {0:X2}{1}", instr.Arg1, GetSymbolPostfix(instr));
                    }
                    else
                    {
                        output.WriteLine(" {0:X2}", instr.Arg1);
                    }
                }
                else
                {
                    output.WriteLine(" ??");
                }
                break;

            case 2:
                if (0 == missingArgBytes)
                {
                    // special postfix for instructions with symbols
                    output.WriteLine(" {1:X2}{0:X2}{2}", instr.Arg1, instr.Arg2, GetSymbolPostfix(instr));
                }
                else if (1 == missingArgBytes)
                {
                    output.WriteLine(" ??{0:X2}", instr.Arg1);
                }
                else
                {
                    output.WriteLine(" ????");
                }
                break;

            default:
                Debug.Fail("bad instruction.NoOfArgBytes");
                output.WriteLine("?????");
                break;
            }
        }
Esempio n. 3
0
 public string GetArg1OrBranchDestination(ConcreteInstruction instr)
 {
     if (instr.IsBranchInstruction)
     {
         sbyte offset      = (sbyte)instr.Arg1;
         int   destination = CalcRealAddr(instr) + 2 + offset;
         return(string.Format("{0}{1}>{2:X2}", offset >= 0 ? "+" : "", offset, destination & 0xFF));
     }
     else
     {
         return(string.Format("{0:X2}", instr.Arg1));
     }
 }
Esempio n. 4
0
        public void OnNext(byte value)
        {
            if (IsInTextDataMode)
            {
                if (TextDataBlock.isPrintable(value))
                {
                    textDataBlock.Append(value);
                    if (textDataBlock.CurNoOfBytes == 16)
                    {
                        FlushTextDataAndLeaveTextDataMode();
                        EnterTextDataMode();
                    }
                }
                else
                {
                    FlushTextDataAndLeaveTextDataMode();
                    // recurse to processs value now
                    OnNext(value);
                }
            }
            else
            {
                if (instr == null)
                {
                    instr = new ConcreteInstruction(posStart, value);
                }
                else
                {
                    instr.Append(value);
                }

                if (instr.IsComplete)
                {
                    FlushInstruction();
                    if (instr.IsTextDataLabel)
                    {
                        EnterTextDataMode();
                    }
                    instr = null;
                }
            }
        }