Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
gosi_-_kopia.docx
Скачиваний:
36
Добавлен:
18.03.2015
Размер:
155.67 Кб
Скачать

6.Режими адресації даних і режими адресації командних переходів в мікропроцесорі intel 8086/8088. Запис режимів в командах в Асемблері

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]