CSPspEmu.Core.Cpu.Assembler.MipsDisassembler.Disassemble C# (CSharp) Метод

Disassemble() публичный Метод

public Disassemble ( uint PC, Instruction Instruction ) : System.Result
PC uint
Instruction Instruction
Результат System.Result
        public Result Disassemble(uint PC, Instruction Instruction)
        {
            if (ProcessCallback == null)
            {
                var Dictionary = new Dictionary<InstructionInfo, int>();

                InstructionLookup = InstructionTable.ALL.ToArray();
                for (int n = 0; n < InstructionLookup.Length; n++) Dictionary[InstructionLookup[n]] = n;

                ProcessCallback = EmitLookupGenerator.GenerateSwitch<Func<uint, MipsDisassembler, Result>>("", InstructionTable.ALL, (InstructionInfo) =>
                {
                    return ast.Return(ast.CallStatic(
                        (Func<uint, int, Result>)MipsDisassembler._InternalHandle,
                        ast.Argument<uint>(0),
                        (InstructionInfo != null) ? Dictionary[InstructionInfo] : -1
                    ));
                });
            }

            var Result = ProcessCallback(Instruction, this);
            if (Result.InstructionInfo == null)
            {
                Console.Error.WriteLine(String.Format("Instruction at 0x{0:X8} with data 0x{1:X8} didn't generate a value", PC, (uint)Instruction));
                Result.InstructionInfo = InstructionTable.Unknown;
            }
            Result.InstructionPC = PC;
            return Result;
        }

Usage Example

Пример #1
0
		private void UpdateText()
		{
			if (PcListBox.SelectedItem != null)
			{
				var PCItem = (PCItem)PcListBox.SelectedItem;
				var MethodCacheInfo = CpuProcessor.MethodCache.GetForPC(PCItem.PC);
				var MinPC = MethodCacheInfo.MinPC;
				var MaxPC = MethodCacheInfo.MaxPC;
				var Memory = CpuProcessor.Memory;
				AstNodeStm Node = null;
				if (MethodCacheInfo.AstTree != null) Node = MethodCacheInfo.AstTree.Optimize(CpuProcessor);

				var OutString = "";
				switch (LanguageComboBox.SelectedItem.ToString())
				{
					case "C#":
						if (Node != null)
						{
							OutString = Node.ToCSharpString().Replace("CpuThreadState.", "");
						}
						break;
					case "IL":
						if (Node != null)
						{
							OutString = Node.ToILString<Action<CpuThreadState>>();
						}
						break;
					case "Ast":
						if (Node != null)
						{
							OutString = AstSerializer.SerializeAsXml(Node);
						}
						break;
					case "Mips":
						{
							var MipsDisassembler = new MipsDisassembler();
							try
							{
								for (uint PC = MinPC; PC <= MaxPC; PC += 4)
								{
									var Instruction = Memory.ReadSafe<Instruction>(PC);					
									var Result = MipsDisassembler.Disassemble(PC, Instruction);
									OutString += String.Format("0x{0:X8}: {1}\r\n", PC, Result.ToString());
								}
							}
							catch (Exception Exception)
							{
								Console.Error.WriteLine(Exception);
							}
						}
						break;
					default:
						break;
				}

				ViewTextBox.Text = OutString.Replace("\n", "\r\n");
			}
		}
All Usage Examples Of CSPspEmu.Core.Cpu.Assembler.MipsDisassembler::Disassemble