Page 56 - 4761
P. 56

K4:    mov ax,B
                                Mul C
                                Add ax,D
                                Push ax
                                Code (U5)
                                Mov dx,ax
                                Pop ax
                                Sub ax,dx
                                Mov A,ax

                         K5:     mov ax,B
                                Mul C
                                Add ax,D
                                Push ax
                                Mov ax,B
                                Mul 10
                                Pop ax
                                Sub ax,dx
                                Mov A,ax

                         Отриманий  асемблерний  код  можна  оптимізувати,  проте  для  його  обробки
                  необхідно  спеціальні  методи  і  структури,  які  враховують  взаємозв’язок  операцій.  Крім
                  того, орієнтація на окрему мову асемблер не дозволяє цей метод зробити універсальним.
                         Кожен  тип  операцій  жорстко  зв’язується  з  послідовністю  окремих  команд,
                  орієнтованих на деяку архітектуру обчислювальних систем. Всі ці вимоги ведуть до того,
                  що  в  реальному  компіляторі  при  генерації  коду  треба  приймати  до  уваги  багато
                  особливостей,  в  результаті  чого  збільшується  число  різних  типів  вузлі,  що  ускладнює
                  алгоритм генерації.
                         Цих  проблем  можна  уникнути,  якщо  породжувати  код  не    у  вигляді  ланцюга
                  команд асемблера, а у вигляді послідовності команд машинно-незалежного методу ВПП –
                  наприклад, тетрад чи тріад.

                         5. 3 Оптимізація об’єктного коду

                         Завжди бажано мати компілятор, який створює об'єктні програми, що ефективно
                  працюють.  Як  правило,  програма  в  машинних  кодах,  отримана  в  результаті  трансляції,
                  буде  займати  більший  обсяг  пам'яті  і  працювати  повільніше,  ніж  така  ж  програма,
                  написана досвідченим програмістом. Термін "оптимізація" застосовують до спроб зробити
                  вихідні програми більш "ефективними".
                          Таким чином, оптимізацією називається поліпшення вихідної програми. Частина
                  транслятора, яка відповідає за оптимізацію, виконує наступні дії:
                         1.  Усуває  недоліки  програми,  викликані  недбалістю  або  низькою  кваліфікацією
                  програміста. Прикладом може служити винесення з циклу операторів, які не залежать від
                  керуючих змінних циклу, що призведе до скорочення часу виконання програми, оскільки
                  винесені оператори будуть виконуватися тільки один раз, а не багаторазово.
                         2.  Усуває  зайві  обчислення,  які  неминуче  виникають  в  процесі  трансляції  навіть
                  при самому ретельному написанні програми мовою високого рівня. Наприклад, усунення
                  повторного обчислення індексних виразів для елементів масиву скорочує час виконання
                  програми і її довжину.





                                                                54
   51   52   53   54   55   56   57   58   59   60