ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Асемблер. Варіанти спільного використання асемблера і мов високого рівня.

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

Мова асемблера, як засіб поліпшення продуктивності додатків написаних на мовах високого рівня використовуються досить широко. Розумне поєднання в одному додатку модулів написаних на мові високого рівня і асемблері дозволяють досягнути високої швидкості роботи програми та зменшити розмір виконуваного коду. На практиці застосовують 2 варіанти спільного використання асемблера і мов високого рівня. В першому випадку використовується окремий файл об’єктного модуля в якому розташовується одна або декілька процедур обробки даних. Виклик такої процедури здійснюється програмою що написана на мові високого рівня. В другому випадку у вихідному тексті додатку на мові високого рівня асемблерна процедура оголошується відповідним чином після чого її можна викликати з будь-якої точки основної програми. Файл з вихідним текстом процедури зазвичай має розширення *. Asm і компілюється будь-яким пакетом компіляторів мовою асемблер (MASM, TASM). Переваги окремо компільованих модулів на асемблері – це можливість використання програмного коду в додатках написаних на різних мовах та деякому випадку використання на різних ОС.

Інструментальні засоби розробки програм на мові Асемблер.

Для розробки програм на мові асемблер велика кількість інструментальних засобів, проте самими популярними є MASM 32. Вибір MASM 32, як середовища розробки програм виходять з слідуючих міркувань:

- MASM 32 є найбільш популярним середовищем програмування.

- MASM 32 дозволяє працювати з мультимедійними розширенням.

- Стандарти файлів прийняті в MASM 32 підтримуються великою кількістю компілятор на мові асемблеру.

- Стандарти і положення MASM 32 повністю сумісні і підтримуються в найбільш популярних середовищах розробки програмних продуктів.

Регістри.

Регістр – комірка пам’яті мікропроцесора розміром від 8 до 32 біт призначена для управління роботою процесора. З точки зору програміста всі регістри можна розподілити на дві частини.

Користувацькі регістри.

Користувацькі регістри. До них належать:

- Регістри загального призначення, що зберігають в пам’яті адреси даних

- Сегментні регістри, які зберігають адреси сегментів пам’яті.

Регістри з пів процесора використовуються в типах даних з плаваючою крапкою. Цілочисельні регістри типу mmx – призначені для роботи з мультимедійними даними.

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

- Регістри ознак (ФЛАГИ)

- Регістри показників.

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

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

- Регістри акумулятори – застосовуються для зберігання проміжних даних. В деяких командах мікропроцесора використання таких регістрів є обов’язковим. До них належать регістри типу:

Eax(32)/ax(16)/ah(8)/aL(8)

- Базові регістри – застосовуються для зберігання базової адреси деякого об’єкта в пам’яті мікропроцесора. До даних належать регістри типу:

Ebx/bx/bh/bL

- Регістр лічильник – застосовується в командах, які виконуються повторювальні дії. Його використання є часто неявним і прихованим в алгоритмі відповідної команди. До них належать:

Ecx/cx/ch/cL

- Регістр даних – за своїм призначенням працює так само як і регістр акумулятор. В деяких командах він використовується з метою збільшення діапазону пам’яті. До них належать:

Edx/dx/dh/dL

- Регістр індекс джерела – використовується в ланцюжкових операціях і містить поточну адресу елемента в ланцюжку джерелі. До них належать:

Esi/si

- Регістр приймач - використовується в ланцюжкових операціях і містить поточну адресу джерела прийняття даних. До них належать:

Edi/di

- Регістр покажчик стека – містить покажчик вершини стека поточному сегменті . До них належать:

Esp/sp

- Регістр покажчик база стеку – призначений для організації довільного доступу до даних всередині стека. До них належать:

Ebp/bp

Сегментні регістри.

У програмній моделі мікропроцесора є 6 сегментних регістри. Це регістри типу: КС, СС, DC, EC, GC ,FC. Існування такого типу регістрів зумовлено специфікою організації і використання пам’яті мікропроцесора. Вона полягає в тому що мікропроцесор апаратно підтримує структуру організації програми у вигляді 3 частин – сегментів. Така організація пам’яті називається – сегментною. Мікропроцесор підтримує наступні типи сегментів:

- Сегмент коду – містить команда для доступу до програми. Для використання цього сегмента служить регістр КС – сегментний регістр коду. Він містить в собі адресу сегмента з машинними командами до якого має доступ мікропроцесор .

- Сегмент даних – містить дані оброблювальні програмою. Для доступу до цього сегмента служить: DC – сегментний регістр даних, який зберігає адресу сегмента даних поточної програми.

- Сегмент стека – цей сегмент є областю пам’яті, що називається стеком. Роботу зі стеком мікропроцесор організовує наступним чином: Останній записаний в цю область елемент вибирається першим для доступу до цього сегмента служить регістр СС – сегментний регістр даних який містить адресу сегмента у стеку.Три останніх регістри є зарезервованими, тип доступу по них ініціалізується перериваннями при записі або читанні даних.

Організація роботи з пам’ятю.

Фізична пам’ять до якої мікропроцесор має доступ називається оперативною пам’ятю. На найнижчому рівні пам’ять комп’ютера як масив бітів. Для фізичної реалізації бітів і роботи з ними ідеальною підходить логічна схема побудована за принципом (0 і 1). Але мікропроцесору незручно працювати з пам’яттю на рівні бітів тому його робота з ОП побудована на рівні байтів. Механічне управління пам’яттю повністю апаратне , це означає, що програма не може сама сформувати фізичну адресу пам’яті на шині адрес, їй доводить підкорятися правилам мікропроцесора. Такий механізм дозволяє забезпечити:

- Компактність зберігання адрес в машинному коді.

- Гнучкий механізм адресації

- Захист адресних просторів задач у багатозадачних системах.

- Підтримку віртуальної пам’яті.

Мікропроцесор апаратно підтримує дві моделі використання ОП:

- Сегментну модель у якій для програм виділяється безперервна область пам’яті (сегмент), а саме програма може звертатися тільки до даних що знаходяться в області такого сегмента.

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

Сегментна модель пам’яті.

Сегментація – це механізм адресації, який забезпечує існування декількох незалежних адресних простора в межах однієї задачі. В основі механізму сегментації лежить поняття сегменту що є незалежним блоком пам’яті і підтримується на апаратному рівні.

Розрізняють 3 основні моделі сегментної організації пам’яті:

- Сегментна модель пам’яті реального режиму

- Захищеного режиму

- Суцільна модель пам’яті захищеного режиму.

Регістри ESP (SP) – покажчик пам’яті, який вказує на вершину стека. Також програмою може бути змінено регістр EIP – покажчик команд. Цей регістр вказує на інструкцію, яка буде виконуватись наступною . Значення цього регістра змін безпосередньо контролером процесора згідно з інструкціями отримання з пам’яті.

- Ознаки нуля 2F (Zero Flag) -1, якщо результат попередньої операції =0.

- Ознаки знаку SF (Sin Flag) -1, якщо результатом попередньої операції від’ємний.

- Ознака переносу CF (Carry Flag) -1, якщо біт був «перенесений» і cmd бітом, більшого порядку.

- Ознака переривання IF-1, якщо переривання процесором дозволенні

- Ознаки на пряму DF – використовуються для обробки рядків.

Специфікація типів даних

При програмуванні на мові асемблера використовуються дані наступних типів:

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

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

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

Ці два типи даних є елементарними, або базовими; робота з ними підтримується на рівні системи команд мікропроцесора. Використовуючи дані цих типів, можна формалізувати і запрограмувати практично будь-яке завдання. Але наскільки це буде зручно - ось питання.

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

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

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти