Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора 4 варіант.docx
Скачиваний:
1
Добавлен:
20.07.2019
Размер:
208.71 Кб
Скачать
  1. Приведіть простий приклад компіляції з мови Java на мову ассемблера Java

Листинг 4.2. Программа на языке ассемблер Java

1 ILOAD j //i=J+k

2 ILOAD k

3 IADD

4 ISTORE l

5 I LOAD l //if (1—3)

6 BIPUSH 3

7 IFJCMPEQ LI

8 ILOAD j //J-J-l

9 BIPUSH 1

10 ISUB

11 ISTORE j

12 GOTO L2

13 LI BIPUSH 0 //k-0

14 ISTORE k

15 L2

Листинг 4.3. Программа IJVM в шестнадцатеричном коде

0x15 0x02

0x15 0x03

0x60

0x36 0x01

0x15 0x01

0x10 0x03

0x9F 0x00 OxOD

0x15 0x02

0x10 0x01

0x64

ОхЗб 0x02

0xA7 0x00 0x07

0x10 0x00

0x36 0x03

Скомпільована програма проста. Спочатку j і до поміщаються в стек, додаються, а результат зберігається в i Потім i і константа 3 поміщаються в стек і порівнюються Якщо вони рівні, то відбувається умовний перехід до L1, де до отримує значення 0 Якщо вони не рівні, то виконується частина програми після IF_ICMPEQ Після цього здійснюється перехід до L2, де зливаються частини else і then

  1. Опишіть інтерпретацію в Міс-1 команди iload.

ILOAD У цій команді за кодом операції також

с лід байтале цей байт представляє собою індекс (без знаку), використовуваний для того, щоб знайти в просторі локальних змінних слово, яке потрібно помістити в стек. Оскільки тут є всього 1 байт, можна розрізняти тільки 28 = 256 слів, а саме перші 256 слів простору локальних змінних. Для виконання команди ILOAD потрібно і процес читання (щоб викликати слово), і процес запису (щоб помістити його в стек). Щоб визначити адресу для зчитування, потрібно додати зсув, який зберігається в регістрі BR (буферному регістрі пам'яті), до вмісту регістра LV. Доступ до регістрів MBR і LV можна отримати тільки через шину В, тому спочатку значення LV копіюється в регістр Н (в циклі iloadl), а потім додається значення MBR. Результат підсумовування копіюється в регістр MAR, і починається процес читання (в циклі iload2).

  1. Опишіть інтерпретацію в Міс-1 команди istore

Команда ISTORE протилежна команді ILOAD (з стека виштовхується верхнє слово і зберігається в комірці пам'яті, адреса якої дорівнює сумі значення регістра LV і індексу даної команди). У даному випадку використовується такий же формат, як і в команді ILOAD (рис. 4.14, й), тільки тут код операції не 0x15, а 0x36. Оскільки верхнє слово стека вже відомо (воно знаходиться в регістрі TOS), його можна відразу зберегти в пам'яті. Однак нове верхнє слово стека все ж необхідно викликати з пам'яті, тому потрібно і операція читання, і операція запису, хоча їх можна виконувати в будь-якому порядку

  1. Що таке просторова і часова локалізація адрес в кеш-пам’яті

Просторова локація:побудована на ймовірності того, що в найближчий час буде необхідно звернутися до комірок пам’яті, як знаходяться пере недавно викликаними комірками. Виходячи з цього в кеш память переноситься більше пам’яті ніж потрібно на даний момент

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

  1. Поясніть що таке архітектура команд і її місце в архітектурі комп’ютера. Які властивості рівня архітектура команд і чим відрізняється рівень архітектури команд від рівня мікроархітектури ком’ютера

У принципі рівень команд - це те, яким уявляється комп'ютер програмісту машинної мови. Оскільки зараз жодна нормальна людина не пише програм на машинній мові, ми переробили це визначення. Програма рівня архітектури команд - це те, що видає компілятор (в даний момент ми ігноруємо виклики операційної системи і символічна мова асемблера). Щоб зробити програму рівня команд, упорядник компілятора повинен знати, яка модель пам'яті використовується в машині, які регістри, типи даних і команди є в наявності і т. д. Вся ця інформація в сукупності і визначає рівень архітектури команд. Відповідно з цим визначенням такі питання, як програмується чи мікроархітектура чи ні, конвейерізірован комп'ютер чи ні, є він суперскалярні чи ні і т. д., не відносяться до рівня архітектури команд, оскільки упорядник компілятора не бачить усього цього. Однак це зауваження не Загальний огляд рівня архітектури команд 337 зовсім справедливо, оскільки деякі з цих властивостей впливають на продуктивність, а продуктивність є видимою для програміста. Розглянемо, наприклад, суіерскалярную машину, яка може видавати back-to-back команди в одному циклі, за умови що одна команда цілочисельна, а одна - з плаваючою точкою. Якщо компілятор чергує цілочисельні команди і команди з плаваючою точкою, то продуктивність помітно покращиться. Таким чином, деталі суперскалярной операції видно на рівні команд, і межі між різними рівнями розмиті

Для одних архітектур рівень команд визначається формальним документом, який зазвичай випускається промисловим консорціумом, для інших - ні. Наприклад, V9 SPARC (Version 9 SPARC) і JVM мають офіційні визначенніня [156, 85]. Мета такого офіційного документа - дати можливість різноманітним виробникам випускати машини даного конкретного виду, щоб ці машини могли виконувати одні й ті ж програми й одержувати при цьому одні й ті ж результати,