Esempio n. 1
0
 protected override void DoRender(MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     if (!mnemonics.TryGetValue(Mnemonic, out var sMnemonic))
     {
         sMnemonic = Mnemonic.ToString();
     }
     renderer.WriteMnemonic(sMnemonic);
     RenderOperands(renderer, options);
 }
Esempio n. 2
0
 protected override void DoRender(MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     if (Negated)
     {
         renderer.WriteString("/");
     }
     renderer.WriteString(Register.Name);
     renderer.WriteString($".{Bit}");
 }
Esempio n. 3
0
 protected override void DoRender(MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     if (!ImmediateValue.IsValid)
     {
         renderer.WriteString("???");
         return;
     }
     renderer.WriteString(FormatValue(ImmediateValue, false, "{0}0x{1}"));
 }
Esempio n. 4
0
 protected override void DoRender(MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     if (FSRNum == 255)
     {
         renderer.WriteString("FSR");
         return;
     }
     renderer.WriteString($"FSR{FSRNum}");
 }
Esempio n. 5
0
        public void Render(X86Instruction instr, MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
        {
            if (instr.repPrefix == 3)
            {
                renderer.WriteMnemonic("rep");
                renderer.WriteChar(' ');
            }
            else if (instr.repPrefix == 2)
            {
                renderer.WriteMnemonic("repne");
                renderer.WriteChar(' ');
            }

            var s = new StringBuilder(instr.Mnemonic.ToString());

            switch (instr.Mnemonic)
            {
            case Mnemonic.ins:
            case Mnemonic.outs:
            case Mnemonic.movs:
            case Mnemonic.cmps:
            case Mnemonic.stos:
            case Mnemonic.lods:
            case Mnemonic.scas:
                switch (instr.dataWidth.Size)
                {
                case 1: s.Append('b'); break;

                case 2: s.Append('w'); break;

                case 4: s.Append('d'); break;

                case 8: s.Append('q'); break;

                default: throw new ArgumentOutOfRangeException();
                }
                break;
            }
            renderer.WriteMnemonic(s.ToString());

            var flags = options.Flags;

            if (NeedsExplicitMemorySize(instr))
            {
                flags |= MachineInstructionRendererFlags.ExplicitOperandSize;
            }
            if (instr.Operands.Length > 0)
            {
                renderer.Tab();
                RenderOperand(instr.Operands[0], instr, renderer, flags);
                for (int i = 1; i < instr.Operands.Length; ++i)
                {
                    renderer.WriteString(options.OperandSeparator ?? ",");
                    RenderOperand(instr.Operands[i], instr, renderer, flags);
                }
            }
        }
Esempio n. 6
0
        private void RenderMnemonic(MachineInstructionRenderer writer)
        {
            var s = this.Mnemonic
                    .ToString()
                    .Replace('_', '.')
                    .Replace("..", "_");

            writer.WriteMnemonic(s);
        }
Esempio n. 7
0
        protected override void DoRender(MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
        {
            switch (Mode)
            {
            case FSRIndexedMode.None:
                if (FSRNum == 255)
                {
                    renderer.WriteString($"[{Offset:X2}]");
                    return;
                }
                renderer.WriteString($"FSR{FSRNum},{Offset:X2}");
                return;

            case FSRIndexedMode.FSR2INDEXED:
                var offs = Offset.ToByte();
                if (offs <= 31)
                {
                    renderer.WriteString($"[0x{offs:X2}]");
                }
                else
                {
                    renderer.WriteString($"[{Offset:X2}]");
                }
                return;

            case FSRIndexedMode.INDEXED:
                renderer.WriteString($"{Offset}[{FSRNum}]");
                return;

            case FSRIndexedMode.POSTDEC:
                renderer.WriteString($"FSR{FSRNum}--");
                return;

            case FSRIndexedMode.POSTINC:
                renderer.WriteString($"FSR{FSRNum}++");
                return;

            case FSRIndexedMode.PREDEC:
                renderer.WriteString($"--FSR{FSRNum}");
                return;

            case FSRIndexedMode.PREINC:
                renderer.WriteString($"++FSR{FSRNum}");
                return;

            case FSRIndexedMode.INDF:
                renderer.WriteString($"[{FSRNum}]");
                return;

            case FSRIndexedMode.PLUSW:
                renderer.WriteString($"[FSR{FSRNum}+WREG]");
                return;
            }

            throw new NotImplementedException();
        }
Esempio n. 8
0
        private void RenderMnemonic(MachineInstructionRenderer renderer)
        {
            var sMnemonic = Mnemonic.ToString();

            if (sMnemonic.StartsWith("xio_"))
            {
                sMnemonic = sMnemonic.Substring(4);
            }
            renderer.WriteMnemonic(sMnemonic);
        }
Esempio n. 9
0
 protected override void RenderOperand(MachineOperand operand, MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     if (operand is ImmediateOperand imm)
     {
         renderer.WriteChar('#');
         WriteHex(imm.Value.ToUInt16(), renderer);
         return;
     }
     base.RenderOperand(operand, renderer, options);
 }
Esempio n. 10
0
 protected override void RenderOperand(MachineOperand operand, MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     if (operand is ImmediateOperand imm)
     {
         renderer.WriteString("0x");
         renderer.WriteFormat("{0:X}", imm.Value.ToUInt32());
         return;
     }
     base.RenderOperand(operand, renderer, options);
 }
Esempio n. 11
0
 protected override void DoRender(MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     if (Offset != null)
     {
         renderer.WriteString(MachineOperand.FormatValue(Offset, false, M68kDisassembler.HexStringFormat));
     }
     renderer.WriteString("(");
     renderer.WriteString(Base.Name);
     renderer.WriteString(")");
 }
Esempio n. 12
0
 private int WriteMnemonic(MachineInstructionRenderer renderer)
 {
     if (Mnemonic == Mnemonic.b && Operands[0] is ConditionOperand cop)
     {
         renderer.WriteMnemonic($"b.{cop.Condition.ToString().ToLower()}");
         return(1);
     }
     renderer.WriteMnemonic(Mnemonic.ToString());
     return(0);
 }
Esempio n. 13
0
        private void RenderMnemonic(MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
        {
            var sb = new StringBuilder(Mnemonic.ToString().Replace('_', '.'));

            if (Condition != Avr32Condition.al)
            {
                sb.Append(Condition.ToString());
            }
            renderer.WriteMnemonic(sb.ToString());
        }
Esempio n. 14
0
 protected override void RenderOperand(MachineOperand op, MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     switch (op)
     {
     case ImmediateOperand immOp:
         renderer.WriteString(MachineOperand.FormatUnsignedValue(immOp.Value, "#${1}"));
         return;
     }
     op.Render(renderer, options);
 }
Esempio n. 15
0
 protected override void DoRender(MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     renderer.WriteFormat("[%{0}", Base.Name);
     if (!Offset.IsNegative)
     {
         renderer.WriteString("+");
     }
     renderer.WriteString(Offset.ToInt16().ToString());
     renderer.WriteString("]");
 }
Esempio n. 16
0
 private void Render4(string infix1, string infix2, MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     RenderOperand(Operands[0], renderer, options);
     renderer.WriteString(" ");
     RenderOperand(Operands[1], renderer, options);
     renderer.WriteString(infix1);
     RenderOperand(Operands[2], renderer, options);
     renderer.WriteString(infix2);
     RenderOperand(Operands[3], renderer, options);
 }
Esempio n. 17
0
        public static void RenderIntelHexNumber(int number, MachineInstructionRenderer renderer)
        {
            var sOffset = number.ToString("X");

            if ("ABCDEF".Contains(sOffset[0]))
            {
                renderer.WriteChar('0');
            }
            renderer.WriteString(sOffset);
            renderer.WriteChar('h');
        }
Esempio n. 18
0
 protected override void RenderOperand(MachineOperand operand, MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     switch (operand)
     {
     case ImmediateOperand imm:
         renderer.WriteChar('#');
         WriteNumber(imm.Value, renderer);
         return;
     }
     base.RenderOperand(operand, renderer, options);
 }
Esempio n. 19
0
 private void RenderLoad(MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     RenderOperand(Operands[0], renderer, options);
     renderer.WriteString(" ");
     RenderOperand(Operands[1], renderer, options);
     renderer.WriteString(",");
     if (Operands.Length == 3)
     {
         RenderOperand(Operands[2], renderer, options);
     }
 }
Esempio n. 20
0
 protected override void DoRender(MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     if (Value == 0 && (Mnemonic == Mnemonic.lsl || Mnemonic == Mnemonic.lsr))
     {
         renderer.WriteString(Register.Name);
     }
     else
     {
         renderer.WriteFormat("{0}{1}{2}", Register.Name, mpMnemonicToString[Mnemonic], Value);
     }
 }
Esempio n. 21
0
        protected override void DoRender(MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
        {
            string sep = "";

            foreach (var reg in GetRegisters())
            {
                renderer.WriteString(sep);
                sep = ",";
                renderer.WriteString(reg.Name);
            }
        }
Esempio n. 22
0
 public static void WriteHex(ushort n, MachineInstructionRenderer renderer)
 {
     if (n > 9)
     {
         renderer.WriteFormat("0x{0:X}", n);
     }
     else
     {
         renderer.WriteFormat("{0:X}", n);
     }
 }
Esempio n. 23
0
 protected override void RenderOperand(MachineOperand operand, MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     if (operand is ImmediateOperand imm)
     {
         renderer.WriteFormat("#${0:X2}", imm.Value.ToUInt32());
     }
     else
     {
         base.RenderOperand(operand, renderer, options);
     }
 }
Esempio n. 24
0
 protected override void RenderOperand(MachineOperand op, MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     if (op is AddressOperand && (base.InstructionClass & InstrClass.Transfer) == 0)
     {
         renderer.WriteString("#");
     }
     if (op is ImmediateOperand && Mnemonic != Mnemonics.call)
     {
         renderer.WriteString("#");
     }
     op.Render(renderer, options);
 }
Esempio n. 25
0
 protected override void DoRender(MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     if (Mnemonic == Mnemonic.ex_af)
     {
         renderer.WriteMnemonic("ex");
         renderer.Tab();
         renderer.WriteString("af,af'");
         return;
     }
     renderer.WriteMnemonic(Mnemonic.ToString());
     RenderOperands(renderer, options);
 }
Esempio n. 26
0
 protected override void DoRender(MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     if (Base is null)
     {
         renderer.WriteAddress($"${Offset:X4}", Address.Ptr16(Offset));
     }
     else
     {
         renderer.WriteChar('@');
         renderer.WriteString(Base !.Name);
     }
 }
Esempio n. 27
0
 protected override void RenderOperand(MachineOperand op, MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     switch (op)
     {
     case RegisterOperand reg:
         renderer.WriteFormat("%{0}", reg.Register.Name);
         return;
     default:
         op.Render(renderer, options);
         return;
     }
 }
Esempio n. 28
0
 private void RenderMnemonic(MachineInstructionRenderer renderer)
 {
     var sb = new StringBuilder();
     sb.Append(Mnemonic.ToString());
     if (Annul)
         sb.Append(",a");
     if (Prediction == Prediction.NotTaken)
         sb.Append(",pn");
     if (Prediction == Prediction.Taken)
         sb.Append(",pt");
     renderer.WriteMnemonic(sb.ToString());
 }
Esempio n. 29
0
 protected override void RenderOperand(MachineOperand operand, MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
 {
     if (operand is ImmediateOperand imm)
     {
         renderer.WriteString("#$");
         imm.Render(renderer, options);
     }
     else
     {
         base.RenderOperand(operand, renderer, options);
     }
 }
Esempio n. 30
0
        protected override void DoRender(MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
        {
            int offset = Offset;

            if (offset < 0)
            {
                offset = -offset;
                renderer.WriteChar('-');
            }
            renderer.WriteFormat("{0:X}(", offset);
            renderer.WriteString(this.Base.Name);
            renderer.WriteString(")");
        }