1. За семантикою мови поділяються на імперативні та декларативні. Імперативні мови програмування є детальним викладенням якогось процесу обчислення або дій, які повинен виконати процесор або периферійний пристрій, або ж програмний засіб. Прикладом імперативних мов може слугувати будь-яка сучасна мова програмування, наприклад, C чи Assembler. На відміну від них, декларативні мови передбачають насамперед формулювання мети, тобто кінцевого результату. До декларативних мов належать спеціалізовані мови, такі як Prolog або Occam, але найбільш поширеними мовами цього типу є так звані "оболонки", себто командні інтерпретатори, які існують у кожній сучасній операційній системі, і в яких користувач дає операційній системі виконати певні дії над ресурсом.
2. За призначенням мови поділяються на алгоритмічні, математичні, логічні, функціональні, об’єктно-орієнтовані та спеціалізовані. До алгоритмічних належать всі мови, головним завданням яких є виконання певних задач, які піддаються формалізації. Такі мови містять ключові слова для утворення основних елементів алгоритмів – розгалужень, точок вибору, циклів, функцій тощо та відповідних структур даних. Це знову ж таки С, C++, Pascal, Ada тощо. До математичних мов належать такі мови, головною задачею в яких визнається формалізація та розв'язок математичних рівнянь. Чисто математичною мовою прийнято вважати мову Fortran. Ця мова містить виключно засоби для створення складних математичних виразів, але не містить жодного елементу алгоритму. Однак на сьогодні, більшу популярність набули так звані мішані мови, які також увібрали в собі елементи алгоритмічних мов, зберігаючи засоби для відображення математичної нотації. До таких мов належить, зокрема, MathLab. Логічні мови сконцентровані на відображенні логічних тверджень та автоматичному доказі висновків з цих тверджень. Прикладом такої мови може слугувати Prolog, створений для автоматичного доведення теорем. Функціональні мови призначені для моделювання процесів, і хоч вони містять елементи алгоритмічних мов, але їх основною задачею все-таки є процеси фактично без звертання до даних. Прикладом такої мови є Haskell - університетська розробка. Об'єктно-орієнтовані є протилежними за архітектурою. Подібно до концентрації функціональних мов на функціях та процесах, ці мови концентруються на маніпуляції даними та відносинами між ними, до яких прив'язуються відповідні дії. Класичними об'єктно-орієнтованими мовами є SmallTalk та C++. Спеціалізовані мови можуть містити будь-які конструкції та засоби, відповідно до специфіки сфери, для яких їх призначено. Так, мови розмітки документів XML та HTML містять способи вказання способу відображення даних у Web-браузері, а мова APL – методи для обробки векторних даних.
3. За рівнем використання мови поділяються на низькорівневі, високорівневі, надвисокорівневі та мішані. Низькорівневі мови працюють на рівні операційної системи та команд процесора. Найчастіше це асемблери різних типів. Високорівневі мови – на рівні так званого інтерфейсу програміста, написаного на низькорівневих мовах для забезпечення виконання певних типових задач, як, наприклад, звертання до файлової системи за допомогою більш універсальних засобів, ніж переривання або функції ОС. До цих мов можна віднести C++, Perl, Ada або Pascal. Надвисокорівневі мови, як правило, розширюють можливості певного комплексного програмного засобу, або ж побудовані на бібліотеках так званих компонентів – готових "цеглинок" для побудови кінцевого продукту. Такі мови (а точніше – діалекти, оскільки чистих мов такого типу на сьогодні не існує) – Object Pascal, Visual C++. Мішаними називають такі мови, які здатні працювати на кількох рівнях у межах однієї програми. Класичною мовою такого типу є C, яка містить засоби роботи як на низькому, так і високому рівнях.
4. За типом компіляції мови поділяються на інтерпретовані, трансльовані та мішані. Інтерпретовані мови, як вже здавалося вище, існують у вигляді відкритого програмного коду, який при виконанні рядок за рядком перетворюється в машинний код проміжною програмою-інтерпретатором. Прикладом такої мови є Rexx, Objective (діалект мови З) та Forth. Трансльовані мови цілком перетворюються в машинний код після аналізу програмного коду. Прикладами таких мов можуть слугувати більшість алгоритмічних мов на сьогодні. Мішаними називаються такі мови, які поєднують у собі кращі риси обох цих типів. Першою такою мовою була створена SunMicrosystems мова Java, яка компілюється в кросплатформений байт-код, а потім інтерпретується віртуальною машиною, яка транслює цей проміжний код у машинний код для поточного процесора. На сьогодні існує ще дві такі мови: C# та Python.
2. Поняття "транслятор", "компілятор", "інтерпретатор", "компоновщик"
Транслятор – програма, яка перетворює програмний код, викладений на певній мові програмування, у машинний код.
Компілятор – програма, яка аналізує програмний код, проводить аналіз помилок, якщо їх не знайдено, оптимізує його, себто вирізає зайві шматки коду, або неефективні фрагменти замінює їх більш ефективними аналогами, і покращенний таким чином код передає транслятору. У сучасних системах розробки ПО компілятор та транслятор часто об’єднані в один модуль.
Інтерпретатор – програма, яка виконує програмний код, рядок за рядком перетворюючи його на льоту в машинний код за певною таблицею відповідності.
Компоновщик – програма, яка виконує зборку виконуваного модуля з одного чи кількох так званих двійкових модулів, які містять чистий машинний код, трансльований з певної мови програмування.
3. Загальний алгоритм створення програми
Загальний алгоритм можна звести до простої діаграми:
При цьому слід зазначити, що всі ці етапи розробки полегшуються за допомогою так званого "середовища інтегрованої розробки", який постачається з майже будь-якою мовою програмування. Єдиним винятком з цього правила є асемблери, які мають інтерфейс тільки командної стрічки.
Для запуску макроасемблера з використанням підказок необхідно ввести командний рядок, що містить тільки ім'я макроасемблера MASM зі специфікацією підзаголовку, якщо вона потрібна. MASM перейде в діалоговий режим і серією підказок запросить у користувача інформацію про наступні файли (відповідь полягає в наборі необхідних символів і натисканні клавіші ENTER):
1. Ім'я вихідного файлу. Якщо при відповіді не зазначене розширення, передбачається ASM.
2. Ім'я об'єктного файлу. Якщо при відповіді не зазначене розширення, передбачається OBJ. Базове ім'я об'єктного файлу за замовчуванням збігається з базовим ім'ям вихідного файлу.
3. Ім'я файлу лістинга. Якщо при відповіді не зазначене розширення, передбачається LST. Базове ім'я файлу лістинга за замовчуванням NUL.
4. Ім'я файлу перехресних посилань. Якщо при відповіді не зазначене розширення, передбачається CRF. Базове ім'я файлу лістинга за замовчуванням NUL.
Наприкінці будь-якої відповіді після символів "/" або - "," можуть бути задані опції макроасемблера.
Якщо в якій-небудь відповіді специфіковано символ ";", MASM вийде з діалогового режиму й встановить імена, що залишилися, за замовчуванням з наступного списку:
<ім'я вихідного файлу>.OBJ
NUL.LST
NUL.CRF
У будь-якій відповіді також можуть бути задані відповіді на кілька наступних підказок. У цьому випадку одна відповідь від іншого відокремлюється комами.
Для запуску MASM за допомогою командного рядка необхідно ввести командний рядок наступного виду:
MASM <ім'я вихідного файлу>[,[<ім'я об'єктного файлу>]
[,[<ім'я файлу лістинга>][,[<ім'я файлу перек. посилань>]]]]
[<опції>][;]
Символ ";" може бути специфікований у будь-якому місці командного рядка до того, як були визначені усі файли. У цьому випадку імена невизначених файлів, що залишилися, приймаються за замовчуванням із приведеного вище списку. З цього ж списку приймаються за замовчуванням імена файлів, специфікація яких у командному рядку опущена (за допомогою зайвої коми).
Якщо в командному рядку виявлена помилка, про це повідомляється через консоль, і MASM переходить у діалоговий режим.
Опції MASM можуть розташовуватися в будь-якому місці командного рядка.
Лекція 3 Порівняльна характеристика С та асемблера
1. Визначення низькорівневої мови
2. Порівняльна характеристика мов Assembler та C
3. Види асемблерів
4. Види компіляторів C
1. Визначення низькорівневої мови
Низькорівневою називається така мова, яка містить методи для звертання безпосередньо до функцій операційної системи, зокрема, збудження переривань та виклик їх функцій, периферійних пристроїв через порти введення-виведення, а також звертання безпосередньо до конкретних комірок системної пам’яті та регістрів мікропроцесора.
2. Порівняльна характеристика мов Assembler та C
Сі є мовою функцій, типів даних, операторів присвоювання і керування послідовністю обчислень. Програмуючи на Сі, ви здійснюєте звертання до функцій, і більшість функцій повертають деякі значення. Значення, що повертається функцією, будь то значення змінної чи константа, може використовуватися в операторі присвоювання, що змінює значення іншої змінної. Доповнений операторами керування послідовністю обчислень (while, for, do, switch), Сі перетворюється в мову високого рівня, що сприяє гарному стилю програмування.
Сі має невеликий набір типів даних: цілі числа, числа з комою, що плаває, бітові поля і перерахований тип. У мові Сі ви можете описати змінну типу покажчик, що зв'язується з об'єктом, який належить до будь-якого типу даних. Адресна арифметика мови Сі є чутливою до типу даних того об'єкта, з яким зв'язаний використовуваний покажчик. Дозволені також покажчики до функцій. Ви можете розширити список типів даних шляхом створення структур з ієрархічною залежністю типів даних, що входять у нього. Кожен тип даних може належати або до основного типу, або до раніше описаного структурного типу. Об'єднання нагадують структури, але визначають різні види ієрархічних залежностей, у яких дані різних типів розташовуються в пам'яті.