Упрощение процедур обработки массивов
Обработка массива – это циклический процесс. Повторение тела цикла производится для новых элементов массива, поэтому в каждом цикле нужно задавать адрес очередного элемента.
В первых машинах для переадресации данных в массивах использовался способ изменения команд на сумматоре. Он заключался в том, что после каждого обращения к элементу массива, используемая команда обработки элемента массива выбиралась на сумматоре как данные. К ее младшему разряду прибавлялась единица и результат (модифицированная команда) сохранялся в памяти для дальнейшего использования как команда с "продвинутым адресом операнда". Для первых ЭВМ эта процедура была единственным способом реализации процедуры обработки элементов массива в цикле. Но запись в командный сегмент несовместима с хранением программ в памяти с однократной записью (ПЗУ). Кроме этого, разрешение записи в командный сегмент часто приводит к ошибкам с тяжелыми последствиями. В современных процессорах, например, в МП Intel запись в кодовый сегмент в защищенном режиме запрещена.
Решить указанные проблемы (уменьшение разрядности поля адресаиупрощение процедур обработки массивов) можно декомпозицией адреса на компоненты. При этом часть компонент адреса (базовый адрес и индекс) можно хранить вне команды, например, в РОНах, а в самой команде указывать только короткие адреса используемых РОНов, т.е. применять косвенную адресацию.
Такое решение позволяет:
· модифицировать адреса команд в циклах, изменяя компонент адреса (индекса, хранящегося в РОНе), и не модифицируя саму команду,
· указывать в команде только короткий компонент адреса (адрес
РОНа), где сохраняется 32-битовый адрес, а не полноразмерный адрес текущего элемента массива.
Для примера рассмотрим 32-разрядную структуру команды типа регистр-память процессора фирмы IBM (Семейство IBM/360). Структура команды представлена на рис. 3.9.
Код операции (8 бит.) | № РОН (4бит) | Адрес операнда в памяти (20 разрядов) | |
В(4бит) | X(4бит) | Смещение (D – 12 разрядов ) | |
Рис. 3.9. Структура команды регистр/память IBM-360 |
Команда (рис.3.9) двухадресная и содержит три поля:
· поле кода операции (8 бит),
· поле задания номера РОНа (4 бита), содержащего первый операнд (процессор содержит шестнадцать 32-битных регистров общего назначения),
· поле адреса второго операнда в оперативной памяти (20 бит).
Адрес памяти задается тремя компонентами: базовым адресом кадра (B), индексом (Х) и смещением (D). Соответственно, поле адреса операнда в памяти содержит три поля:
· четырехбитное поле базы (B) задает номер РОНа (кроме нулевого), содержащего базовый адрес кадра данных,
· четырехбитное поле индекса (Х) задает номер РОНа (кроме нулевого), содержащего индекс (смещение адреса элемента в массиве),
· двенадцатибитное поле смещения (D) задает адрес первого элемента массива относительно базового адреса кадра данных.
Это базово-индексная адресация со смещением.
Нулевое значение полей B, X или D означает отсутствие этих компонентов адреса. Структура памяти с базово-индексной адресацией представлена на рис. 3.10.
Рис. 3.10. Базово-индексная адресация со смещением
Рассмотрим случай, когда вторым операндом является элемент Аi массива А размерности n (А[n]), (см. рис. 3.10.).
Для задания элемента массива его адрес в памяти разбивается на три компонента:
· базовый адрес кадра (окна) данных – (В),
· смещение начала массива в кадре данных – (D),
· смещение элемента в массиве (Х).
База (четырехбитное поле B) задает РОН, в котором находится 32-битный начальный адрес кадра, общий для всех данных кадра.
Прямой двенадцатибитный адрес смещения D задает адрес программного объекта относительно начала кадра (окна) данных (размер кадра здесь выбран 212 = 4096 байт).
Задание базового адреса В – это дополнительная команда (загрузки базового адреса в РОН), но ее результат позволяет использовать короткие шестнадцатибитные адреса (четырехбитный номер РОНа и двенадцатибитное смещение) для всех данных кадра.
Третий компонент (Х) индекс используется при обработке массивов. Его введение решает проблему переадресации данных в цикле без изменения команд на сумматоре.
На рис. 3.10 операндом является элемент массива Ai. Для задания его адреса дополнительно используется третий компонент адреса.Эточетырехбитное поле,содержащее адрес РОНа, в котором хранится смещение элемента Ai в массиве A[n].Номер элемента i связан со значением Х2 следующим соотношением:
Х2 = i ´ L, где L - длина операнда в байтах.
При базово-индексной адресации возможны два варианта вычисления адреса элемента массива:
1. с последовательной выборкой элементов массива,
2. с выборкой элементов массива в произвольном порядке.
В первом случае смещение элемента в массиве вычисляется по формуле: Х2 (i) := X2 (i+1), при Х2(0) = 0.
Поле Х2 увеличивает разрядность адреса второго операнда, но решает проблему переадресации элементов массива (при переборе элементов массива) в циклических программах без использования записи в программный код.
Во втором случае смещение элемента в массиве вычисляется по формуле:
Х2(i) := i ´ L
Формирование адресов при базово-индексной адресации (с последовательной выборкой элементов массива) производится по схеме (рис.3.11):
Адрес элемента массива = Содержимое РОНа X2 + Содержимое РОНа B2 + Смещение D2.
Задавая нулевые значения полей Х, В или D можно получать:
· относительно-базовую адресацию – (В)+D,
· индексную адресацию – (Х)+D,
· относительно-индексную адресацию (В)+(Х) без смещения,
· прямую адресацию – D.
Рис. 3.11. Формирование адреса операнда при последовательном
обращении к операндам.
Формирование адресов при базово-индексной адресации (с произвольной выборкой элементов массива) производится по схеме (рис.3.12).
Рис. 3.12. Формирование адреса операнда при произвольных
обращениях к операндам.
Адрес элемента массива = Содержимое РОНа X2* L+ Содержимое РОНа B2 + Смещение D2.
Кроме указанных видов адресации возможны (например в МП PDP-11 фирмы DEC) дополнительные способы задания адресов данных:
· адресации с автоиндексированием. В этих адресациях после использования адреса значение индекса автоматически изменяется на размер операнда
в байтах, т.е. определяет адрес следующего элемента массива.
· адресации (данных или точек переходов) относительно счетчика команд. Это позволяет использовать короткие относительные адреса и формировать перемещаемые программы (безразличные к физическим адресам загрузки).
Если системы имеют несколько систем адресаций, то режимы адресаций могут задаваться:
· кодом операции (процессор фирмы IBM),
· полем режима адресации для каждого адреса в команде (процессор фирмы DEC),
· общим полем режима адресации для всех адресов в команде – постбайтом (процессор фирмы Intel).
Вопросы для самопроверки.
1. Понятие "режим адресации".
2. Причина сокращения разрядности адресных полей при задании адресов компонентами.
3. Причина упрощения обработки элементов массива при задании адресов компонентами.
4. Основные компоненты адреса объекта в памяти.
5. Основные виды адресации с использованием трех компонентов адреса.
Дата добавления: 2021-01-26; просмотров: 389;