Всього книг:

139

Останнє оновлення:

 2012-02-24 10:46:24

 

Реклама

 




 

 

Наші Друзі

rozvAGA!info - Приколи,фото,дівчата,он-лайн ігри,форум,телепрограма

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Основи програмування : Огляд асемблеру IBM PC

Електронна бібліотека. Художня та наукова література.

 

 

 

Основи програмування:Огляд асемблеру IBM PC

 

загрузка...

Процесори Intel

Як відомо, фірма IBM випустила свій перший персональний комп'ютер серії IBM PC у 1981 р. У комп'ютерах цієї серії використовувалися процесори фірми Intel: 8086 або 8088. Обидва ці процесори були 16-розрядними, тобто регістри мали місткість 16 розрядів (2 байти). Обидва процесори були ідентичними за архітектурою, але мали різні шини даних (16 розрядів для 8086 та 8 розрядів для 8088). Процесор 8088 був більш дешевим, і це зумовило його більше поширення.
Система команд процесорів 8086/8088 стала основою подальшого розвитку Intel-сумісних процесорів. Був забезпечений принцип зворотної сумісності: практично будь-яка програма, написана для 8086/8088, могла виконуватися і на більш нових процесорах.

* Можна відмітити такі найважливіші модифікації Intel-сумісних процесорів: збільшення розрядності;
* математичні співпроцесори. Процесори 8086 і 8088 не мали у своєму складі ніяких засобів для операцій з дробовими числами. Ці операції доводилося спеціально програмувати; до того ж виконання операцій з плаваючою точкою дуже сповільнювало роботу процесора. Тому невдовзі фірма IBM почала випуск комп'ютерів, які мали, крім основного процесора, математичний співпроцесор, система команд якого була призначена для операцій з плаваючою точкою. Починаючи з 486-го процесора, співпроцесор входить до складу основного процесора;
* захищений режим, який з'явився починаючи з 286-го процесора і був стандартизований починаючи з 386-го. Основним призначенням захищеного режиму стала апаратна підтримка багатозадачності;
* конвейєри;
* система команд MMX та її подальші модифікації, яка забезпечило можливість одночасного виконання операцій над декількома числами.

Виділяють три режими роботи Intel-сумісних процесорів:

* реальний режим - процесор у реальному режимі працює так, як працював би 8086/88. В реальному режимі, зокрема, працює DOS і програми під DOS;
* захищений режим, який забезпечує підтримку багатозадачності;
* режим віртуального 8086/88, який імітує одночасну роботу декількох процесорів, кожний з яких працює в реальному режимі.

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

Асемблер IBM PC

Як і для будь-якої іншої мови асемблеру, для мови асемблеру IBM PC характерна чітка відповідність між командами асемблеру та машинними командами (деяке послаблення цього принципу, а саме наявність макрокоманд, кожна з яких відповідає певній послідовності команд, не змінює основнї суті).
Cлід чітко розрізняти мову асемблеру та власне асемблер. Асемблер являє собою програму, яка здійснює асемблювання, тобто яка сприймає текст, написаний мовою асемблеру, і перекладає його на мову машинних команд. Втім, відповідно до загальноприйнятої практики, ми будемо називати мову асемблеру просто асемблером: з контексту, як правило, зрозуміло, про що йде мова. Команди асемблеру передбачають безпосереднє звернення до регістрів процесора, до певних ділянок оперативної пам'яті та до зовнішніх пристроїв. Тому для програмування на асемблері необхідно мати достатнє чітке уявлення про архітектуру комп'ютера та про внутрішню будову процесора.
У переважній більшості випадків асемблерні команди записуються у вигляді
ім'я_команди <операнди>,
де кількість операндів визначається адресністю команди. Команди можуть супроводжуватися мітками, які використовуються при переходах. Крім того, і команди, і операнди можуть супроводжуватися додатковими префіксами та операторами. Префікси та оператори мають різне призначення, наприклад, за допомогою операторів byte ptr або word ptr можна вказати, як слід інтерпретувати дані (відповідно однобайтові чи двобайтові).
Існує декілька асемблерів для IBM PC. Найбільш популярним є Turbo Assembler, який має два синтаксичних стандарти: MASM (більш звичний стандарт) та Ideal.
Крім того, необхідно знати, що багато систем програмування мають в своєму складі вбудовані асемблери, і це дозволяє поєднати переваги мов високого рівня з перевагами асемблеру.

Особливості адресації даних в процесорі 8086/88

Під адресацією даних мається на увазі звернення процесору до даних, які можуть розміщуватися в оперативній пам'яті, регістрах або бути вказані безпосередньо в самій команді.
Перш за все, програми реального режиму розраховані на так звану "сегментну організацію пам'яті". Процесори 8086 і 8088 мають 20-розрядну шину даних, і це дозволяє процесорові адресувати 1 Мб оперативної пам'яті. Але самі регістри є 16-розрядними, і тому в них можуть зберігатися лише 16-розрядні адреси.
Сегментна організація пам'яті якраз і була запропонована як засіб для виходу з такого становища. Відповідно до цього, адреси ділянок оперативної пам'яті складаються з двох частин і записуються у вигляді сегмент:зміщення. Наприклад, якщо кажуть, що "дане розміщується за адресою B800h:0010h", то це означає, що сегмент (ділянка пам'яті), в якому розміщується дане, починається з адреси B800h, а саме дане знаходиться на відстані 0010h від початку сегменту. Символ "h" в кінці числа означає, що це число записане в шістнадцятковій системі числення.
Якщо подібну адресу слід запам'ятати в регістрах процесора, то сегментна адреса (початок сегменту) розміщується в одному з регістрів, а зміщення - в іншому регістрі. При зверненні до відповідної ділянки пам'яті процесор обчислює її реальну адресу таким чином: домножує сегментну адресу на 16 і додає до отриманого числа зміщення. Розмір сегменту та величина зміщення не повинні перевищувати 64К.
Для отримання зміщення певної ділянки пам'яті можна використовувати оператор offset.

* Aсемблерна програма працює з трьома основними сегментами: сегмент коду, в якому розміщуються команди, які виконуються;
* сегмент даних, в якому розміщуються дані, потрібні програмі;
* сегмент стеку, типовим використанням якого є виклик процедур та переривань.

Приклад програми на асемблері

Асемблерні програми можуть мати один з двох форматів: com або exe (що відповідає стандартним розширенням DOS та Windows). Розмір програми в com - форматі не перевищує 64К, і вона має один сегмент (тобто сегменти коду, стеку та даних співпадають). Програма в exe -форматі може мати декілька сегментів.
Іншою особливістю реального режиму є так званий "бар'єр 640 К". Справа в тому, що для програм, які працюють в реальному режимі, доступними є лише 640К оперативної пам'яті; решта використовується операційною системою для своїх потреб.
Для процесора IBM PC виділяють декілька режимів адресації, які будуть описані нижче.

Регістри процесора

Процесор 8086/88 має у своєму складі такі регістри, кожний з яких є 16-тирозрядним (тобто двобайтовим):

1. Регістри загального призначення: AX, BX, CX, DX. Ці регістри можуть використовуватися для зберігання довільних даних. Втім, деякі з цих регістрів можуть використовуватися в спеціальних цілях (наприклад, в регістрі АХ залишається результат певних арифметичних операцій, регістр СХ часто використовується як лічильник циклу і т.п.). Кожний з цих регістрів складається з двох незалежних однобайтових регістрів (AH і AL, BH і BL, CH і CL, DH і DL).
2. Сегментні регістри: CS, DS, SS, ES. В регістрі CS зберігається адреса сегменту коду (тобто адреса, з якої починається сегмент коду), в регістрах DS, SS, ES - адреси відповідно сегменту даних, сегменту стеку та додаткового сегменту. Зрозуміло, що спроби використати ці регістри з іншою метою, як правило, призводять до фатальних помилок під час роботи програми.
3. Регістри-вказівники: SI, DI, SP, BP.
4. Вказівник команд (або програмний лічильник) IP. Вказує на чергову команду, яка повинна виконуватися. Точніше кажучи, значенням цього регістру є зміщення чергової команди відносно початку сегменту коду. Повною ж адресою чергової команди є CS:IP. Цей регістр є програмно недоступним. Він автоматично змінюється при переході до наступної команди. Крім того, значення IP (а в деяких випадках і CS) змінюється при виконанні команд циклу та переходів, викликах процедур.
5. Регістр прапорців. Фактично це регістр стану процесора. В ньому міститься інформація про стан процесора та про хід виконання програми. Кожний прапорець має розмір 1 біт. `Використовуються 9 прапорців:
* CF - прапорець перенесення;
* PF - прапорець парності; встановлюється в 1, якщо молодший байт результату попередньої команди містить парне число одиничних бітів, і в 0, якщо непарне;
* AF - додаткове перенесення;
* ZF - прапорець нуля. Встановлюється в 1, якщо результат попередньої команди дорівнює нулеві;
* SF - прапорець знака; дорівнює старшому бітові результата;
* TF - прапорець пастки;
* IF - прапорець переривання;
* DF - прапорець напрямку;
* OF - прапорець переповнення.

Існують спеціальні команди для зміни окремих прапорців.
Наприклад, команди cli i sti для зміни прапорця IF, який визначає, чи дозволено переривання, чи ні. cli - переривання дозволено, sti - не дозволено. Два малюнки нижче ілюструють зміну прапорців при покроковому виконанні паскалівської програми. На першому малюнку - початковий стан прапорців, на другому - після двох виконаних кроків.

Переривання
Переривання - подія, що виникає в комп'ютері і яку треба обробити. Обробити - не що інше, як викликати певну процедуру, обробник переривання.
У MS-DOS існує така класифікація переривань:

* Апаратні - пов'язані з сигналом від зовнішнього пристрою;
* Внутрішні - переривання, що генеруються самим процесором;
* Програмні - генеруються програмою і викликають процедуру обробки переривань.

Команда звернення до переривання - int <номер_переривання>. Це далекий виклик переривань, він змінює регістри CS і IP.
Повернення з обробника переривань - iret. Ця команда відновлює змінені регістри, які зберігаються на стеку.

Резидентні програми

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

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

Наприклад
21h - переривання,
31h - функція, яка залишає в пам'яті обробник переривання.
Деякі важливі переривання

INT 10h
переривання, що використовується для викликів функцій відеосервісу BIOS. Деякі підфункції:

* 00h - встановлення кольорового регістру
* 01h - встановлення кольору краю екрану
* 02h - встановлення кольорових регістрів палітри

INT 16h
переривання дає можливість отримати код натискання клавіші, не перехоплюючи обробник переривання INT 9. Деякі підфункції:

* 11h - перевірка символа
* 05h - помістити символ в буфер клавіатури
* 12h - зчитати стан клавіатури

INT 33h
через це переривання в MS DOS виконується все спілкування з мишкою

* 0 - ініціалізація миші
* 1(2) - показати(сховати) курсор
* 3 - визначити стан миші

INT 8
переривання системного таймера, викликається 18,2 рази в секунду
INT 9
переривання клавіатури, викликається під час кожного натискання та відпускання клавіші на клавіатурі
INT 0Bh
переривання послідовного порта COM2, викликається, якщо порт отримав дані
INT 70h
переривання годинника реального часу, викликається годинником реального часу, якщо зпрацьовує будильник



Команди роботи з портами

Кожен порт слід розглядати як певну сукупність засобів, що забезпечують взаємодію між процесором і зовнішніми пристроями.
Це дає можливість організувати роботу із зовнішніми пристроями в обхід DOS-переривань, тобто програмування контролерів зовнішніх пристроїв.
IN - команда для читання з порту (інформація пересилається в регістр al або ax), зворотня команда - OUT - виведення певного значення в порт. Формат запису:
in <суматор> <номер_порту>
out <номер_порту> <суматор>

Попереднє питання | Змiст | Наступне питання

 

Увага!

1. Всі книги та матеріали належать їх авторам.
2. Призначені для приватного перегляду.
3.Будь-яке комерційне використовування їх категорично заборонене.

 

 


Content-Pro | 2006-2015

Контакти:

317197170