ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Взаємозв'язок мов C і асемблера
         

     

    Інформатика, програмування

    Розділ 1: Регістри і параметри

    1.1 Використання регістрів

    У створюваних асемблерних програмах можна використовувати всі регістрипроцесора. Але щоб запобігти плутанину з функціями С і С + +, необхідновідновлювати bp, cs, sp і ss, які вони мали до запуску створеноїпідпрограми. Тоді можна бути абсолютно впевненим, що звернення до іншихфункцій не змінить ці регістри. Також не можна забувати, що С використовуєрегістри si і di для реєстрових змінних, тому при використаннівбудованого асемблера сповільнюється спільна робота програми.

    До регістрів ax, bx, cx, dx і es можна звертатися вільно і не потрібнорезервувати їх значення до закінчення підпрограми. Ця свобода стосується іінших функцій, тому треба пам'ятати, що ці регістри змінюватися, якщовикликаються функції С та С + + з асемблерних підпрограм.

    1.2 асемблерні оператори Inline

    асемблерні оператори inline починаються словом asm, за якимслід інструкція і її операнди. Наприклад, щоб синхронізуватипрограму із зовнішнім сигналом переривання, можна написати:

    /* очікування переривання */asm sti asm hlt printf ( "Переривання полученоn")

    Коли ранні версії Turbo C компілюють програму з вбудованимикомандами asm, компілятор спершу створює асемблерні текст для всієїпрограми, вставляючи в текст наші асемблерні інструкції разом звідкомпілювалися кодом для інших операторів С. Потім компіляторвикликає Turbo Assembler та Linker (компонувальник), щоб провестиассемблірованіе і підключити програму до кінцевого файлу коду. Більшепізні версії Turbo і Borland C + + можуть компілювати оператори asm безвиклику TASM. Повний синтаксис asm: asm [позначка] Мнемоніка/директива операнди [;] [/ * З коментар */]

    Крапки з комами в кінці рядків asm і коментарі С, розташованіміж/* і */видаляються з тексту перед ассемблірованіем, тому їх можнаопускати в тексті програми.

    1.3 Розміщення даних і операторів у тексті програми

    Кожен рядок тексту програми С і С + + знаходиться або всередині, абозовні функції, і оператори asm можуть вставлятися як в одному, так і віншому місці. Конкретне положення оператора asm впливає на те, кудиассембліруется код або директива. Якщо оператор asm з'являється зовніфункції, то він ассембліруется в сегмент даних програми, якщо всерединіфункції - в кодовий сегмент. Зазвичай, щоб створити змінні, операториasm вставляються зовні функцій; для створення коду їх слід вставлятивсередину функцій. Наприклад: asm count db? int main ()

    (asm shl [count], 1/* множення count на 4 */asm shl [count], 1 return 0;

    ) < p> Змінна count оголошується в сегменті даних програми
    (щодо ds). Оператори усередині функції main множать count на 4,використовуючи замість mul швидкі дії зсуву shl. Якщо оголошуватизмінні всередині функції, дані ассембліруются в кодовий сегмент, вимагаючиособливого поводження: int main ()

    (asm jmp OverThere asm count db?

    OverThere: asm shl [count], 1/* множення count на 4 */asm shl [count ], 1 return 0;

    )

    Оскільки тепер мінлива count знаходиться в кодовому сегменті,потрібна інструкція jmp, щоб уникнути випадкового сприйняття значенняcount як машинного коду та його виконання.

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status