Пример #1
0
        public static void peephole()
        {
            OtimizadorLC peephole = new OtimizadorLC();

            peephole.buffer = new List <string>();
            peephole.linha  = System.IO.File.ReadAllLines("c:/8086/arquivo.asm");
            var tratarLinha = peephole.linha;

            String[] linha    = new String[tratarLinha.Length];
            int      contador = 0;

            for (int i = 0; i < tratarLinha.Length; i++)
            {
                if (!(tratarLinha[i] == "" || tratarLinha[i].FirstOrDefault() == ';'))
                {
                    linha[contador] = tratarLinha[i];
                    contador++;
                }
            }

            for (int i = 0; i < linha.Length; i++)
            {
                if (i + 1 == linha.Length)
                {
                    break;
                }

                if (linha[i] == null || linha[i + 1] == null)
                {
                    if (linha[i] != null)
                    {
                        peephole.add(linha[i]);
                    }
                    break;
                }

                if (linha[i].Contains("mov") && linha[i + 1].Contains("mov"))
                {
                    String[] mov1 = linha[i].Replace(",", "").Split(' ');
                    String[] mov2 = linha[i + 1].Replace(",", "").Split(' ');

                    if (mov1[1].Contains("DS") && mov2[2].Contains("DS") && mov1[1].Equals(mov2[2]))
                    {
                        peephole.add("mov " + mov2[1] + ", " + mov1[2] + "               ;LINHA OTIMIZADA PEEPHOLE");
                        i++;
                    }
                    else
                    {
                        peephole.add(linha[i]);
                    }
                }
                else
                {
                    peephole.add(linha[i]);
                }
            }
            peephole.print("c:/8086/arquivoOtimizado.asm");
        }
Пример #2
0
        public static void reducaoCusto()
        {
            OtimizadorLC peephole = new OtimizadorLC();

            peephole.buffer = new List <string>();
            peephole.linha  = System.IO.File.ReadAllLines("c:/8086/arquivo.asm");
            var linha = peephole.linha;

            for (int i = 0; i < linha.Length; i++)
            {
                String[] imul = linha[i].Replace(",", "").Split(' ');

                if (imul[0].Contains("imul") && imul[1].Contains("AX"))
                {
                    peephole.add("add AX, AX ;LINHA OTIMIZADA REDUÇAO DE CUSTO");
                    i++;
                }
                else
                {
                    peephole.add(linha[i]);
                }
            }
            peephole.print("c:/8086/arquivoOtimizado.asm");
        }