1) Б) 7
DB <по 1 байту>
2 UDP(4*25, -1), 12h, ‘12’<2 рази по 2 байти (100, -1) +1 байт(12h)+2 байти (2 символи ‘1’та ’2’)>
Питання на ДЕК бакалаврів з дисципліни „СИСТЕМНЕ ПРОГРАМУВАННЯ”
89. Визначіть функції ініціалізуючої частини резидентних програм. Опишіть сутність каскадного включення обробників переривань та способів захисту резидентних програм від повторного завантаження. Наведіть приклад ініціалізуючої частини резидентної програми.
Функції ініціалізуючої частини:
Ініц.частина виконує обов’язкові та факультативні дії
1). Встановлення зв’язку нового обробника з номером переривання (перевизнач або перехоплення переривання ). Це призводить до заміни вектора в таблиці векторів переривань.
2). Резидентне завершення TSR;
Блок повтори завант. TSR;
Звільнення пам’яті, яку не використовує TSR
Перехоплення інших переривань системи для забезпечення надійної роботи обробника (критичних помилок системи, реакція на нажаття ctrl-break )
90. Особливості змішаного програмування мовами СІ та Assembler ( угоди про взаємозв’язки, використанням асемблерних фрагментів в СІ-функціях, організація взаємних викликів асемблерних процедур та СІ-функцій) .
Змішане програмування.
Взаємодія С і Асемблера.
Asm – встанов в текст С проги, так звані in – line задаються так:
asm mov ax, bx
asm{ текст asm - проги
}
Опрацювання цих вставок передбачило..
Bcc – B file.c file.asm
file.obj
Bcc – S file.c file asm.
Дозволено: 1) використовувати всі машинні інструкції
2)директиви оголошення даних
3)посилатися на змінні конят, мітки в мові С,
імена функцій в asm – вставках.
4)використовувати DGROUP, _TEXT, _DATA, _BSS, _STACK
Заборонено:1) використовувати директиви, що керують роботою асемблера
(asume, org, proc, segment, origin) і директиви умовного асемблювання.
посилатись на asm- мітки із тексту С- програми.
Викор. інструкцію jmp_мітки_СІ .
Виклик asm – процедур із модулів С.
#nclude<stdio.h>
Extern int test(int, int, int);
void main()
92. Визначіть основну проблему компіляції. Наведіть узагальнену структуру компілятора та дайте характеристику фаз його роботи.
Компілятор складається з двох частин – машинно-залежної і машинно незалежної. ЦЕ дає додаткові можливості при розробці компіляторів для нових платформ.
Машинно-незалежний етап складається з двох частин – це лексичний і синтаксичний аналаз, перевірка синтаксису і генерація об’єктного файлу. На цьому етапі відбувається знаходження більшості помилок в коді програми. Також на цьому етапі відбувається машинно-незалежна оптимізація – винесення за межі циклу тих дій, що не залежать від лічильниа циклу, заміна неефективних обчислень на ефективніші, виключення загальних під виразів у виразах з метою ефективнішого їх обрахунку.
Машинно-залежний етап полягає в машинно-залежній оптимізації і генерації виконуваного коду. Суть машинно-залежної оптимізації полягає у зменшенні пересилань у пам'ять проміжних результатів обчислень і замін довгих команд на короткі.
Основна проблема компіляції – це відновлення ситуації після помилок. Є 4 способи : паніка – пропуск чергових лексем до початку наступної конструкції, корекція наступних лексем, слідування правилам лдя типових помилок, глобальна корекція – виправлення і заміна конструкцій, що є помилковими.
94. Сутність синтаксичного аналізу, методи його реалізації, дерева граматичного розбору та способи продовження роботи компіляторів після виявлення синтаксичних помилок.
Синтаксичний аналаз – це розпізнавання виразів, уточнення таблиці ідентифікаторів, опрацювання синтаксичних помилок, створення проміжного коду, .
Є два методи граматичного розбору: знизу вверх або оператоного передуывання(починається з виділення окремих вузлів та їх обєднання, вхідною інформацією є таблиця лексем і таблиця пріоритетів) та зверху вниз аборекурсивного спуску(починається з кінцевого правила з якого виділяють підправила для кожного не термінального символу).
На цьому етапі відбувається виявлення синтаксичних помилок. Для відновлення ситуації після помилок є 4 способи : паніка – пропуск чергових лексем до початку наступної конструкції, корекція наступних лексем, слідування правилам лдя типових помилок, глобальна корекція – виправлення і заміна конструкцій, що є помилковими.
97. Проміжні форми представлення програм компіляторами та сутність машинно-незалежної оптимізації.
Для створення проміжного машинно-незалежного коду використовується уніфікований трьох адресний код, можлива подача виразів у префікс ній чи постфікс ній формі. Недоліком такого коду є створення проміжних змінних, а переваггою - - можливість машинно – незалежної оптимізації. Суть цієї оптимізації - винесення за межі циклу тих дій, що не залежать від лічильниа циклу, заміна неефективних алгоритмів обчислень на ефективніші, виключення загальних під виразів у виразах з метою зменшення кількості їх обрахунку. Переваги машинно-незалежної оптимізації – можливість використовувати добре відпрацьовані алгоритми оптимізації на різних платформах.
98. Основні функції асемблерів (систем асемблювання). Призначення переглядів. Особливості реалізації та характеристика роботи асемблерів на один, два та багато переглядів.
Асемблери – це транслятори з мови асемблера в машинні коди. Функції асемблера – перетворення символьних команд в машинні коди а імен – в адреси.
Існують асемблери в 1 і 2 перегляди. В один – це переважно інтерпретатори або ті що створюють об’єктний код для пізнішої повторної трансляції перед лінкуванням. Такі асемблери переважно виявляють більшість помилок в кінці, коли вже закінчилася програма, таблиця ідентифікаторів не до кінця заповнена
Більшість асемблерів працюють в 2 перегляди. Перший перегляд - створення таблиці імен, призначення їм адрес. Другий – трансляція команд, побудова об’єктного файлу, побудова лістінгу.