Пример #1
0
        public void VpUndoSlicingOfSegmentPointerCheckUses()
        {
            var es      = m.Reg16("es");
            var es_2    = m.Reg16("es_2");
            var bx      = m.Reg16("bx");
            var bx_3    = m.Reg16("bx_3");
            var bx_4    = m.Reg16("bx_4");
            var es_bx_1 = m.Reg32("es_bx_1");

            m.Store(m.SegMem(PrimitiveType.Byte, es, m.IAdd(bx, 4)), m.Byte(3));
            m.Assign(es_bx_1, m.SegMem(PrimitiveType.Word32, es, bx));
            m.Assign(es_2, m.Slice(PrimitiveType.Word16, es_bx_1, 16));
            m.Assign(bx_3, m.Cast(PrimitiveType.Word16, es_bx_1));
            var instr = m.Assign(bx_4, m.SegMem(PrimitiveType.Word16, es_2, m.IAdd(bx_3, 4)));

            RunValuePropagator();
            Assert.AreEqual("bx_4 = Mem8[es_bx_1 + 0x0004:word16]", instr.ToString());
        }