МАШИННИЙ КОД і компілятор

(При першому читанні цей розділ краще пропустити)

Команди, які здатна розпізнати і виконати апаратура ЕОМ, називаютьсямашинними кодами Вони відповідають елементарним діям, на виконання яких розрахована машина, і представляються її центральному процесору як двійкові дані, що складаються з одного або декількох байтів Кожен виробник розробляє власну модель ЕОМ, і в результаті багато моделей мають свої унікальні машинні коди У лівому стовпчику табл 91 наведено кілька прикладів машинних кодів для мікропроцесора 8080 фірми Intel

Таблиця 91 Приклади машинних кодів і кодів на мові асемблера для мікропроцесора Intel 8080

Машинний код у двійковому

вигляді

Код асемблера

Інтерпретація

Перший байт Другий байт

0011  1110            1111  1111

1000 0110

MVI А, 11111111 В

ADD M

Очищає акумулятор (званий

А) і заносить в нього двійкове значення 1111 1111, на що в мові асемблера вказує буква В Акумулятор містить вісім бітів і служить для виконання арифметичних і логічних операцій Команда займає два байти Додає вміст комірки памяті (вісім бітів) до значення, що знаходиться в акумуляторі Адреса комірки памяті знаходиться в регістрі по імені М Команда займає один байт

Таблиця 91 (закінчення) Машинний код у двійковому вигляді

Код асемблера

Інтерпретація

Перший байт Другий байт 1101

0011             0000 0001

]

OUT 00000001 В

Копіює знаходиться в акумуляторі значення в певні виводять провідники, звані шиною даних Число 0000

0001 визначає потрібний вихідній і видається на набір провідників, званий шиною адреси Після цього за виконання виведення даних вживаються інші компоненти ЕОМ Команда займає два байти

Як неважко бачити, машинний код дуже важко записати правильно, тому що при роботі з двійковими числами легко зробити помилку Насправді для набору на клавіатурі двійкові числа можна записувати в набагато більш компактній формі – у вигляді шістнадцяткових чисел, але це не знімає всіх проблем, повязаних з програмуванням в машинних кодах Щоб виключити деякі з цих проблем, придумано більш просте представлення команд, в якому двійкові коди замінені мнемонічними, більш легкими для читання і запамятовування Останні разом з кількома іншими корисними засобами програмування утворюють те, що називається мовою асемблера Центральний стовпець табл 91 ілюструє деякі команди мови асемблера Завдяки тісному звязку між мовою асемблера і машинними кодами неважко розробити програму, сприймаючу текст на мові асемблера в якості вхідних даних і видає машинні коди Така програма називається асемблером Вона працює таким чином: поперше, повинна бути написана програма, що складається з команд на мові асемблера, які вводяться в ЕОМ по-друге, асемблер перевіряє дані, що вводяться і виконує трансляцію (переклад), що дає на виході машинні коди Нарешті, ці машинні коди завантажуються в підходящу частину памяті ЕОМ і виконуються

Хоча на мові асемблера написано багато програм, програмування на ньому має ряд недоліків: програми виходять досить довгими, їх розробка потребує відомого майстерності і тісно повязана з особливостями функціонування апаратної частини конкретної ЕОМ Наприклад, для виконання дій, описуваних Фрагментом програми на Бейсике

10 INPUT А, В

20   LETC=A*B

30 PRINT З

а саме для перемноження двох чисел, буде потрібно щонайменше 100 команд на мові асемблера для мікропроцесора 8080 фірми Intel

Хоча при трансляції в машинні коди програми, написаної мовою високого Рівня типу Бейсика, дії компілятора аналогічні діям асемблера, проте дистанція між вхідними мовами настільки велика, що компілятор виявляється набагато складнішою програмою

Існує багато варіантів написання компілятора Сутністю діалогового мови, подібного Бейсік, є здатність легкого редагування програм, роздрукування програм в міру необхідності і виконання програм по команді Всі ці операції можуть виконуватися в будь-якому порядку зазвичай вони багаторазово повторюються при розробці та модифікації програми

Один з підходів, званий чистої компіляцією, полягає в перетворенні машинні коди кожного рядка програми на Бейсике по мірі її отримання По закінченню введення програми результуючі машинні коди повністю готові до виконання Однак для виконання такої порядкової трансляції потрібні великі таблиці і списки, в яких зберігаються відомості про вихідні іменах змінних і номерах операторів, дозволяють компілятору гарантувати видачу повної програми Наприклад, аж до набору рядка 510 повинна зберігатися інформація про те що раніше була введена рядок 10 GO TO 510 Попередні рядки відповідно можуть змінюватися або віддалятися аж до завершення програми Цей підхід забезпечує створення машинних кодів, готових до виконання, але через вимоги, щоб процес компіляції проходив в режимі діалогу, доводиться займати в памяті багато місця для зберігання дуже великих таблиць Інший підхід, званий чистої інтерпретацією, полягає в зберіганні програми на Бейсике в тому вигляді, в якому вона була введена в ЕОМ, і в порядкової трансляції програми в момент її виконання Таким чином, якщо зустрівся цикл, то його оператори будуть повторно транслюватиметься при кожному проході циклу, так як система транслює кожен черговий оператор і не зберігає отримані машинні коди (які, швидше за все, і не утворюються) У цьому випадку за зручність редагування і друку введеної програми доводиться розплачуватися дуже малою швидкістю виконання У той час як компілятори можуть перевірити кожен оператор у міру його введення і негайно повідомити про помилку, інтерпретатори можуть робити це тільки під час виконання програми, що є серйозним недоліком

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

10 REM ПРОСТОЙ ПРИКЛАД

20 Р = 314159

30   INPUT R

40   A=P*R*R

50   C=20*P*R

60   PRINT R,A,C

70 END а її внутрішня форма така:

К ПРОСТИЙ ПРИКЛАД Р3 14159 К =

LR APR*R*K= C20P*R*K = PR,A,C!

E

Рис 92 Стадії процесу трансляції і виконання програми

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

Компілятор складається з декількох різних частин Першою і найбільшою з них є система трансляції операторів Бейсика у внутрішній формат Друга вступає в дію, коли дана команда RUN, і приводить в порядок посилання та інші недоробки , залишені першою системою, що працює за принципом порядкової обробки Вона називається системою підготовки до виконання Третьою частиною є система часу виконання, що інтерпретує внутрішній формат під час виконання програми Інші частини компілятора займаються зворотним перетворенням внутрішнього формату в оператори Бейсика при виконанні команд LIST або SAVE, інтерпретацією негайно виконуваних операторів Бейсика та виконанням команд Бейсика Таким чином, з простого транслятора операторів Бейсика виростає цільна система, що забезпечує роботу в режимі діалогу

Багато системи з Бейсиком, включаючи деякі з тих, які розроблені для мікроЕОМ, не містять системи трансляції, що забезпечує перевірку операторів програми у міру їх набору, і виконують цю перевірку після того, як дана команда RUN Замість негайного виявлення синтаксичних помилок в одному операторі вони 295

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

Джерело: Уолш Б Програмування на Бейсике: Пер з англ М: Радіо і звязок, 1988 336 с: ил

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*