Введення
Системне програмування (або програмування систем) - рід діяльності, що полягає в роботі над системним програмним забезпеченням. Основна відмінна риса системного програмування в порівнянні з прикладним програмуванням полягає в тому, що результатом останнього є випуск програмного забезпечення, що пропонує певні послуги користувачам (наприклад, текстовий процесор). Тоді як результатом системного програмування є випуск програмного забезпечення, що пропонує сервіси по взаємодії з апаратним забезпеченням (наприклад, дефрагментація жорсткого диска), що має на увазі сильну залежність таких програм від апаратної частки. Зокрема виділимо наступне: програміст повинен зважати на специфіку апаратної частки і інші властивості системи в якій функціонує програма, використовувати ці властивості, наприклад, застосовуючи спеціально оптимізований для даної архітектури алгоритм.
Зазвичай використовується низькорівнева мова програмування або такий діалект мови програмування, яка дозволяє функціонування в оточенні з обмеженим набором системних ресурсів.
Працює максимально ефективно і має мінімальне запізнювання за часом завершення.
Має маленьку бібліотеку часу виконання (RTL) або не має її взагалі.
Дозволяє пряме управління (прямий доступ) до пам'яті і логіки, що управляє.
Дозволяє робити асемблерні вставки в код.
Відладка програми може бути утруднена при неможливості запустити її у відладчику із-за обмежень на ресурси, тому може застосовуватися комп'ютерне моделювання для вирішення цієї проблеми.
Системне програмування істотно відрізняється від прикладного, що зазвичай приводить до спеціалізації програміста в одному з них.
1. Огляд низькорівневих команд
Низькорівнева мова програмування (мова програмування низького рівня) - мова програмування, близький до програмуванню безпосередньо в машинних кодах використовуваного реального або віртуального (наприклад, Java, Microsoft .NET) процесора. Для позначення машинних команд зазвичай застосовується мнемонічне позначення. Це дозволяє запам'ятовувати команди не у вигляді послідовності двійкових нулів і одиниць, а у вигляді осмислених скорочень слів людської мови (зазвичай англійських).
Інколи одне мнемонічне позначення відповідає цілій групі машинних команд, що виконують однакову дію над різними елементами пам'яті процесора. Окрім машинних команд мови програмування низького рівня можуть надавати додаткові можливості, такі як макровизначення (макроси). За допомогою директив є можливість управляти процесом трансляції машинних кодів, надаючи можливість заносити константи і літеральні рядки, резервувати пам'ять під змінні і розміщувати виконуваний код по певних адресах. Часто ці мови дозволяють працювати замість конкретних елементів пам'яті із змінними.
Як правило, використовує особливості конкретного сімейства процесорів. Загальновідомий приклад низкоуровнего мови - мова асемблера, хоча правильніше говорити про групу мов асемблера. Більш того! Для одного і того ж процесора існує декілька видів мови асемблера! Вони збігаються в машинних командах, але розрізняються набором додаткових функцій (директив і макросів).
Також до мов низького рівня умовно можна зарахувати MSIL, вживаний в платформі Microsoft .NET, Форт, Java байт-код.
Спочатку, програмісти безвариантно писали на мові асемблера. ............