示例#1
0
        /// <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;
        }
示例#2
0
        /// <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());
        }
示例#3
0
        /// <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);
        }