public override void AssembleNew(Assembler.Assembler aAssembler, object aMethodInfo) { XS.Set(XSRegisters.EDX, XSRegisters.EBP, sourceDisplacement: 0x08); XS.Set(XSRegisters.EAX, 0); XS.ReadFromPortDX(XSRegisters.AX); XS.Push(XSRegisters.EAX); }
public override void AssembleNew(Assembler.Assembler aAssembler, object aMethodInfo) { XS.Set(XSRegisters.EDX, XSRegisters.EBP, sourceDisplacement: 0x08); //TODO: Do we need to clear rest of EAX first? // MTW: technically not, as in other places, it _should_ be working with AL too.. XS.Set(XSRegisters.EAX, 0); XS.ReadFromPortDX(XSRegisters.AL); XS.Push(XSRegisters.EAX); }
public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { new CPUx86.Push { DestinationReg = CPUx86.Registers.ESP }; }
public Rem_Un(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Div(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public override void UpdateAddress(Cosmos.Assembler.Assembler aAssembler, ref ulong aAddress) { base.UpdateAddress(aAssembler, ref aAddress); }
public Ldind_U2(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Branch(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Ldelem_I8(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Ldflda(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Rethrow(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Brtrue(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Endfinally(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Calli(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Ldarg(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public static void DoExecute(Cosmos.Assembler.Assembler Assembler, _MethodInfo aMethod, Type aDeclaringType, string aField, bool aDerefValue, bool aDebugEnabled, Type aTypeOnStack) { var xFieldInfo = ResolveField(aDeclaringType, aField, true); DoExecute(Assembler, aMethod, aDeclaringType, xFieldInfo, aDerefValue, aDebugEnabled, aTypeOnStack); }
public Break(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Sub(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Mul(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Castclass(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { XS.Halt(); }
public override void WriteText(Cosmos.Assembler.Assembler aAssembler, TextWriter aOutput) { aOutput.Write(mMnemonic); }
private static BaseAssemblerElement DoResolve(Cosmos.Assembler.Assembler aAssembler, string aName) { if (!mThreadId.HasValue) { mThreadId = Thread.CurrentThread.ManagedThreadId; } else { if (mThreadId.Value != Thread.CurrentThread.ManagedThreadId) { throw new Exception("Called from multiple threads"); } } mCacheLocker.EnterReadLock(); try { if (mCache != null) { BaseAssemblerElement xTempResult; if (mCache.TryGetValue(aName, out xTempResult)) { return(xTempResult); } } } finally { mCacheLocker.ExitReadLock(); } mCacheLocker.EnterWriteLock(); try { if (mCache == null) { mCache = new Dictionary <string, BaseAssemblerElement>(StringComparer.InvariantCultureIgnoreCase); int xMax = aAssembler.AllAssemblerElementCount; for (int i = 0; i < xMax; i++) { var xInstruction = aAssembler.GetAssemblerElement(i); var xLabel = xInstruction as Label; if (xLabel != null) { mCache.Add(xLabel.QualifiedName, xLabel); } var xDataMember = xInstruction as DataMember; if (xDataMember != null) { if (mCache.ContainsKey(xDataMember.Name)) { Console.Write(""); } mCache.Add(xDataMember.Name, xDataMember); } } } BaseAssemblerElement xTempResult; if (mCache.TryGetValue(aName, out xTempResult)) { return(xTempResult); } throw new Exception("Cannot resolve ElementReference to '" + aName + "'!"); //foreach(var xInstruction in aAssembler.Instructions ) { // var xLabel = xInstruction as Label; // if(xLabel!=null) { // if(aName.Equals(xLabel.Name, StringComparison.InvariantCultureIgnoreCase)) { // xTempResult = xLabel; // break; // } // } //} //if (xTempResult == null) { // foreach (var xDataMember in aAssembler.DataMembers) { // if (aName.Equals(xDataMember.Name, StringComparison.InvariantCultureIgnoreCase)) { // xTempResult = xDataMember; // break; // } // } //} } finally { mCacheLocker.ExitWriteLock(); } }
public override void WriteData(Cosmos.Assembler.Assembler aAssembler, Stream aOutput) { throw new NotImplementedException("Method not implemented for instruction " + this.GetType().FullName.Substring(typeof(Instruction).Namespace.Length + 1)); }
public Constrained(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Conv_Ovf_U4(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Conv_U1(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Unbox(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Stind_Ref(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Stelem_I4(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Stobj(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public Unaligned(Cosmos.Assembler.Assembler aAsmblr) : base(aAsmblr) { }
public override void AssembleNew(Assembler.Assembler aAssembler, object aMethodInfo) { XS.Set(XSRegisters.EDX, XSRegisters.EBP, sourceDisplacement: 0x0C); XS.Set(XSRegisters.EAX, XSRegisters.EBP, sourceDisplacement: 0x08); XS.WriteToPortDX(XSRegisters.EAX); }