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. Сутність синтаксичного аналізу, методи його реалізації, дерева граматичного розбору та способи продовження роботи компіляторів після виявлення синтаксичних помилок.
Синтаксичний аналаз – це розпізнавання виразів, уточнення таблиці ідентифікаторів, опрацювання синтаксичних помилок, створення проміжного коду, .
Є два методи граматичного розбору: знизу вверх або оператоного передуывання(починається з виділення окремих вузлів та їх обєднання, вхідною інформацією є таблиця лексем і таблиця пріоритетів) та зверху вниз аборекурсивного спуску(починається з кінцевого правила з якого виділяють підправила для кожного не термінального символу).
На цьому етапі в...