Page 45 - 4989
P. 45

5  ЛАБОРАТОРНА РОБОТА № 5
                                              Процедури в асемблері х86


                                                        5.1  Мета

                        Засвоїти  принципи  процедурного  програмування  мовою
                  асемблера.


                                                     5.2  Завдання

                         1. Оформити код обробки масиву з лабораторної роботи №4

                             як функцію, що викликається з головної функції.
                         2. Дослідити  узгодження  про  виклики  (call  conventions)
                             мови С++ та функцій Windows API (на прикладі функції
                             MessageBox).


                                       5.3  Основні теоретичні відомості


                        5.3.1  Команди асемблера х86 для організації підпрограм

                        Підпрограма  –  це  автономний  фрагмент  програми  для

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

                  безумовного  переходу  JMP,  а  спеціальною  командою  виклику
                  підпрограми  CALL.  На  відміну  від  команди  безумовного
                  переходу, команда виклику підпрограм  забезпечує  збереження

                  адреси  команди,  що  є  наступною  за  командою  CALL.  Це
                  відбувається шляхом автоматичного занесення вмісту лічильника
                  команд  ЕІР  (тобто  адреси  наступної  команди)  до  стеку.  Після
                  цього  до  лічильника  команд  заноситься  адреса  першої  команди

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

                  стеку вмісту сегментного регістру CS та лічильнику команд.
                        Останньою  командою  підпрограми  повинна  бути  RET.  При
                  виконанні  цієї  команди  із  стеку  до  регістру  ЕІР  (та  CS  при
                  міжсегментному             виклику)        повертається          адреса       команди,

                  наступної після CALL, що призводить до повернення управління



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