Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод упоряд-ПОСЛЕДНЯЯ-МП.doc
Скачиваний:
35
Добавлен:
20.02.2016
Размер:
5 Mб
Скачать

2.3.3. Система команд спвв

Система команд СПВВ включає 53 мнемокоди. Використовувані операнди можуть бути розміщені в просторі адрес уведення – виводу, у системному просторі адрес, у регістрах каналу або безпосередньо в команді. Типовий формат більшості команд процесора представлений на мал. 4.22. Будь-яка команда містить від двох до п'яти байт, за винятком команд LPDI, MOV, MOVB, що досягають шести байт. Перші два байти визначають дії, які повинна виконати команда. Байти із третього по п'ятий є необов'язковими й присутні тільки тоді, коли для адресації використовується зсув і/або операнд безпосередньо представлений у команді.

Перший байт команди містить наступні керуючі поля:

w указує довжину операнда: один байт при w = 0 і два байти при w = l;

АА задає режим адресації, тобто спосіб формування виконавчої адреси ЕА операнда (мал. 4.23), розміщеного в адресному просторі:

АА = 00 – адресація по базі;

АА = 01 – адресація по базі зі зсувом;

АА=10 – адресація по базі з індексом;

АА=Н -адресація по базі з автоінкрементним індексом;

WB визначає число байтів зсуву/даних:

WB = 00 – немає байтів зсуву/даних;

WB = 01 -один байт зсуву/даних;

WB = 10 – два байти зсуву/даних;

WB = 11 -тільки в команді TSL;

R/B/P визначає регістр або номер розряду байта (табл. 4.6), використовуваний у якості операнда.

Таблиця 4.6

Код В/В/Р

Регістр

Біт

000

GA

0

001

GB

1

010

GC

2

011

ВС

3

100

ТР

4

101

IX

5

110

СС

6

111

МС

7

Другий байт команди містить код операції (КІП) і поле ММ, що визначає регістр каналу, використовуваний у якості базового при будь-якому режимі адресації (мал. 4.23):

ММ = 00 – регістр GA, ММ = 10 – регістр GC,

ММ = 01 – регістр GB, ММ = 11 – регістр PP.

Байти зсуву використовуються для формування виконавчої адреси ЕА операнда при адресації по базі зі зсувом, а також у командах передачі керування – один байт для передач у межах від + 127 К – 128 байтів або два байти для передач у межах 64 Кбайт. Байти даних використовуються в командах, що оперують безпосередніми даними.

Повна система команд СПВБ представлена в табл. 4.7. Для кожної команди зазначене необхідне для її виконання число тактів залежно від типу операндів. Два значення зазначене для команд, які використовують операнд, розміщений в адресному просторі: перше (менше) – для слів, розташованих по парній адресі й переведених по 16-бітовій шині; друге (велике) -для слів, розташованих по непарній адресі з 16-бітової шиною або для довільно розташованих слів з передачею по 8-бітової шині даних.

3. Розрахунок адресного простору пам’яті та портів

Розміщення байтів і слів у пам'яті. Пам'ять логічно організована як одномірний масив байтів, кожний з яких має 20-бітову фізичну адресу в діапазоні 00000 – FFFFF. (Для запису адрес тут і далі використовується 16-ричная система числення.) Будь-які два суміжних байти в пам'яті можуть розглядатися як 16-бітове слово. Молодший байт слова має менша адреса, а старший – більший. Адресою слова вважається адреса його молодшого байта. Таким чином, 20-бітова адреса пам'яті може розглядатися і як адреса байта, і як адреса слова.

Повна інформація, необхідна для визначення фізичної адреси, утримується в адресному об'єкті «сегмент : зсув», що називається покажчиком адреси й містить адреса сегмента й внутрішньо-сегментний зсув. Для запам'ятовування покажчика адреси потрібно два слова пам'яті, причому слово з меншою адресою завжди містить зсув, а слово з більшою адресою – базова адреса сегмента (мал. 1.5). Кожне слово зберігається звичайним чином.тобто за принципом «молодший байт – по меншій адресі».

Команди, байти й слова даних можна вільно розміщати по будь-якій адресі, що дозволяє заощаджувати пам'ять завдяки її щільному впакуванню. Однак для економії часу виконання програми доцільно розміщати слова даних у пам'яті по парних адресах, тому що МП передає такі слова за один цикл шини. Слово з парною адресою називається вирівняним на границі слів. Слова з непарними адресами (невирівняні) також припустимі, але для їхньої передачі потрібні два цикли шини, що знижує продуктивність МП. (Кожний цикл має чотири обов'язкових такти Т.) Відзначимо, що шинний інтерфейс ініціює необхідне для вибірки слова число звертань до пам'яті автоматично, так що дворазове звертання до пам'яті не вимагає спеціальної вказівки в програмі. Особливо важливо мати вирівняні слова для операцій зі стеком, тому що в них беруть участь тільки слова. Отже, покажчик стека SP необхідно завжди ініціалізувати на парну адресу.

Команди завжди вибираються словами по парних адресах, за винятком першої вибірки після передачі керування по непарній адресі, коли вибирається один байт. Потік команд розділяється на байти при заповненні черги команд усередині МП, так що вирівнювання команд не впливає на продуктивність і тому не використовується.

Сегментація пам'яті й обчислення адрес. Простір пам'яті ємністю 1 Мбайт представляється як набір сегментів, обумовлених програмним шляхом. Сегмент складається із суміжних комірок пам'яті і є незалежною й окремо адресуемою одиницею пам'яті ємністю 64 Кбайт. Кожному сегменту програмою призначається початковий (базовий) адреса, що є адресою першого байта сегмента в просторі пам'яті. Початкові адреси чотирьох сегментів, обраних у якості поточних, записуються в сегментні регістри CS, DS, SS і ES, тим самим фіксуються поточні сегменти коду (програми), даних, стека й додаткових даних. Для звертання до команд і даних, що перебуває в інших сегментах, необхідно змінювати вміст сегментних регістрів, що дозволяє використовувати весь простір пам'яті ємністю 1 Мбайт. Сегментні регістри ініціалізуються на початку програми шляхом засилання в них відповідних констант. Окремий випадок завантаження всіх сегментних регістрів нулями приводить до організації пам'яті, характерної для ВМ80, тобто фактично до відмови від сегментації пам'яті.

У сегментному регістрі зберігається 16 старших бітів 20-бітової початкової адреси сегмента. Чотири молодших біти адреси приймаються рівними нулю й дописуються праворуч до вмісту сегментного регістра при обчисленні фізичних адрес комірок пам'яті. Тому початкові адреси сегментів завжди кратні 16. Оскільки інших обмежень на розміщення сегментів у пам'ять, сегменти можуть бути сусідніми (суміжними), що не перекриваються, частково або повністю перекриваються. Фізична комірка пам'яті може належати одному або декільком сегментам.

Фізична адреса комірки пам'яті представляє 20-бітове число в діапазоні 0 – FFFFF, що однозначно визначає положення кожного байта в просторі пам'яті ємністю 1 Мбайт. На початку кожного циклу шини, пов'язаного зі звертанням до пам'яті, фізична адреса видається на шину адреси й супроводжується сигналом ALE. Тому що МП ВМ86 є 16-бітовим, те всі операції при обчисленні фізичної адреси виробляються з 16-бітовими адресними об'єктами.

Логічна адреса комірки пам'яті складається із двох 16-бітових без знакових значень: початкової адреси сегмента, що називається також просто базою або сегментом, і внутрішньо-сегментного зсуву, що визначає відстань від початку сегмента до цього осередку . Для обчислення фізичної адреси база сегмента зрушується вліво на 4 біт і підсумується зі зсувом, як показано на мал. 1.6, де також наведені можливі джерела компонентів логічної адреси (ЕА – ефективна адреса, що обчислюється відповідно до заданого способу адресації).

Перенос зі старшого біта, що може виникнути при підсумовуванні, ігнорується. Це приводить до так званої кільцевої організації пам'яті, при якій за осередком з максимальною адресою FFFFF треба осередок з нульовою адресою. Аналогічну кільцеву організацію має й кожний сегмент.

Джерела логічної адреси для різних типів звертання до пам'яті наведені в табл. 1.14. Команди завжди вибираються з поточного сегмента коду відповідно до логічної адреси CS: IP. Стекові команди завжди звертаються до поточного сегмента стека за адресою SS:SP. Якщо при обчисленні адреси ЕА використовується регістр ВР, то обіг виробляється також до стековому сегмента. В останньому випадку принцип стека «перший прийшов – останній вийшов» ігнорується й осередку стекового сегмента розглядаються як ОЗУ з довільною вибіркою, що забезпечує більшу гнучкість у використанні цих осередків.

Таблиця 1.14

Тип звернення до пам’яті

Сегмент

(за умовчуванням)

Варіант

Зміщення

Вибір команди

CS

Немає

IP

Стекова операція

S5

Немає

SP

Змінна

D5

CS,SS,ES

EA

Ланцюг-джерело

DS

CS,SS,ES

SI

Ланцюг-приймач

ES

Немає

DI

ВР як базовий регістр

ES

CS.SS.DS

EA

Операнди, як правило, розміщаються в поточному сегменті даних, і звертання до них організується за адресою DS:EA. Однак програміст може змусити МП звернутися до змінної, що перебуває в іншому поточному сегменті. Уважається, що ланцюжок-джерело перебуває в поточному сегменті даних, а її зсув задається регістром SI. Ланцюжок-Одержувач обов'язково розташовується в поточному Додатковому сегменті, а зсув береться з регістра DI. Команди обробки ланцюжків автоматично модифікують уміст індексних регістрів SI і DI у міру просування по ланцюжку в напрямку, що відповідає прапору DF.

Зміна сегментного регістра відповідно до варіантів, зазначеними в табл. 1.14, здійснюється за Допомогою однобайтового префікса заміни сегмента 001SR110, що ставиться перед першим байтом команди. Двухбітове поле SR містить код сегментного регістра, використовуваного для обчислення фізичної адреси в даній команді: 00 – регістр ES; 01 -CS, 10 – SS; 11 – DS. У мнемонічних позначеннях команд зміна сегмента відбивається в такий спосіб: MOV AX, CS: [BX] – пересилання в АХ слова з кодового сегмента зі зсувом з BX; ADD ES:ROW[DI], BL – Додавання байта з додаткового сегмента (зі зсувом + ROW) із умістом регістра BL і розміщення результату в ОЗУ на місце першого доданка.

Сегментна структура пам'яті забезпечує можливість створення позиційно незалежних або динамічно переміщуваних програм, що необхідно в мультипрограмному середовищі для ефективного використання оперативної пам'яті. Щоб забезпечити позиційну незалежність, всі зсуви в програмі повинні задаватися щодо фіксованих значень, що втримуються в сегментних регістрах. Це дозволяє довільно переміщати програму в адресному просторі пам'яті, змінюючи тільки вміст сегментних регістрів.

Стік, як звичайно, організується в ОЗУ, і його положення визначається вмістом регістрів SS і SP. Регістр SS зберігає базова адреса поточного сегмента стека, а регістр SP указує на вершину стека, тобто містить зсув вершини стека в стековом сегменті. При кожному звертанні до стеку пересилається одне слово, причому вміст SP модифікується автоматично: при записі (включенні) у стек воно зменшується на два, при читанні (добуванні) зі стека – збільшується на два.

Організація уведення – виводу. Уведення й вивід даних може здійснюватися двома способами: з використанням адресного простору уведення – виводу, і з використанням загального з пам'яттю адресного простору, тобто з відображенням на пам'ять.

При першому способі застосовуються спеціальні команди IN (уведення) і OUT (вивід), які забезпечують передачу даних між акумуляторами AL або АХ і адресуємими портами. При виконанні цих команд виробляється сигнал М/Ю = 0, що ідентифікує вибір простору уведення – виводу й у сукупності із сигналами WR і RD дозволяє сформувати системні сигнали IOW і IOR для керування операціями запису даних у порт і читання з порту.

Команди IN і OUT можуть використовувати пряму адресацію, коли адреса порту втримується у вигляді константи в другому байті команди, і непряму адресацію, коли адреса розташовується в регістрі DX. У першому випадку можна адресувати по 256 портів для уведення й виводу даних. У другому забезпечується адресний простір до 64К 8-бітових портів або до 32К 16-бітових портів. Непряма адресація дозволяє обчислювати адреси портів при виконанні програми й зручна при організації обчислювальних циклів для обслуговування декількох портів за допомогою однієї процедури.

Вісім осередків F8 – FF у просторі уведення – виводу зарезервовані для системних цілей, і використовувати їх у прикладних програмах не рекомендується.

При другому способі адреси портів розміщаються в загальному адресному просторі, і звертання до них не відрізняється від звертання до комірок пам'яті. Це підвищує гнучкість програмування, тому що для уведення – виводу можна використовувати будь-яку команду зі зверненням до пам'яті при будь-якому способі адресації. Так, команда MOV дозволяє передавати дані між будь-яким загальним регістром або коміркою пам'яті й портом уведення – виводу, а логічні команди AND, OR, XOR і TEST дозволяють маніпулювати бітами в регістрі порту. При цьому, однак, варто враховувати, що команди зі зверненням до пам'яті мають більший формат і виконуються довше, ніж прості команди IN і OUT. Крім того, трохи ускладнюється дешифрування 20-бітової фізичної адреси порту й скорочується число адрес, які можуть використовуватися для комірок пам'яті.

Мікропроцесор може передавати по шині байт або слово в/із ВУ. Щоб слово передавалося за один цикл шини, адреса ВУ повинен бути парним. Адреса байтового ВУ може бути парний або непарним, і відповідно порти цих зовнішніх пристроїв підключаються К ліній молодшого й старшого байта шини даних. Для роздільного звертання до цих портів дешифрування адрес здійснюється з урахуванням сигналів на лініях ПОЗА і АТ.

Приклад розрахунку. У даній схемі необхідно розрахувати адресний простір пам'яті для 110кбайт ОЗП і 90кбайт ПЗП, а також адресний простір введення – виводу для таймера, контроллера переривань, одного порту введення і трьох портів виводу. Для ОЗП використовуємо мікросхему К537РУ17, для ПЗП – К558РФ4. Ємкість мікросхем – 8 КБ, мінімальний об'єм інформації, що адресується, – 1 Б.

Оскільки необхідно забезпечити роботу, як із словом, так і з окремим байтом, підключимо мікросхеми попарно, причому 8 старших розрядів шини даних підключаємо до однієї мікросхеми, 8 молодших до іншої. Таким чином, отримуємо певну кількість пар мікросхем, до складу яких входить старша і молодша мікросхеми. Забезпечення вибору потрібної мікросхеми забезпечується сигналами А0 і BHE (таблиця. 2). Ці сигнали, проходячи через інвертори, підключаються до виходу CS2 старшій і молодшій мікросхемі відповідно.

На кожну пару мікросхем необхідно виділити 16 КБ адреси з адресного простору. Щоб дізнатися, скільки пар мікросхем знадобиться в даному випадку, для ОЗП поділимо 110/16=6.875, округляючи до більшого отримаємо 7 пар мікросхем, для ПЗП поділимо 90/16=5.625, округляючи до більшого отримаємо 6 пар мікросхем.

У таблицях 7 і 8 для кожної з 14 мікросхем ОЗП і 12 ПЗП, відповідно, позначені адреси першого і останнього елементу пам'яті в шістнадцятиричному і двійковому форматах. У старших мікросхемах всі адреси непарні, тобто А0=0, в молодших – непарні, тобто А0=1. На адресні клеми мікросхем пам'яті А0-а12 подаються адреси з шини адреси А1-а13. Для вибору потрібної пари використовується дешифратор Dd42. На його адресних клеми А0-а3 подаються сигнали з шини адреси А14-а17.

У таблиці 9 показаний розподіл адресного простору пристроїв введення – виводу для даної системи. Оскільки ці пристроїв небагато, можна ідентифікувати їх по двох перших розрядах шістнадцятиричної адреси. Причому старший розряд ідентифікує пристрій, до якого звертаються, а молодший – конкретніший порт пристрою. Таким чином, порти введення мають адреси 00-0f, виводу – 10-1f, контроллер переривань – 20-2f, таймер – 30-3f. Старший розряд адреси подається на дешифратор Dd43, молодший на Dd44. Дешифратор Dd44 необхідний тільки для портів введення – виводу, оскільки решту пристроїв мають вбудовані дешифратори.

Таблиця 7

№Пари

Стар.

Мол.

A19-A14

A13-A1

A0

A19-A14

A13-A1

A0

DD42 (A17-A14)

1

00000

00001

000000

0000000000000

0

000000

0000000000000

1

0000

 

03FFE

03FFF

000000

1111111111111

0

000000

1111111111111

1

2

04000

04001

000001

0000000000000

0

000001

0000000000000

1

0001

 

07FFE

07FFF

000001

1111111111111

0

000001

1111111111111

1

3

08000

08001

000010

0000000000000

0

000010

0000000000000

1

0010

 

0BFFE

0BFFF

000010

1111111111111

0

000010

1111111111111

1

4

0C000

0C001

000011

0000000000000

0

000011

0000000000000

1

0011

 

0FFFE

0FFFF

000011

1111111111111

0

000011

1111111111111

1

5

10000

10001

000100

0000000000000

0

000100

0000000000000

1

0100

 

13FFE

13FFF

000100

1111111111111

0

000100

1111111111111

1

6

14000

14001

000101

0000000000000

0

000101

0000000000000

1

0101

 

17FFE

17FFF

000101

1111111111111

0

000101

1111111111111

1

7

18000

18001

000110

0000000000000

0

000110

0000000000000

1

0110

 

1BFFE

1BFFF

000110

1111111111111

0

000110

1111111111111

1

Таблиця 8

№Пари

Стар.

Мол.

A19-A14

A13-A1

A0

A19-A14

A13-A1

A0

DD42 (A17-A14)

1

E8000

E8001

111010

0000000000000

0

111010

0000000000000

1

1010

 

EBFFE

EBFFF

111010

1111111111111

0

111010

1111111111111

1

2

EC000

EC001

111011

0000000000000

0

111011

0000000000000

1

1011

 

EFFFE

EFFFF

111011

1111111111111

0

111011

1111111111111

1

3

F0000

F0001

111100

0000000000000

0

111100

0000000000000

1

1100

 

F3FFE

F3FFF

111100

1111111111111

0

111100

1111111111111

1

4

F4000

F4001

111101

0000000000000

0

111101

0000000000000

1

1101

 

F7FFE

F7FFF

111101

1111111111111

0

111101

1111111111111

1

5

F8000

F8001

111110

0000000000000

0

111110

0000000000000

1

1110

 

FBFFE

FBFFF

111110

1111111111111

0

111110

1111111111111

1

6

FC000

FC001

111111

0000000000000

0

111111

0000000000000

1

1111

 

FFFFE

FFFFF

111111

1111111111111

0

111111

1111111111111

1

Таблиця 9

Пристр.

Шест. адрес

A19-A0

DD44 (A1-A0)

DD43 (A5-A4)

PIC

00020

00000000000000100000

--

10

00021

00000000000000100001

PIT

00030

00000000000000110000

--

11

00031

00000000000000110001

00032

00000000000000110010

00033

00000000000000110011

IN1

00000

00000000000000000000

00

00

OUT1

00010

00000000000000010000

00

01

OUT2

00011

00000000000000010001

10

OUT3

00012

00000000000000010010

11