Page 46 - 4989
P. 46

в основну програму.


                  Таблиця 5.1 – Команди організації підпрограм

            Команда              Зміст
            CALL pp              виклик підпрограми з ім’ям рр
            RET                  повернення з підпрограми
            RET n                повернення  з  підпрограми  із  звільненням  n  комірок
                                 стекової пам’яті


                  Коректно  написана  підпрограма  не  повинна  змінювати  стан
            регістрів  і  флагів,  що  можуть  використовуватись  основною
            програмою. Для цього доцільно на початку виконання програми

            тимчасово  зберегти  у  стеку  вміст  регістрів,  які  передбачається
            використовувати  у  підпрограмі,  а  перед  виходом  з  підпрограми
            відновити їх. Наприклад:
                   PUSH ЕAX

            ...
            (команди підпрограми, що включають якісь дії з регістром ЕАХ)
            …

                   POP ЕAX
                    RET



                  5.3.2  Передача параметрів у підпрограми

                  Підпрограма  може  мати  декілька  вхідних  та  вихідних
            параметрів.  Найпростіше  передавати  параметри  через  регістри,

            тобто  в  основній  програмі  слід  занести  в  регістри  вхідні
            параметри,  викликати  підпрограму,  після  чого  результат
            виконання  буде  також  знаходитись  у  певних  регістрах.  Такий
            підхід  виправданий,  якщо  параметрів  небагато  та  наявні  вільні

            регістри.  Альтернативним  є  варіант,  коли  вхідні  параметри
            передаються  через  стек.  При  цьому  в  головній  програмі  вхідні
            параметри  заносяться  в  стек,  а  у  підпрограмі  звертання  до  них

            відбувається за допомогою непрямої адресації через регістр ЕВР,
            в  який  на  початку  підпрограми  копіюється  значення  верхівки
            стеку ЕSP.

                  Приклад.  Нехай  підпрограма  РР  має  два  аргументи  А  і  В.



                                                           46
   41   42   43   44   45   46   47   48   49   50   51