Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТ МП.doc
Скачиваний:
187
Добавлен:
10.02.2016
Размер:
5.13 Mб
Скачать

7.2.3 Програмна модель мп і8086

Вхідний контроль:

  1. Які вузли МП входять до програмної моделі МП?

  2. З якою метою кожний регістр МП І8086 має своє функціональне призначення?

Програмна модель МП І8086 показана на рис. 7.12.

Рисунок 7.12 – Програмна модель МП І8086

Регістри загального призначення (РЗП) AX, BX, CX, DXдопускають окреме використання їх молодших байтівAL, BL, CL, DLі старших байтівAН, BН, CН, DН. Тим самим забезпечується можливість операцій з байтами та словами і створюються умови для програмної сумісності МПІ8086 та МПІ8080.

Решта регістрів є неділимою, вони оперують 16-бітовими словами навіть у разі використання тільки їх молодшого або старшого байтів. Регістри-вказівники SPіBPта індексні регістриSIтаDIзберігають зміщення адреси у межах поточного сегмента пам’яті.

Регістри загального призначення, або регістри даних, призначені для тимчасового зберігання змінних або проміжних результатів:

– АХ– регістр-акумулятор – є регістр, в якому зберігається один із операндів перед деякими операціями, що виконуються в АЛП, та куди передається результат операції;

– ВХ– базовий регістр, який може використовуватися для формування базової адреси будь-яких змінних у пам’яті;

– DX– регістр додаткових даних у деяких операціях, в яких результат перевищує довжину розрядної сітки процесора; крім того, у командах введення-виведення цей регістр вміщує адресу порту;

– СХ– регістр-лічильник; у командах організації циклів за умовчанням використовується як лічильник циклів.

Група індексних регістрів та вказівників, яку утворюють регістри:

– ВР– вказівник бази;

– SI– регістр індексу джерела;

– DI– регістр індексу приймача;

– SP– вказівник стека;

– IP– вказівник команд.

Регістри ВР,SI,DIвикористовуються при формуванні адрес змінних або для зберігання проміжних даних або результатів.

Індексні регістри SIіDIу режимі автоінкрементування та автодекрементування використовуються, здебільшого, для адресування елементів масивів. Вони можуть використовуватись також для зберігання проміжних результатів.

Вказівник стека SPадресує вершину стека, особливо організованої області (сегмента) пам‘яті.

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

– CS– регістр сегмента команд;

– SS– регістр сегмента стека;

– DS– регістр сегмента даних;

– ES– регістр додаткового сегмента даних.

Регістр CSразом з регістром вказівника командІРвикористовується для обчислення адреси наступної виконуваної команди.

Регістр SSразом з вказівником стекаSPвикористовується для визначення адрес у сегменті стека. При роботі з підпрограмами адреси стекової пам’яті формуються з використанням регістраSSта вказівника базиBP.

Регістр DSвизначає область пам’яті, де зберігаються змінні, що використовуються у програмі. Адреси цих змінних визначаються з використанням регістрівBX, SI, DI.

Регістр ESадресує сегмент пам’яті під час операцій з рядками.

Довжина сегментних регістрів становить 16 розрядів, тому операції з сегментними регістрами є операціями зі словами, які називаються селекторами.

Регістр вказівника (лічильника) команд ІР, призначений для адресування в середині поточного сегмента коду. Вказівник команди прямо у командах не вказується, але бере участь в усіх командах передавання управління (умовних та безумовних переходів, виклику підпрограм, повернення з підпрограм тощо). У програміста немає можливості безпосередньо змінювати вміст регістраІР.

Регістр прапорців FLAGSзберігає інформацію про ознаки результату.

АЛП призначений для виконання арифметичних та логічних операцій над 16-розрядними або 8-розрядними числами.

Регістр прапорців FLAGSвміщує 16 бітів, але не всі з них зайняті ознаками результату. AЛП виставляє 9 прапорців:

– CF(0) – прапорець перенесення, дорівнює 1, коли результат операції виходить за межі розрядної сітки;

– PF(2) – прапорець парності кількості одиничних бітів у молодшому байті результату, установлюється в 1, коли кількість одиничних бітів парна;

– AF(4) – прапорець додаткового перенесення, установлюється в 1, коли є перенесення або позика для третього біта результату;

– ZF(6) – прапорець нульового результату, установлюється в 1, коли результат операції дорівнює 0;

– SF(7) – прапорець знака, дублює стан найстаршого біта результату, при роботі з числами зі знакамиSFвизначає знак числа – для додатних чиселSF = 0, для від’ємних= 1;

– TF(8) – прапорець трасування, що використовується при налагодженні програм у покроковому режимі, в який переводиться МП приTF= 1;

– IF(9) – прапорець переривань, якщоIF= 1, переривання дозволені;

– DF(10) – прапорець напряму, використовується у командах роботи з рядками, якщоDF = 0, вміст регістрівSIтаDIзбільшується і рядок обробляється зліва направо, приDF = 1 – навпаки;

– OF(11) – прапорець переповнення,OF = 1 установлюється при перебільшенні результату операції над числами зі знаком допустимого діапазону.

Первісне завантаження регістрів загального призначення АХ, ВХ, СХ, DXта їхніх частин, а також вказівників та індексних регістрівSP, BP, SI, DIможливе за допомогою безпосереднього адресування. Завантаження сегментних регістрівSS, DS, ESможе реалізуватися через акумуляторАХ. Регістр командного сегментаCSє програмно недоступний і завантажується системою програмування, наприклад,TASM.

Приклади завантаження регістрів:

MOV AX,1234H ;

;

Завантаження 16-розрядного регістра АХ числом 1234Н

MOV AX,1234H ;

;

Завантаження 16-розрядного акумулятора числом 1234Н

MOV AH,34H ;

;

Завантаження старших восьми розрядів акумулятора числом 34Н

MOV AL,12H ;

;

Завантаження молодших восьми розрядів акумулятора числом 12Н

MOV BP,400H ;

Завантаження вказівника бази числом 400Н

MOV SP,200H ;

Завантаження вказівника стека зміщенням 200Н

MOV SS,AX ;

;

Завантаження сегментного регістра SS початковою адресою сегмента 3412Н з АХ

MOV DS,AX ;

;

Завантаження сегментного регістра DS початковою адресою сегмента 3412Н з АХ

MOV ES,AX ;

;

Завантаження сегментного регістра ES початковою адресою сегмента 3412Н

MOV SI,400H ;

;

Завантаження індексного регістра SI початковим зміщенням 400Н

PUSH BX ;

Завантаження вершини стека з ВХ

POP CX ;

Перевантаження стека до СХ

MOV AX,CS ;

Запам’ятовування сегментного регістра кодів у АХ

PUSH AX ;

Завантаження АХ до стека

POP BX ;

Перевантаження стека до ВХ

MOV SS,BX ;

Завантаження SS з ВХ

MOV AX,0000H ;

Обнулення регістра АХ

PUSH DS ;

Ініціалізація стека початковою адресою

PUSH AX ;

Ініціалізація стека нульовою адресою

Контрольні питання:

  1. Яке функціональне навантаження несуть регістри загального призначення у МП І8086?

  2. Як обчислюється виконавча адреса у МП І8086?

  3. Як реалізується первинне завантаження сегментних регістрів?

Контрольні питання підвищеної складності:

  1. Напишіть фрагмент програми, який би обмінював вміст регістрів BXтаDXза допомогою стека.

  2. Як можна завантажити, на Ваш погляд, сегментний регістр кодів CS?