Page 34 - 4989
P. 34

асемблерні  вставки  всередині  коду  на  С++.  Синтаксис  таких
            вставок  залежить  від  компілятора.  Розглянемо,  як  реалізувати
            асемблерну           вставку         для       компілятора          Microsoft,         що
            використовується середовищем Microsoft Visual Studio.

                  У поточній версії Microsoft Visual Studio асемблерні вставки
            підтримуються  лише  для  32-розрядної  платформи  Win32  (не
            підтримуються для х64).

                  Асемблерна вставка оформлюється за допомогою ключового
            слова __asm. Якщо вставка містить лише одну інструкцію, вона
            просто  наводиться  одразу  після  ключового  слова  __asm.
            Наприклад:

                  __asm           mov eax,0
                  Якщо  вставка  містить  більше  однієї  інструкції,  слід
            використовувати  фігурні  дужки  на  початку  та  в  кінці  вставки.

            Наприклад:
                  __asm
                  {

                    mov eax, 0
                    cpuid
                  }

                  Асемблерні команди всередині вставки записуються згідно із
            синтаксисом Intel. Зокрема, шістнадцяткові числа записуються з
            суфіксом «h», а двійкові з суфіксом «b», наприклад:
                  __asm           mov eax, 0Аh

                  __asm           mov eax, 1010b
                  В  асемблерній  вставці  можна  звертатися  до  тих  змінних,  в
            область  видимості  яких  вона  входить.  Якщо  інструкція  має  два

            операнди, то тип змінної повинен узгоджуватись по розрядності з
            другим операндом. Наприклад, операндами інструкції пересилки
            даних можуть бути змінна типу int та 32-розрядний регістр (напр.
            еах),  або  змінна  типу  short  та  16-розрядний  регістр  (напр.  ах).

            Можна звертатись до елементів масиву з таким же синтаксисом,
            як  у  С++  (з  зазначенням  індекса  в  квадратних  дужках).
            Покажчики  можна  заносити  лише  в  32-розрядні  регістри.  Якщо

            необхідно  завантажити  в  регістр  початкову  адресу  масиву  чи
            змінної, слід використовувати інструкцію lea.
                  Приклад:

                  int x;

                                                           34
   29   30   31   32   33   34   35   36   37   38   39