Пример #1
0
        public void FindInstructionUsesCond()
        {
            m.Assign(ax, m.IAdd(ax, cx));
            m.Assign(SCZ, m.Cond(ax));
            var block = m.CurrentBlock;

            m.Assign(dx, m.IAdd(m.IAdd(dx, bx), CF));
            m.Return();

            var cm  = rw.FindConditionOf(block.Statements, 0, ax);
            var asc = rw.FindUsingInstruction(block.Statements, cm.StatementIndex, new AddSubCandidate {
                Left = ax, Right = cx
            });

            Assert.AreEqual("dx = dx + bx + C", block.Statements[asc.StatementIndex].Instruction.ToString());
        }
Пример #2
0
        public void Larw_FindInstructionUsesCond()
        {
            RunTest(m =>
            {
                m.Assign(ax, m.IAdd(ax, cx));
                m.Assign(SCZ, m.Cond(ax));
                block = m.CurrentBlock;
                m.Assign(dx, m.IAdd(m.IAdd(dx, bx), CF));
                m.Return();
            });
            m.Procedure.Dump(true);
            var cm = rw.FindConditionOf(block.Statements, 0, GetId("ax_3"));
            //Assert.AreEqual("ax_3,0,SCZ_4,SCZ_4 = cond(ax_3),SCZ_4", string.Format("{0},{1},{2},{3}", cm.src, cm.StatementIndex, cm.Statement, cm.FlagGroup));
            var asc = rw.FindUsingInstruction(cm.FlagGroup, new AddSubCandidate(Operator.IAdd, ax, cx));

            Assert.AreEqual("dx_8 = dx + bx + C_7", asc.Statement.ToString());
        }