Смекни!
smekni.com

Проектування комп`ютера (стр. 2 из 5)

Мнемонічне кодування спрощує процес написання, читання і відлагодження програми. Основний принцип такого кодування - кожна команда представляється 3-х або 4-х буквеним символом, який показує назву команди. Деякі приклади мнемонічного кодування:

ADD - додати (add),

SUB - відняти (subtract),

MPY - перемножити (multiply),

DIV - поділити (divide).

Операнди також представляються символічно. Наприклад команда ADD R Y означає додавання вмісту комірки пам'яті Y до вмісту регістра R. Зауважимо, що операція виконується над вмістом, а не над адресою комірки пам'яті та регістра.

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

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

Способи адресації

Варіанти інтерпретації бітів (розрядів) поля адреси з метою знаходження операнда називаються способами адресації. Коли команда вказує на операнд, він може знаходитись в самій команді, в основній або зовнішній пам'яті чи в регістровій пам'яті процесора. За роки існування комп'ютерів була створена своєрідна технологія адресації, яка передбачає реалізацію різних способів адресації, чому послужило ряд причин: забезпечення ефективного використання розрядної сітки команди; забезпечення ефективної апаратної підтримки роботи з масивами даних; забезпечення задання параметрів операндів; можливість генерації великих адрес на основі малих. Існує велика кількість способів адресації. Розглянемо п’ять основних способів адресації операндів в командах.

Пряма - в цьому випадку адресне поле зберігає адресу операнда. Її різновидом є пряма регістрова адресація, яка адресує не комірку пам’яті а номер регістру.

Безпосередня - в поле адреси команди поміщається не адреса, а сам операнд.

Непряма - в полі адреси команди зберігається адреса комірки пам’яті в якій знаходиться адреса операнда. Такій спосіб дозволяє оперувати з адресами як з даними. Різновид непряма-регістрова адресація, адреса адреси зберігається в регістрі загального призначення.

Відносна - адреса формується, як сума з двох доданків: бази, яка зберігається в спеціальному регістрі чи в одному з регістрів спеціального призначення, та зміщення, яке задається в полі адреси команди. Різновид індексна та базова індексна. При індексній замість базового регістра є індексний, який автоматично модифікується (зазвичай збільшується на 1). Базова-індексна адресація формується адреса як сума трьох доданків: бази, індексу та зміщення.

Безадресна - поле адреси в команді відсутнє. Адреса операнда, або немає змісту або є по замовчуванню (наприклад дії на спеціальним регістром - акумулятором). Безадресні команди неможливо використати для інших регістрів чи комірок пам’яті. Одним з різновидів безадресної адресації є використання стеку. В команду вводяться спеціальні ознаки з тим, щоб пристрій керування міг розпізнати використаний спосіб. Це можуть бути додаткові розряди в команді, або для різних типів команд закріплюватись різні способи адресації.

Вихідні дані на проектування

Варіант №9
Арифметичні Логічні Керування Прапорці Адресація
1 2 3 4 5 6 7 8 1 2 3
9 3 5 9 1 2 17 2 10 ZF 2 3 5 1

1. Реалізація додаткових команд. Необхідно реалізувати 8 додаткових команд. Серед них 3 арифметичні, 3 логічні та 2 команди керування згідно варіанту. В таблиці представлено повний перелік множини інструкцій.

Код інструкції Двійкове значення Зміст Тип
1
ADD 00000 Додає вміст регістру regA до вмісту regB, та зберігає в destReg R
2 DIV 01000 Беззнакове ділення destReg=regA/regB R
3 IMUL 01001 Знакове множення destReg=regA*regB R
4 XIDIV 01010 Знакове ділення і обмін операндів місцями destReg=regA/regB R
5
AND 01011 Побітове логічне І: destReg=regA & regB R
6 NAND 00001 Виконує логічне побітове І-НЕ вмісту regA з вмістом regB, та зберігає в destReg R
7 XOR 01100 Додавання по модулю 2: destReg=regA # regB R
8 CMPGE 01101 Порівняти regA regB destReg= regA >= regB R

Інструкції R-типу:

біти 24-22: код операції

біти 21-19: reg A

біти 18-16: reg B

біти 15-3: не використовуються (=0)

біти 2-0: destReg

Код інструкції Двійкове значення Зміст Тип
9
LW 00010 Завантажує regB з пам’яті. Адреса пам’яті формується додаванням зміщення до вмісту regA. I
10
SW 00011 Зберігає вміст регістру regB в пам’ять. Адреса пам’яті формується додаванням зміщення до вмісту regA. I
11 BEQ 00100 Якщо вміст регістрів regA та regB однаковий, виконується перехід на адресу програмний лічильник (ПЛ) + 1+зміщення, в ПЛ зберігається адреса поточної тобто beq інструкції. I
12 JMAE 01110 Беззнакове більше/рівно if (regA>= regB) PC=PC+1+offSet I
13 JMNAE 01111 Беззнакове не більше/рівно if (regA! >= regB) PC=PC+1+offSet I
14 JNE 10010 Перейти, якщо більше чи рівно, if (ZF! =0) PC=offset I

I-тип інструкцій:

біти 24-22: код операції

біти 21-19: reg A

біти 18-16: reg B

біти 15-0: зміщення (16 біт, значення від - 32768 до 32767)

Код інструкції Двійкове значення Зміст Тип
15 JARL 00101 Спочатку зберігає ПЛ+1 в regB, в ПЛ адреса поточної (jalr) інструкції. Виконує перехід на адресу, яка зберігається в regA. Якщо в якості regA regB задано один і той самий регістр, то спочатку в цей регістр запишеться ПЛ+1, потім виконається перехід до ПЛ+1. J
16 BSF 10000 Побітове сканування в прямому (від молодших до старших) напрямку regA в пошуках біта з 1, повертає номер позиції в destReg. Якщо 1 знайдено ZF=1, інакше ZF=0 J
17 BSR 10001 Побітове сканування в зворотньому напрямку (від старших до молодших) regA в пошуках біта з 1, повертає номер позиції в destReg. Якщо 1 знайдено ZF=1, інакше ZF=0 J

J-тип інструкцій:

біти 24-22: код операції

біти 21-19: reg A

біти 18-16: reg B

біти 15-0: не використовуються (=0)

Додатковий тип адресації - безадресна (реалізація стеку). Ця адресація имагає двох додаткових інструкцій: PUSH, POP.

Код інструкції Двійкове значення Зміст Тип
18 HALT 00110 Збільшує значення ПЛ на 1, потім припиняє виконання, стимулятор має повідомляти, що виконано зупинку. O
19 NOOP 00111 Нічого не виконується O
20 PUSH 10011 Записати в стек з 1 регістру O
21 POP 10100 Зчитати з стеку в 1 регістр O

O-тип інструкцій:

біти 24-22: код операції

біти 21-0: не використовуються (=0)

\

Роз'яснення та аналіз основних принципів побудови комп'ютерів на прикладі визначених на реалізацію інструкцій

Структура СК після модифікації:

Рис 1. Функціональна схема СК після модифікації

В СК було додано 13 інструкцій, внаслідок чого поле КОП збільшилося на 2 біти до 5 біт (максимально 32 інструкції з яких використано 21). Решта частина коду операції не зазнала зміни. Був доданий стек глибиною 32 слова по 32 біти, покажчик вершини стеку, прапорець стану ZF.

Перевірка правильності роботи реалізованих команд у прикладах

1. div: 45/5=9.