- •Методичні вказівки
- •«Системне програмування»
- •5.05010201«Обслуговування комп’ютерних систем і мереж»
- •Рецензія
- •Тема 3. Мова програмування Assembler ……………………………..……..135
- •1.1. Історія розвитку мов системного програмування Питання для опрацювання
- •Методичні рекомендації
- •1. Класифікація мов програмування
- •2. Розвиток мов системного програмування
- •Студент повинен
- •Питання для самоконтролю
- •Історія виникнення мови програмування с
- •2. Сфери застосування мови програмування с
- •1. Двійкова, вісімкова та шістнадцяткова системи числення.
- •2. Формати представлення чисел у різних системах числення.
- •3. Стандарти представлення чисел зі знаком.
- •Формати з плаваючою комою
- •Векторні формати
- •Приклади
- •Студент повинен
- •Питання для самоконтролю
- •Література
- •Питання для опрацювання
- •Методичні рекомендації
- •Приклад:
- •2. Керуючі послідовності
- •1. Види логічних операцій, які виконуються в комп’ютері.
- •За структурою
- •За типом запису даних
- •За архітектурними особливостями
- •За формою подання даних
- •Залежно від часу виконання операцій
- •Залежно від реалізації мікроалгоритму
- •Пристрій управління
- •Операційний пристрій
- •Регістри
- •2. Алгоритми виконання логічних операцій.
- •Побітові логічні операції
- •Бітові зсуви
- •Бітові операції як основа цифрової техніки[ред. • ред. Код]
- •Студент повинен
- •Питання для самоконтролю
- •Література
- •Питання для опрацювання
- •Методичні рекомендації
- •Студент повинен
- •Питання для самоконтролю
- •Література
- •Питання для опрацювання
- •Методичні рекомендації
- •Порядок використання вбудованих функцій під час написання програм.
- •2. Порядок практичного використання багатовимірних масивів під час створення програм.
- •Студент повинен
- •1. Порядок задання і створення масивів структур.
- •2. Порядок практичного використання масивів структур під час створення програм.
- •1. Створення динамічних масивів за допомогою вказівників.
- •2. Передача аргументів процедур та функцій з використанням вказівників.
- •3. Використання масивів вказівників.
- •Студент повинен
- •Питання для самоконтролю
- •1. Головні означення та властивості теорії графів.
- •Зображення графів на площині
- •1. Порядок переходу у графічний режим виводу інформації.
- •2. Функції для побудов геометричних фігур.
- •1. Базові поняття об’єктно‑орієнтованого програмування (ооп).
- •2. Успадкування та поліморфізм.
- •Практичні прийоми програмування з використанням об’єктів.
- •Студент повинен
- •Питання для самоконтролю
- •Література
- •Тема 3. Мова програмування Assembler
- •3.1. Спеціалізоване використання регістрів процесора Intel 8086 Питання для опрацювання
- •Методичні рекомендації
- •1. Спеціалізоване використання регістрів даних.
- •2. Спеціалізоване використання регістрів-вказівників.
- •3.2. Способи адресації пам’яті у процесорах Intel 8086
- •1. Регістрова адресація.
- •2. Безпосередня адресація.
- •3. Пряма адресація.
- •4. Непряма адресація та її різновиди.
- •Питання для самоконтролю
- •1. Особливості роботи з відеорежимами.
- •2. Порядок задання кольору для виведення даних.
- •1. Функції для керування роботою послідовного порту
- •2.Функції для керування роботою паралельного порту
Студент повинен
знати:
Означення мови програмування.
Класифікацію мов програмування.
Означення мови високого рівня програмування та її основні види.
Означення мови низького рівня програмування та її основні види.
Поняття машинно-орієнтованих мов програмування.
Поняття машинно-незалежних мов програмування.
Поняття проблемно-орієнтованих мов програмування.
Поняття універмальних мов програмування.
Розвиток системного програмування.
вміти:
Дати порівняльну характеристику мов програмування.
Описувати розвиток системного програмування.
Питання для самоконтролю
Сформулюйте означення мови програмування.
Назвіть основні види мов програмування.
Сформулюйте означення мови високого рівня програмування.
Сформулюйте означення мови низького рівня програмування.
Сформулюйте означення машинно-орієнтованої мови програмування.
Сформулюйте означення машинно-незалежної мови програмування.
Сформулюйте означення проблемно-орієнтованої мови програмування.
Назвіть прорблемно-орієнтовані мови програмування.
Сформулюйте означення універсальної мови програмування.
Сформулюйте означення діалогової мови програмування.
Назвіть основні етапи розвитку системного програмування.
Література
1.http://uk.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B2%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F –Мова програмування та її види
2. http://melkon.com.ua/ua/novosti-i-statii/article-hpc-software-trends.html- Розвиток мов системного програмування.
1.2. Історія створення та різновиди стандартів мови програмування Сі
Питання для опрацювання
1. Історія виникнення мови програмування С.
2. Сфери застосування мови програмування С.
3. Основні відмінності мови С++ від мови С.
Методичні рекомендації
Під час вивчення даної студенти повинні звернути увагу на мови програмування Сі та С++ як на головні засоби створення системних програм.
Історія виникнення мови програмування с
C(англ.C)— універсальна, процедурна,імперативна мова програмування загального призначення, розроблена у 1972 році Денісом Рітчі у Bell Telephone Laboratories з метою написання нею операційної системи UNIX.
Хоча С і було розроблено для написання системного програмного забезпечення, наразі вона досить часто використовується для написання прикладного програмного забезпечення.
С імовірно, є найпопулярнішою у світі мовою програмування за кількістю вже написаного нею програмного забезпечення, доступного під вільними ліцензіями коду та кількості програмістів, котрі її знають. Версії компіляторів для мови С існують для багатьох операційних систем та апаратних архітектур. C здійснила великий вплив на інші мови програмування, особливо на C++, яка спочатку проектувалася, як розширення для С, а також на Java та C#, які запозичили у С синтаксис.
Як і більшість імперативних мов, заснованих на традиції АЛГОЛ, C має можливості для структурного програмування і дозволяє здійснювати рекурсії, у той час, як система статичної типізації даних запобігає виникненню багатьох непередбачуваних операцій. У С увесь виконуваний код міститься у функціях. Параметри функції завжди передаються за значеннями. Передача параметрів за вказівником реалізовується шляхом передачі значення вказівника. Гетерогенні сукупності типів даних (структури) дозволяють пов'язаним типам даних бути об'єднаними і маніпулювати ними, як єдиним цілим.
C також має такі специфічні властивості:
змінні можуть бути прихованими у вкладених блоках;
слабка типізація; наприклад, символи можуть використовуватися, як цілі числа;
низькорівневий доступ до оперативної пам'яті шляхом перетворення машинних адрес вказівники;
вказівники на функції і дані підтримують динамічний поліморфізм;
масив індексів як вторинне поняття, визначається у термінах арифметики вказівників;
стандартизований препроцесор C для макроозначення, включення файлу з джерельним кодом, умовної трансляції, і т. д.
комплексна функціональність, як то I/O, маніпуляція рядками, і делегування математичних функцій бібліотекам;
відносно невелика кількість зарезервованих слів (32 у С89, і 37 у C99);
Лексичні структури, які нагадують B більше за ALGOL, наприклад:
{ ... } на відміну від ALGOL'івського begin ... end
знак рівності для призначення (копіювання), як це робиться у мові Fortran
два знаки рівності використовуються для перевірки рівності (подібно до .EQ. у Fortran'і або одного знаку рівності уBASIC)
&& та || на відміну від ALGOL'івських and та or (цим вона семантично відрізняється від бітових операторів & та |).
велика кількість операторів об'єднання, на кшталт +=, ++, ……
Початковий етап розробки Сі відбувся у стінах Bell Labs між 1969 та 1973 роками; Деніс Рітчі стверджує, що найбільш творчим був 1972 рік. Мову було названо «Сі» через те, що багато її можливостей було отримано від раніше створеної мови B.
Існує чимало легенд щодо походження мови Сі, і пов'язаної з нею операційної системи UNIX, серед них:
Розробка Сі стала результатом того, що його майбутні автори любили комп'ютерну гру, схожу на популярну гру Asteroids (Астероїди). Вони вже давно грали у неї на головному сервері компанії, який був недостатньо потужним, і повинен був обслуговувати близько ста користувачів. Томпсон і Рітчі вирішилили, що їм не вистачає контролю над космічним кораблем для того, щоб уникати зіткнень з деякими каменями. Тому вони вирішили перенести гру на вільний PDP-7, що стоїть в офісі. Проте цей комп'ютер не мав операційної системи, що змусило їх її написати. Врешті-решт, вони вирішили перенести цюопераційну систему ще й на офісний PDP-11, що було дуже важко, оскільки її код був цілком написаний на асемблері. Було винесено пропозицію використати якусь високорівневу портативну мову, щоб можна було легко переносити ОС з одного комп'ютера на іншій. Мова B, яку вони спершу хотіли використати, виявилася позбавленою функціональності, здатної використовувати нові можливості PDP-11. Тому вони і зупинилися на розробці мови С.
Найперший комп'ютер, для якого була спочатку написана UNIX, призначався для створення системи автоматичного заповнення документів. Перша версія UNIX була написана на асемблері. Пізніше для того, щоб переписати цю операційну систему, була розроблена мова С.
До 1974 року мова С стала достатньо функціональною для того, щоб переписати на ній більшу частину ядра UNIX, котре спершу було написане на асемблері PDP-11. Це було перше ядро операційної системи реалізоване не на асемблері.
У 1978 році Рітчі та Керніган опублікували першу редакцію книги «Мова програмування Сі». Ця книга, відома серед програмістів як «K&R». Описану у ній версію мови Сі, часто називають «K&R». Друга редакція цієї книги присвячена пізнішому стандартуANSI C, описаному нижче.
K&R описує такі особливості мови:
Тип даних struct
Тип даних long int
Тип даних unsigned int
Оператор =- було змінено на -=, щоби позбутися семантичної двозначності створюваної конструкціями, на зразок i=-10, яка могла інтерпретуватися, як i =- 10 або i = -10
K&R часто вважають найголовнішою частиною мови, яку повинен підтримувати компілятор С. Багато років, навіть після виходуANSI C, він вважався мінімальним рівнем, якого слід було дотримуватися програмістам, охочим добитися від своїх програм максимальної портативності, оскільки не всі компілятори тоді підтримували ANSI C, а код на K&R C був сумісним і з ANSI C.
У ранніх версіях C, лише функції, що повертають значення з типом відмінним від int повинні були бути оголошеними, якщо вони використовувалися перед визначенням функції; функції без попереднього оголошення повинні повертати лише ціле число.
Для прикладу: long int SomeFunction(); int OtherFunction();
int CallingFunction()
{
long int test1;
int test2;
test1 = SomeFunction();
if (test1 > 0) test2 = 0;
else test2 = OtherFunction();
return test2;
}
У цьому прикладі, як SomeFunction, так і OtherFunction були оголошені перед своїм використанням. У K&R оголошенням OtherFunction можна було знехтувати.
Оскільки декларація функцій у K&R C не включає ніякої інформації про аргументи функції, перевірка типу параметрів не виконується, хоча деякі компілятори видають попереджувальне повідомлення, якщо до локальної функції звертаються із неправильним числом аргументів, або якщо багаторазові виклики до зовнішньої функції використовувають різну кількість аргументів.
Наступні декілька років після публікації K&R C, до мови було додано декілька неофіційних можливостей (у той час, як офіційного нового стандарту не було), котрі підтримувалися компіляторами від AT&T та деяких інших постачальників. Серед них:
функції з типом результату void;
функції, що повертають значння типу struct або union (а не вказівник);
присвоєння для типу struct;
визначник const, котрий робив об'єкт доступним лише для читання;
перечислювані типии.
Велика кількість доповнень і відсутність стандартної бібліотеки, разом із великою популярністю мови, створили нагальну потребу у стандартизації.
Наприкінці 1970-х, мова C випередила BASIC, і стала найпопулярнішою мовою програмування для мікрокомп'ютерів. Протягом1980-х, її прийняли для використання в IBM PC, і її популярність почала зростати досить стрімкими темпами. У той же час, Бьярн Страуструп та інші працівники Bell Labs розпочали роботу над доданням об'єктно-орієнтованих конструкцій до C, що призвело до виникнення C++.
У 1983, Американський Національний Інститут Стандартів (ANSI) сформував комітет X3J11 для створення стандартної специфікації для мови C. У 1989, стандарт був ратифікований як ANSI X3.159-1989 «Мова Програмування C». Цю версію часто називають ANSI C, Стандартний C, або С89.
У 1990, стандарт (з декількома незначними модифікаціями) ANSI C ратифікувала Міжнародна Організація із Стандартизації (ISO), ISO/IEC 9899:1990. Цю версію іноді називають C90. Тому, терміни «C89» і «C90» по суті, позначають одну мову.
ANSI, як і інші інститути із стандартизації, більше самотужки не займається розвитком стандарту мови програмування С. Прийняття стандарту національними інститутами, як правило, відбувається протягом року після публікацію стандарту ANSI.
Одна з цілей процесу стандартизації мови С полягала у розробці надмножини над K&R C, яка включала б чимало неофіційних можливостей. Комітети зі стандартизації також додали чимало додаткових функцій, як то прототипи функцій (запозичені в C++), вказівники void, підтримку міжнародних наборів символів та мов і локалей, а також низку розширень для препроцесора. Синтаксис декларації параметрів також було розширено використовуючи запозичення з С++, хоча, інтерфейс K&R також допускається для збереження зворотної сумісності зі старим кодом.
C89 наразі підтримується усіма компіляторами С, і більшість існуючого коду написано на базі даного стандарту. Будь яка програма на писана на стандартній С, і без використання апаратно залежних засобів може бути скомпільована і запущена на будь якій операційній системі та апаратній архітектурі без будь яких обмежень ресурсів.
Після процесу стандартизації ANSI, специфікація мови C протягом якогось часу залишилася відносно статичною, тоді як C++продовжувала еволюціонувати, у значній мірі завдяки своїм власним зусиллям зі стандартизації. Нормативна Поправка 1, створила новий стандарт для мови C у 1995, але лише для того, щоб виправити деякі деталі стандарту C89 і додати обширнішу підтримки міжнародних наборів символів. Проте, стандарт піддався подальшому перегляду в кінці 1990-х, привівши до публікації ISO 9899:1999 у 1999 році. Цей стандарт зазвичай іменують, як «C99». Він був прийнятий, як стандарт ANSI у березні 2000.
Стандарт C99 ввів декілька нових особливостей, багато з яких вже були реалізовані у декількох компіляторах:
Вкладені функції.
Змінні можуть оголошуватися будь-де (як у C++).
Введено декілька нових типів даних, зокрема, long long int, явний логічний (булевий) тип даних, і комплексний тип для представлення комплексних чисел.
Масиви зі змінними довжинами.
Підтримка коротких, однорядкових коментарів, що починаються з //, як у BCPL та C++.
Нові бібліотечні функції, як наприклад sprintf.
Нові заголовні файли, як то stdbool.h та inttypes.h
Вдосконалена підтримка стандарту IEEE для роботи з плаваючою крапкою
Виправлено друкарські огріхи.
C99 сумісний з C90, однак, має деякі відмінності; зокрема, якщо в декларації ідентифікатора не вистачає специфікатора типу, змінна чи функція надалі не сприймається оголошеною неявно як int. Комітет стандартів вирішив, що важливіше, щобикомпілятори діагностували неуважне упущення специфікатора типу, ніж мовчки обробляли код. На практиці, компілятори, ймовірно, діагностують упущення, але й приймають змінну оголошеною як int і продовжують переклад програми.
GCC та інші компілятори C наразі підтримують багато з нових можливостей C99. Проте, вони меншою мірою підтримуються компіляторами таких компаній, як Microsoft і Borland, котрі зосередилися переважно на C++, відтоді, як C++ забезпечує подібну функціональність.
Міжнародна організація зі стандартизації (ISO) у грудні 2011 опублікувала оновлений варіант стандарту для мови Сі - ISO/IEC 9899:2011, що був створений під кодовим ім'ям C1X і прийшов на зміну стандарту C99. Оскільки стандарт розвивався досить тривалий час, пройшовши стадії випуску декількох чорнових редакцій, сучасні компілятори, такі як GCC 4.6 і LLVM 3.0, уже підтримують більшість описаних у специфікації можливостей.
У новій специфікації збільшена сумісність з мовою С++ і представлені деякі нові можливості, такі як:
підтримка багатонитевості,
підтримка Unicode,
вилучена функція gets,
інтерфейс для перевірки допустимих меж і діапазонів значень,
анонімні структури та об'єднання (наприклад, можна вкласти блок union в struct),
додаткова функція для миттєвого виходу з програми quick_exit,
статичні твердження (Static assertions),
задіяння додаткових макросів для перевірки чисел з плаваючою комою.
Фінальний текст стандарту не доступний для вільного завантаження (тільки платна завантаження), але можна завантажити останню чорнову редакцію (PDF, 3.6 Мб, 701 стор), яка майже не відрізняється від затвердженої специфікації.
