/// <summary> /// direkter Konstruktor /// </summary> /// <param name="opcodeLo">die ersten 8 OpCodes (0-7)</param> /// <param name="opcodeHi">die nächsten 8 OpCodes (8-15)</param> /// <param name="insCodes">die eingelesene Instruktion</param> public AsmResult(ulong opcodeLo, ulong opcodeHi, ulong insCodes) { var len = Ins.GetLength(insCodes); Debug.Assert(len >= Ins.MinLength && len <= Ins.MaxLength); this.opcodeLo = opcodeLo & MaskLo[len]; this.opcodeHi = opcodeHi & MaskHi[len]; this.insCodes = insCodes; }
/// <summary> /// langsame Dekodierungs-Variante mit voller Schreibweise inkl. Opcodes /// </summary> /// <returns>fertige dekodierte Zeile</returns> public string FullDecodeSlow() { uint len = Length; if (len >= 8) { throw new NotImplementedException(); } return(StrB(BitConverter.GetBytes(opcodeLo), (int)len - 1) + Ins.GetInstructionName(insCodes).ToLower() + DecodeSlowParams()); }
/// <summary> /// dekodiert die Parameter (sofern vorhanden) und gibt diese zurück (mit Leerzeichen am Anfang) /// </summary> /// <returns>lesbare Parameter</returns> string DecodeSlowParams() { var p1 = Ins.GetParam1Type(insCodes); var p2 = Ins.GetParam2Type(insCodes); if (p1 == ParamType.None) { return(""); // keine Parameter vorhanden } var d1 = Ins.GetParam1Data(insCodes); string tmp = " " + DecodeParam(p1, d1); if (p2 != ParamType.None) // zweiter Parameter vorhanden? { var d2 = Ins.GetParam2Data(insCodes); tmp += ", " + DecodeParam(p2, d2); } return(tmp); }