Esempio n. 1
0
        public void ProcStr_NestedWhile()
        {
            var r1 = m.Reg32("r1");
            var r2 = m.Reg32("r2");

            m.Label("head1");
            m.BranchIf(m.Ge(r1, 4), "done1");

            m.Label("body1");
            m.Declare(r2, m.Word32(0));
            m.Label("head2");
            m.BranchIf(m.Ge(r2, 4), "done2");

            m.Label("body2");
            m.Store(m.IAdd(
                        m.Word32(0x1232100),
                        m.IAdd(
                            m.IMul(r1, 4),
                            r2)),
                    m.Byte(0));
            m.Assign(r2, m.IAdd(r2, 1));
            m.Goto("head2");

            m.Label("done2");
            m.Assign(r1, m.IAdd(r1, 1));
            m.Goto("head1");

            m.Label("done1");
            m.Return();

            var sExp =
                #region Expected
                @"    while (r1 < 0x04)
    {
        word32 r2 = 0x00;
        while (r2 < 0x04)
        {
            Mem0[0x01232100 + (r1 * 0x04 + r2):byte] = 0x00;
            r2 = r2 + 0x01;
        }
        r1 = r1 + 0x01;
    }
    return;
";

            #endregion
            RunTest(sExp, m.Procedure);
        }