загрузка...
загрузка...
На головну

Питання Поняття про машинному мовою

  1.  A. Поняття дії в класичній механіці
  2.  C. Питання 41. Показники стану, руху і використання основних фондів
  3.  Event-менеджмент - поняття, основні методи.
  4.  I. ДО ІСТОРІЇ ПИТАННЯ
  5.  I. Поняття конфлікту
  6.  I. Психолингвистика як розділ науки про мову.
  7.  I. Розбір основних питань теми.

Машинна мова - система команд, безпосередньо розуміються апаратурою даної електронно-обчислювальної системи. Як наслідок цього, машинний мову однозначно визначається системою команд процесора і архітектурою комп'ютера.

Набір команд процесора містить:

арифметико-логічні команди - команди арифметичних дій над двійковими числами і логічних дій над двійковими векторами;

команди управління - команди переходу, розгалужень, повторень, і деякі інші команди;

команди пересилання даних - команди, за допомогою яких обмінюються даними ОЗУ і ЦП;

команди введення-виведення даних - команди, за допомогою яких обмінюються даними ЦП і зовнішні пристрої.

Кожна команда містить код операції, нею виконуваної і інформацію про адреси даних, над якими ця операція виконується. Крім цього, команда (безпосередньо - команди управління і побічно - інші команди) містить інформацію про адресу команди, яка буде виконуватися наступною. Таким чином, будь-яка послідовність команд, розміщена в ОЗУ, фактично являє собою алгоритм, записаний в системі команд процесора - машинну програму.

Найбільш поширеною зараз є архітектура ЕОМ із загальною шиною. Загальна шина - це центральна інформаційна магістраль, що зв'язує зовнішні пристрої з центральним процесором. Вона складається з шини даних, шини адреси і шини управління. Шина даних призначена для обміну даними між ОЗУ і зовнішніми пристроями. По шині адреси передаються адреси даних. Ця шина односпрямована. Шина управління служить каналом обміну керуючими сигналами між зовнішніми пристроями і центральним процесором.

Таким чином, машинний мову (мова процесора) - це набір команд, кожна з яких описує деякий елементарне дію з перетворення інформації, представленої в двійковому коді. Універсальне використання двійкового коду представлення інформації найрізноманітніших форм призводить до того, що програма рішення навіть досить простий завдання містить сотні машинних команд. Написати таку програму, використовуючи машинні команди, дуже непросто навіть кваліфікованому програмісту. Реальні програми складаються з десятків і сотень тисяч машинних команд. Тому будь-яка технологія проектування програми повинна спиратися на прийоми, характерні для людського мислення, оперувати звичними для людини поняттями з тієї предметної області, якій належить завдання.

Іншими словами, програміст (проектувальник алгоритмів) повинен мати можливість сформулювати свій алгоритм на мові звичних понять; потім спеціальна програма повинна висловити ці поняття за допомогою машинних засобів, здійснюючи переклад (трансляцію) тексту алгоритму на мову машини.

Ця необхідність і призвела до появи мов програмування високого рівня як мов запису алгоритмів, призначених для виконання на ЕОМ.

Машинно-орієнтовані мови

Попередниками мов високого рівня стали так звані машинно-орієнтовані мови або мови автокодом. Одним з найяскравіших представників машинно-орієнтованих мов є Асемблер. Асемблер дуже близький до машинної мови, більшість його інструкцій є точним символічним поданням машинних команд. Перевага полягає в тому, що вже немає необхідності пам'ятати числові коди команд процесора, досить знати їх символічне уявлення. Крім цього, вперше в машинно-орієнтованих мовах з'являється поняття змінної, як іменованої області пам'яті для зберігання даних, а разом з ним і поняття типу даних. У програмах на машинно-орієнтованої мови з'являється можливість використовувати як числову так і текстову інформацію у звичній для людини формі.

Незважаючи на явні переваги машинно-орієнтованих мов перед суто машинним мовою, написання програм на цих мовах, як і раніше пов'язане зі значними труднощами. Програми виходять дуже громіздкі і важко читані.

Мови програмування високого рівня

Мови програмування високого рівня грають роль засобу зв'язку між програмістом і машиною, а також між програмістами. Ця обставина накладає на мову багато зобов'язань:

Мова має бути близький до тих фрагментів природних мов, які забезпечують конкретну предметну область діяльності людини; (Мова, орієнтований на ділові сфери застосувань, повинен містити поняття, використовувані в цьому виді діяльності: документ, рахунок, база даних і т. П).

Всі кошти мови повинні бути формалізовані в такій мірі, щоб їх можна було реалізувати як машинні програми; (Наприклад, пропозиція "Знайти документ X в базі Y" має породити програму в машинному мові, яка здійснює необхідний пошук).

Мова програмування не тільки підтримує предметно-орієнтовану діяльність, а й стимулює її розвиток. (Поняття бази даних, обчислювальної мережі призвело до революції в діловій діяльності).

Мова програмування - щось більше, ніж засіб опису алгоритмів: він несе в собі систему понять, на основі яких людина може обмірковувати свої завдання, і нотацію, за допомогою якої він може висловити свої міркування з приводу рішення задачі.

Вивчаючи нову мову програмування, найкраще до нього ставитися, як до будь-якого іншого іноземної мови: кошти мови приймати як дані від Бога, навіть якщо вони нам здаються незрозумілими, поганими або непотрібними.

Моделі трансляції програм. транслятори

Взагалі ЕОМ не розрахована на те, щоб розуміти LOGO, Pascal або інші мови програмування високого рівня. Апаратура розпізнає і виконує лише машинний мову, програма на якому представляє з себе не більше ніж послідовність двійкових чисел.

Поява мов програмування було пов'язано з усвідомленням того факту, що переклад алгоритму, написаного на "майже" природному (алгоритмічній) мовою, на машинну мову може бути автоматизований і, отже, покладено на плечі машини. Тут важливо розрізняти мову і його реалізацію. Сама мова - це система запису, що регламентується набором правил, що визначають його лексику і синтаксис. Реалізація мови - це програма, яка перетворює цей запис в послідовність машинних команд відповідно до семантичними правилами, визначеними в мові.

Є два основних способи реалізації мови: компілятори та інтерпретатори. Компілятори транслюють весь текст програми, написаної на мові програмування, в машинний код в ході одного безперервного процесу. При цьому створюється повна програма в машинних кодах, яку потім можна виконувати без участі компілятора.

Інтерпретатор в кожен момент часу розпізнає і виконує по одному реченню (оператору) програми, по ходу справи перетворюючи обробляється пропозицію в машинну програму. Різниця між компілятором і інтерпретатором подібна різниці між синхронним перекладом усного мовлення та письмовим перекладом тексту.

В принципі будь-яку мову може бути і компілюємо, і інтерпретуємо, проте в більшості випадків у кожної мови є свій, кращий спосіб реалізації. Здається, така перевага - щось більше, ніж данина традиції. Вибір визначено самим мовою. Fortran, Pascal, Modula-2 в основному компілюють. Такі мови як Logo, Fort майже завжди інтерпретують. BASIC і Lisp широко використовується в обох формах.

За типом вихідних даних розрізняють два основних види компіляторів:

компілюються остаточний здійсненний код;

компілюються інтерпретується код, для виконання якого потрібно додаткове програмне забезпечення.

Остаточним здійсненним кодом є додатки, реалізовані як EXE-файли, DLL-бібліотеки, COM-компоненти. До інтерпретованих коду можна віднести байт-код JAVA-програм, що здійснюється за допомогою віртуальної машини JVM.

Об'єктний код, створюваний компілятором, являє собою область даних і область машинних команд, що мають адреси, які в подальшому "узгоджуються" редактором зв'язку (іноді званим загрузчиком). Редактор зв'язку розміщує в єдиному адресному просторі все окремо відкомпілювалися об'єктні модулі і статично спільні бібліотеки.

В подальшому будемо називати здійсненним формою програми код, отриманий в результаті компіляції вихідної програми.

Процес трансляції (компіляції)

Програму, написану на мові програмування високого рівня, називають початковою програмою, а кожну самостійну програмну одиницю, що утворить цю програму, - програмним модулем. Для перетворення вихідної програми в її виконувану форму (здійсненний файл) транслятор виконує деяку послідовність дій. Ця послідовність залежить як від мови програмування, так і від конкретної реалізації самого транслятора. Під час трансляції важливо не просто відкомпілювати програму, а отримати при цьому досить ефективний код.

У процесі трансляції виконується аналіз вихідної програми, а потім синтез здійсненним форми даної програми. Залежно від кількості переглядів вихідної програми, які виконуються компілятором, транслятори поділяються на однопрохідні, двопрохідні і транслятори, що використовують більше двох проходів.

До переваг однопрохідного компілятора можна віднести високу швидкість компіляції, а до недоліків - отримання, як правило, не найефективнішого коду.

Широке поширення отримали двопрохідні компілятори. Вони дозволяють при першому проході виконати аналіз програми і побудувати інформаційні таблиці, які використовуються при другому проході для формування об'єктного коду.

На малюнку 1 представлені основні етапи, що виконуються в процесі трансляції вихідної програми.

Фаза аналізу програми складається з:

лексичного аналізу;

синтаксичного аналізу;

семантичного аналізу.

При аналізі вихідної програми транслятор послідовно переглядає текст програми, представимо як набір символів, виконуючи розбір структури програми.

На етапі лексичного аналізу виконується виділення основних складових програми - лексем. Лексемами є ключові слова, ідентифікатори, символи операцій, коментарі, прогалини і роздільники. Лексичний аналізатор не тільки виділяє лексеми, а й визначає тип кожної лексеми. При цьому на етапі лексичного аналізу складається таблиця символів, в якій кожному ідентифікатору зіставлений свою адресу. Це дозволяє при подальшому аналізі замість конкретного значення (рядки символів) використовувати його адресу в таблиці символів.

Процес виділення лексем досить трудомісткий і вимагає застосування складних контекстно-залежних алгоритмів.

На етапі синтаксичного аналізу виконується розбір отриманих лексем з метою отримання семантично зрозумілих синтаксичних одиниць, які потім обробляються семантичним аналізатором. Так, синтаксичними одиницями виступають вираження, оголошення, оператор мови програмування, виклик функції.

На етапі семантичного аналізу виконується обробка синтаксичних одиниць і створення проміжного коду. Залежно від наявності або відсутності фази оптимізації результатом семантичного аналізу може бути оптимізується далі проміжний код або готовий об'єктний модуль.

До найбільш загальних завдань, що вирішуються семантичним аналізатором, відносяться:

виявлення помилок часу компіляції;

заповнення таблиці символів, створеної на етапі лексичного аналізу, конкретними значеннями, визначальними додаткову інформацію про кожен елемент таблиці;

заміна макросів їх визначеннями;

виконання директив часу компіляції.

Макросом називається деякий заздалегідь визначений код, який на етапі компіляції вставляється в програму в усіх місцях вказівки виклику даного макросу.

На фазі синтезу програми проводиться:

генерація коду;

редагування зв'язків.

Процес генерації коду складається з перетворення проміжного коду (або оптимізованого коду) в об'єктний код. При цьому в залежності від мови програмування одержуваний об'єктний код може бути представлений в здійсненним формі або як об'єктний модуль, який підлягає подальшій обробці редактором зв'язків.

Так, процес генерації коду є невід'ємною частиною фази синтезу програми, а необхідність виконання редактора зв'язків залежить від конкретної мови програмування. Слід врахувати, що на практиці термін «генерація коду» часто застосовують до всіх дій фази синтезу програми, ведучим до отримання здійсненним форми програми.

Редактор зв'язків приводить у відповідність адреси фрагментів коду, розташованих в окремих об'єктних модулях: визначаються адреси викликаються зовнішніх функцій, адреси зовнішніх змінних, адреси функцій і методів кожного модуля. Для редагування адрес редактор зв'язків використовує спеціальні, створювані на етапі трансляції, таблиці завантажувача. Після обробки об'єктних модулів редактором зв'язків генерується здійсненне форма програми.

Система програмування - це система для розробки нових програм на конкретній мові програмування.

Сучасні системи програмування зазвичай надають користувачам потужні і зручні засоби розробки програм. У них входять:

компілятор або інтерпретатор;

інтегроване середовище розробки;

засоби створення і редагування текстів програм;

великі бібліотеки стандартних програм і функцій;

налагоджувальні програми, т. е програми, які допомагають знаходити і усувати помилки в програмі;

"Дружня" до користувача діалогова середовище;

багатовіконний режим роботи;

потужні графічні бібліотеки; утиліти для роботи з бібліотеками

вбудований асемблер;

вбудована довідкова служба;

інші специфічні особливості.

Популярні системи програмування - Turbo Basic, Quick Basic, Turbo Pascal, Turbo C.

Останнім часом набули поширення системи програмування, орієнтовані на створення Windows-додатків:

Borland Delphi 3.0

пакет Borland Delphi (Дельфі) - блискучий спадкоємець сімейства компіляторів Borland Pascal, що надає якісні і дуже зручні засоби візуальної розробки. Його виключно швидкий компілятор дозволяє ефективно і швидко вирішувати практично будь-які завдання прикладного програмування.

пакет Microsoft Visual Basic - зручний і популярний інструмент для створення Windows-програм з використанням візуальних засобів. Містить інструментарій для створення діаграм і презентацій.

пакет Borland C ++ - одне з найпоширеніших засобів для розробки DOS і Windows додатків.

Нижче для ілюстрації наведено на мовах Бейсік, Паскаль і Сі програми вирішення однієї і тієї ж простий завдання - обчислення суми S елементів одновимірного масиву A = (a1, a2, ..., an).

Мова Бейсік (BASIC - Beginners All-purpose Symbolic Instruction Code - універсальний символьний код для початківців) був створений в 1965 р Дж. Кемені і Т. Курцем як мова, що полегшує написання простих програм. Cейчас все частіше пишуть Basic замість BASIC, надаючи іншу трактування назвою: Basic - основний, базовий.

Існує багато різних версій Бейсика - від дуже простих до вдосконалених, що містять безліч додаткових мовних конструкцій. Найбільшого поширення мають такі версії: QuickBasic (QBasic) 4.5 для DOS і Visual Basic 3.0-6.0 для Windows.

QuickBasic 4.5 фірми Microsoft - це дуже простий, але в той же час ефективний мову, який успадкував від раннього Бейсика всі його достоїнства, але позбавився від всіх його недоліків і ввібрав цілий ряд передових ідей початку 90-х років. Ще QuickBasic дуже привабливий своїм середовищем програмування. Одна з удач - це використання своєрідного режиму роботи. Для швидкої роботи в середовищі використовується режим інтерпретатора, а для остаточного перекладу налагоджених програм на машинну мову використовується компілятор. З QBasic компілятор виключений. QBasic входить в мінімальний комплект поставки програмного забезпечення комп'ютера. Бейсік дуже популярна мова програмування.

Мова Паскаль був розроблений в 1970 р Никласом Віртом як мова навчання студентів програмуванню. Паскаль виробляє навички дотримання хорошого суворого стилю програмування, який спрощує розробку складних програм.

Основні привабливі риси Паскаля - логічність, підтримка концепцій структурного і процедурного програмування, робота з динамічною пам'яттю, можливість створення своїх типів даних. У Паскалі програміст повинен завжди явно вказувати, з якими конкретними змінними він бажає працювати і які типи цих змінних. Сувора типізація даних дозволяє різко знизити кількість помилок, що з'являються в програмі внаслідок неуважності чи помилок.

У своєму первісному вигляді Паскаль мав досить обмежені можливості, але розширений варіант цієї мови - Turbo Pascal, є дуже потужним мовою програмування. Інтегрована оболонка Turbo Pascal, розроблена фірмою Borland (нині Inprise), що включає в себе редактор, компілятор, компонувальник і відладчик, разом з інтерактивною довідковою системою зробили розробку програм на Паскалі справою простим і приємним.

Мова Сі розроблений Деннісом Рітчі в 1972 р як мова, придатний для програмування нової операційної системи UNIX.

Операційні системи заради підвищення швидкості роботи традиційно писалися на мові низького рівня - асемблері, але мова Сі настільки добре зарекомендував себе, що на ньому було написано понад 90% всього коду ОС UNIX. Мова СІ знайшов популярність як так звана мова середнього рівня, в якому зручність, стислість і мобільність мов високого рівня поєднуються з можливістю безпосереднього доступу до апаратури комп'ютера, що зазвичай досягаються тільки при програмуванні на мові Асемблера.

Сі не дуже простий у вивченні і вимагає ретельності в програмуванні, але дозволяє створювати складні і вельми ефективні програми.

 




 Питання Типи даних в мові Паскаль. |  Команда введення (зчитування) з клавіатури значення змінних під час роботи програми |  Питання Функції користувача в мові Паскаль. |  Питання Рекурсія. Рекурсивні функції. |  Питання Етапи розвитку мов програмування |  Питання Об'єктно-орієнтоване програмування. |  Питання Основні етапи моделювання. |  Питання 18. Структура і архітектура ЕОМ. |  Питання Процесор. |  Питання Внутрішня і зовнішня пам'ять |

загрузка...
© um.co.ua - учбові матеріали та реферати