Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга_Вычисл техн и микропроц_2 автора_130709.doc
Скачиваний:
9
Добавлен:
07.05.2019
Размер:
5.26 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?