Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба №2, протокол (програмування).doc
Скачиваний:
0
Добавлен:
12.11.2018
Размер:
75.26 Кб
Скачать

Міністерство освіти та науки України

Національний технічний університет України

«Київський політехнічний інститут»

Лабораторна робота №2

Тема: «організація керування пам’яттю в програмах на мові асемблера»

Виконав:

студент 3-го курсу

ФАКС, групи ВВ-92

Семенюк Р.С.

Київ, 2011

Мета виконання роботи – вивчення правил роботи з сегментами проrpaми на мовi асемблера, директивами визначення даних, ознайомлення з органiзацiею пересилок даних.

2.1. Теоретичнi відомоcтi

2.1.1. Ceгмeнтнa органiзацiя пам 'ятi

У реальному режимi процесор може адресувати пам'ять об'ємом до 1 Мб. Звернення до пам'ятi здійснюється за допомогою сегментних регістрiв, кожен iз яких забезпечує доступ до одного iз логiчних сегментiв пам'ятi об'ємом до 64 Кб. 16-розряднi ceгмeнтнi регiстри (cs. ds. es. ss) мiстять 16 старших розрядiв 20-­розрядних початкових адрес ceгмeнтiв (молодші чотири розряди - нульовi). Регістр cs мiстить поточну адресу сегмента коду, звiдки в процесор пересилаються коди виконуваних команд. При цьому змiщення команди у ceгмeнтi визначається вмістом показчика команд ip. Регістр ss вказує на початок поточного сегмента стеку. Регістр ds мiстить адресу основного (поточного) сегмента даних програми (за замовчуванням, при зверненнi до даних у пам’яті процесор використовує саме ds). За наявнocтi додаткового сегмента даних для його адресування можна використовувати регістр es. Таким чином, процесор може одночасно працювати з чотирма різними сегментами програми.

Прогрaмiст мовою асемблера працює з двома складовими логічної адреси пам' ятi: сегментної i вiднoсної адреси (змiщення комiрки вiдносно початку сегмента). Biднocнa адреса змiнниx визначається транслятором при асемблюваннi програми. Перший байт сегмента мaє змiщення 0 (0000 у лiстингу), наступний - 1, дaлi - 2, 3, ...

2.1.2. Визначення змiнних

Для змiнниx у прогрaмi потрiбно визначити мiсце (тобто сегмент), де буде зберiгатись змiнна, її iм'я, тип i, в разi потреби, початкове значення. Загалом, прогрaмiст може визначати дaнi в будь-якому iз ceгмeнтiв програми, але так, щоб їx коди не сприймались як коди команд, i забезпечувалось правильне звернення до них. Iм'я змiнної транслятор пов'язує з її змiщенням у ceгмeнтi (лiстинг). Тип змiнної – ­це кiлькiсть байтiв, яка необxiдна для розмiщення змiнної в пам'ятi i передбачається при звертаннi до цiєї змiнної за її iм'ям.

Тип, значення i розподiл змінних у пам'ятi визначається директивами db, dw, dd – для основного процесора i dd, dq i dt - для математичного спiвпpoцесора:

db – визначає змiннy типу byte. Kpiм цiлочислових даних розмiром 1 байт, також можна визначати символьний рядок, оскiльки один його елемент займає 1 байт пам' ятi;

dw – визначає змiннy типу word (слово цiлочислових чи адресних даних, при цьому молодша частина значення розмiщyєтьcя в бaйтi з меншою адресою, а старша ­в байтi з бiльшою адресою);

dd - визначає змiннy типу dword (подвiйне слово цiлочислових адресних або арифметичних даних для основного пpoцесора, у якому за меншою адресою зберiгaється молодше слово, а для арифметичного пpoцесора - даних у формi з плаваючою точкою);

dq,dt - визначають вiдпoвiднo змiннi типу qword (8 байт), tbyte (10 байт).