Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора 2 варіант.docx
Скачиваний:
1
Добавлен:
05.12.2018
Размер:
186.42 Кб
Скачать

1.4 Що таке стек операндів? Яке його призначення де він розміщений і як організований?

Стек використовується не тільки для зберігання локальних змінних, а також і для зберігання операндів під час обчислення арифметичних виразів. Такий стек називається стеком операндів. Припустимо, що перед викликом процедури У процедура Л повинна зробити наступне обчислення:

а1 = а2 + АЗ

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

показано на рис. 4.9. У даному випадку стек операндів зручно вважати частиною фрейму локальних змінних. У будь-якому випадку існує віртуальний регістр, який містить адресу верхнього слова стека. Відзначимо, що у від- відмінність від регістрів СРР і LV цей покажчик змінюється під час виконання процедури, оскільки операнди поміщаються в стек і виштовхуються з нього.

1.5??????????????????? Вкажіть який максимально допустимі розміри областей пам’яті в іjvm Міс-1: фрейму локальних змінних? а області процедур? а області констант?

1.6 Опишіть інтерпретацію в Міс-1 команд арифметичних та логічних операцій ІJVM IADD, IAND.

А тепер розглянемо команду IADD. Вона починається з мікрокоманд iaddl.

Потрібно виконати наступні дії:

1. Значення регістру TOS вже є, але з пам'яті потрібно викликати друге слово

стека.

2. Значення регістру TOS потрібно додати до другого слова стека, викликаний-

ному з пам'яті.

3. Результат, який поміщається в стек, повинен бути збережений в пам'яті і в

регістрі TOS.

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

ADDRESS мікрокоманд iaddl. Це адреса мікрокоманд iadd2. Потім iadd2 вва-Приклад реалізації мікроархітектури 265

ховується з керуючої пам'яті. У другому циклі, поки відбувається зчитування операнда з пам'яті, ми копіюємо верхнє слово стека з TOS в Н, де воно буде доступно для складання, коли процес зчитування завершиться На початку третього циклу (iadd3) MDR містить другий доданок, викликане з пам'яті. У цьому циклі воно додається до значення регістра Н, а результат

зберігається назад в регістри MDR і TOS. Крім того, починається операція запису, в процесі якої нове верхнє слово стека зберігається в пам'яті. У цьому циклі команда goto приписує адресу Mainl регістру МРС, таким чином, ми повертаємося до вихідного пункту і можемо почати виконання наступної операції Якщо наступний код операції, який міститься в даний момент в регіс- тре MBR, дорівнює 0x64 (ISUB), то повторюється практично таж послідовність дій Після виконання Mainl управління передається мікрокоманд з адре- сом 0x64 (1 subl) За цією мікрокоманд слідують i sub2, i sub3, а потім знову Mai nl Єдина відмінність між цією і попередньою послідовністю складається в тому, що в циклі isub3 зміст регістра Н не додається до значення MDR, а віднімається від нього Команда IAND ідентична командам IADD і ISUB, тільки в даному випадку два верх- них слова стека піддаються логічному множенню (операція І), а не скла- вуватися і не віднімаються Щось подібне відбувається і під час виконання команди I0R