ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.12.2021
Просмотров: 6793
Скачиваний: 22
90
r |
т ^ |
кори |
стана абревіа' |
1 1 „ |
|
Тут наведено два типи команд переміщення - зчитування даних (Load) та запам'ятовування даних (Store). Вказується також розмір даних: character - 8-розрядні дані, half-word - 16-розрядні дані, short - 32-розрядні дані, long - 64-розрядні дані. Для задання номера регістра в регістровому файлі процесора та номера комірки основної пам'яті, при написанні команди ці номери (адреси) записуються справа від мнемонічного коду операції, наприклад L105,R4 означає передачу даного з комірки пам'яті 105 до регістра R4. Потрібно зазначити, що в комп'ютері IBM S/370 є, крім регістрового файлу для цілочислових даних, також регістровий файл для даних з рухомою комою. Для позначення цих регістрів в табл. 3.2 використана абревіатура РК, що означає "рухома кома".
Для порівняння в табл. 3.3 як приклад наведені команди переміщення даних комп'ютера з спрощеною системою команд DLX. Видно, що тут додались команди обміну між регістрами з фіксованою та рухомою комою.
3.2.4.. Команди передачі керування
Як уже зазначалося, кожна команда має дві фази виконання. Перша фаза - це вибірка команди. На цій фазі за вмістом ПЛ з пам'яті в РгК вибирається команда. На другій фазі, яка називається виконанням команди, дешифрується код операції і виконується команда, тобто із основної пам'яті вибираються операнди, виконується арифметична чи логічна операція і запам'ятовуються результати обчислень. На другій фазі при послідовному виконанні команд вміст ПЛ збільшується на одиницю, та вказує адресу наступної команди. На рис. 3.5 показано виконання операції віднімання від вмісту комірки А основної пам'яті вмісту комірки В з запам'ятовуванням результату в комірці С, тобто (С) := (А) - (В), з використанням двоадресного формату, коли три команди розміщені в послідовних комірках пам'яті, і їх адреси зростають в порядку виконання команд, починаючи з деякої комірки основної пам'яті і.
91
Разом з тим, при виконанні більшості задач в комп'ютерах використовуються команди передачі керування, коли шляхом аналізу деяких умов вибирається один з набору можливих шляхів обчислень. При виконанні цих команд вміст програмного лічильника змінюється на адресу деякої комірки пам'яті.
Існує декілька причин необхідності виконання операцій передачі керування. До найважливіших з них належать наступні:
-
Значна частина операцій в комп'ютері виконується багаторазово. Для вирішення деякої задачі може виникнути потреба в виконанні тисяч або й мільйонів команд. Писати та зберігати в пам'яті ті ж команди багаторазово є нелогічним та й збитковим. Тому, коли обробляється вектор даних чи список символів необхідно використати програмний цикл, коли виконується повторно та ж сама послідовність команд для обробки всіх операндів.
-
Практично всі програми потребують прийняття деякого рішення - комп'ютер повинен виконати одні дії при наявності одних умов, та інші дії при наявності інших умов.
-
Коректне компонування великих і навіть середнього розміру програм є достатньо важкою задачею. Наявність механізму її представлення малими кусками є дуже корисним.
Розглянемо організацію виконання основних команд передачі керування детальніше.
3.2.4.1. Команди переходу
Команди переходу мають в якості одного з операндів адресу команди, яка має бути виконана наступною. Є два типи команд переходу - умовного та безумовного. При безумовному переході відразу здійснюється перехід до вказаної в адресному полі команди. Найчастіше ці команди є командами умовного переходу, тобто перехід здійснюється за
92
адресою, вказаною операндом, тільки при виконанні заданих умов. В іншому випадку виконується наступна за даною команда, тобто, як зазвичай, значення програмного лічильника збільшується на одиницю.
Є два шляхи вироблення умови, яка буде перевірятись командою умовного переходу. Перший шлях вироблення умови передбачає формування коду умови, як результату виконання деяких операцій. Цей код може бути поміщений в доступний користувачеві регістр. Наприклад, арифметичні операції додавання, віднімання і т. д. можуть формувати дворозрядний код умови, який приймає одне з наступних чотирьох значень: нуль, додатне, від'ємне, переповнення. В такому комп'ютері буде чотири різних команди умовного переходу:
BRP X - перехід до комірки X, якщо результат додатній;
BRN X - перехід до комірки X, якщо результат від'ємний;
BRZ X - перехід до комірки X, якщо результат рівний нулю;
BRO X - перехід до комірки X, якщо відбулось переповнення.
Другий шлях вироблення умови може бути використаним в триадресному форматі команди, коли порівняння і специфікація переходу задається в самій команді. Наприклад команда
BRE R3, R4, X
задає перехід до комірки X, якщо вміст регістра R3 дорівнює вмісту регістра R4.
На рис. 3.6 показано приклад програми, в якій використано безумовний перехід та умовні переходи з застосуванням обох описаних вище шляхів формування умови.
Зауважимо, що перехід може бути як в напрямку збільшення, так і в напрямку зменшення адреси. Приклад показує, як умовний та безумовний переходи можуть бути використані для створення повторюваних циклів команд. Команди від комірки 202 до комірки 210 будуть виконуватись повторно, аж поки результат віднімання Y від X не стане рівним нулю.
93
Розглянемо приклад виконання задачі додавання п чисел, яку можна виконати шляхом послідовного виконання команд (рис. 3.7а), або з використанням команд переходів (рис. 3.7b). Tyт Nj (j = 1,2,...,n) - адреса в пам'яті кожного із n чисел, і (і=1,2,...,п) - адреси розміщення команд, S - адреса розміщення результуючої суми.
Використання переходів вимагає введення додаткових команд очистки Clear RO, задання кількості п повторів виконання тіла програми, зменшення вмісту регістра R1, який використовується як лічильник, а також команди аналізу умови. Разом з тим, використання переходів зменшує об'єм програм, зокрема в наведеному прикладі взамін п+1 команд, де п - кількість чисел в масиві, використано лише 6 команд.
3.2.4.2. Команди пропуску
Команда пропуску включає передбачувану адресу. Типово пропуск передбачає, що одна команда буде пропущена. Ця команда не вимагає наявності адресного поля. Типовим її прикладом є команда increment-and-skip-if-zero (ISZ) - приріст на одиницю та перехід якщо нуль. Розглянемо наступний фрагмент програми (рис. 3.8).
94
В цьому фрагменті використано команду пропуску для реалізації ітераційного циклу. В регістрі R1 встановлюється від'ємне число, модуль якого рівний кількості необхідних ітерацій. В кінці циклу до вмісту регістра R1 додається одиниця. Якщо отримане значення не рівне нулю, програма переходить на початок циклу. В іншому випадку перехід пропускається і програма продовжується з наступної команди після кінця циклу.
3.2.4.3. Команди звернення до підпрограм
Одним з найбільших покращань в розробці мов програмування є підпрограми. Підпрограма є самостійною комп'ютерною програмою, яка, при необхідності, використовується іншою програмою. В якійсь точці програми підпрограма повинна бути викликаною та виконаною, після чого виконання програми має бути продовженим. Причиною використання підпрограм є економічна доцільність та потреба забезпечення поділу програми на незалежні модулі. Підпрограма дозволяє тій же частині коду бути використаною багаторазово. Це економить зусилля програміста та ємність пам'яті програм. Підпрограми також дозволяють розділити великі частини програми на малі блоки. Таке використання незалежних модулів суттєво спрощує написання та відлагодження програм.
Механізм підпрограм задіює дві базові команди: команду виклику, яка здійснює перехід з попередньої комірки до підпрограми, та команду повернення, яка здійснює повернення від підпрограми до місця, з якого вона була викликана. Обидві команди належать до команд переходу.
На рис. 3.9 показано як на основі підпрограм будувати програми.