Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекцii_ALL.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.55 Mб
Скачать

9.7. Відносна індексна адресація

В деяких машинах використовується спосіб адресації, при якому адреса знаходиться шляхом сумування значень двох регістрів і зміщення. Такий підхід називається відносною індексною адресацією. Один з регістрів – це база, а другий – індекс. Така адресація дуже зручна при наступній ситуації. Поза циклом ми могли б помістити адресу елемента А в регістр R5, а адреса елемента В в регістр R6. Тоді ми могли б замінити дві перші команди циклу LOOP на

LOOP: MOV R4,(R2+R5)

AND R4,(R2+R6)

Було б ідеально якби існував спосіб адресації по сумі двох регістрів без зміщення. З іншої сторони, навіть команда з 8-бітним зміщенням була б великим досягненням, оскільки ми обидва зміщення могли б встановити на 0. Однак, якщо зміщення завжди складають 32 біти, тоді ми нічого не виграємо, використовуючи таку адресацію. На практиці машини з такою адресацією мають форму з 8-бітним і 16-бітним зміщенням.

9.8. Стекова адресація

Ми вже говорили, що необхідно зробити машинні команди як можна коротші. Кінцева межа в скорочені довжини адреси – це команди без адрес. Як ми бачили в главі 4, безадресні команди, наприклад IADD, можливі при наявності стека. В цім розділі ми розглянемо стекову адресацію більш детально.

9.9. Зворотній польський запис

В математиці існує давня традиція поміщати оператор між операндами (x+y), а не після операндів (xy+). Форма з оператором між операндами називається інфіксним записом. Форма з оператором після операндів називається постфіксним чи зворотнім польським записом в честь польського логіка Я.Лукашевича (1958), який вивчав вміст цього запису.

Зворотній польський запис має ряд переваг над інфіксним записом для вираження алгебраїчних формул. По-перше, будь-яка формула може бути виражена без дужок. По-друге, вона зручна для обрахунку формул в машинах з стеками. По-третє, інфіксні оператори мають пріоритети, які довільні і не бажані. Наприклад, ми знаємо, що (a b)+c значить (a b)+c, а не a (b+c), оскільки довільно було визначено, що множення має пріоритет над додаванням. Але чи має пріоритет зсув вліво над логічною операцією І ? Зворотній польський запис відсторонює такі непорозуміння.

Рис. 9.3 - Кожен вагон представляє собою один символ в формулі, яку потрібно перетворити з інфіксної форми в зворотній польський запис.

Існує декілька алгоритмів для перетворення інфікс них формул в зворотній польський запис. Нижче показана ідея Е.Дейкстри. Припустимо, що формула складається з наступних символів: змінних, двохоперандних операндів +, -, *, /, а також лівої і правої дужок. Щоб відмінити кінець формули, ми будемо вставляти символ після останнього символа одної формули і перед першим словом наступної формули.

На рис. 9.3 зображена залізна дорога з Нью-Йорка в Каліфорнію з розвилкою, яка веде в Техас. Кожен символ формули представлений одним вагоном. Поїзд рухається на схід (на право). Перед розвилкою кожен вагон повинен зупинятись і дізнаватись, чи потрібно йому рухатись прямо в Каліфорнію, чи він по дорозі повинен повернути в Техас. Вагони, які містять змінні, завжди їдуть в Каліфорнію і ніколи не повертають в Техас. Вагони, які містять всі інші символи, повинні перед входженням в розвилку дізнаватись про вміст найближчого вагона, який відправився в Техас.

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

  1. Вагон на розвилці направляється в Техас.

  2. Останній вагон, який відправився в Техас, розвертається і направляється в Каліфорнію.

  3. Вагон, який знаходиться на розвилці, і останній вагон, який відправився в Техас, зникають (тобто обидва знищуються).

  4. Зупинка. Символи, які знаходяться в Каліфорнії, представляють собою формулу в зворотнім польськім записі, якщо читати зліва направо.

  5. Зупинка. Виникла помилка. Початкова формула була не коректно збалансована.

Вагон на розвилці

+

P

*

/

(

)

Вагон, який відправився останнім в сторону Техаса

4

1

1

1

1

1

5

+

2

2

2

1

1

1

2

P

2

2

2

1

1

1

2

*

2

2

2

2

2

1

2

/

2

2

2

2

2

1

2

(

5

1

1

1

1

1

3

Рис. 9.4 - Алгоритм перетворення інфіксного запису в зворотній польський запис.

Після кожної дії проводиться нове порівняння вагона, який знаходиться на розвилці, і вагона, який на даний момент останнім відправився на Техас. Цей процес продовжується доти, поки не буде досягнуто кроку 4. Відмітимо, що лінія на Техас використовується як стек, де відправка вагона в Техас – це поміщення елемента в стек, а повернення вагона, відправленого в Техас, в сторону Каліфорнії – це витягування елемента із стеку.

Таблиця 9.1 - Деякі приклади інфіксних виразів і їх еквіваленти в зворотнім польськім записі.

Інфіксний запис

Зворотній польський запис

А+В С

А В+С

А В+С D

(A+B)/(C-D)

A B/C

((A+B) C+D)/(E+F+G)

ABC +

AB C+

AB C D +

AB+CD-/

AB C/

AB+C D+E F+G/

Порядок змінних в інфіксному і польському записі однаковий. Проте, порядок операторів не завжди однаковий. В зворотнім польськім записі оператори появляються в тім порядку, в якім вони будуть виконуватися. В табл. 9.1 подані приклади інфікс них формул і їх еквівалентів в зворотнім польськім записі.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]