Ортогональность кодов операций и режимов адресации
Рассмотрим форматы 32-разрядных команд для трехадресной машины (рис. 5.17). Здесь поддерживаются до 256 кодов операций. В варианте 1 формата каждая команда имеет два входных регистра (источника) и один выходной регистр (приемник). Этот формат используется для всех арифметических и логических команд.
Биты 8 1 5 5 5 8
Рис. 5.17. Форматы команд для трехадресной машины
|
Неиспользованное 8-разрядное поле в конце команды может потребоваться для дальнейшей дифференциации команд. Например, можно иметь один код для всех операций с плавающей точкой, а различаться эти операции будут по дополнительному полю. Кроме того, если установлен бит 23, тогда задействуется вариант 2 формата, а второй операнд уже является не регистром, а 13-разрядной непосредственной константой со знаком.
Команды LOAD и STORE тоже могут использовать этот формат для обращения к памяти при индексном способе адресации.Необходимо также иметь небольшое число дополнительных команд (например, команд условных переходов), но они легко подходят под вариант 3 формата. Например, можно приписать один код операции каждому (условному) переходу, вызову процедуры и т. д., тогда останется 24 бита для смещения по счетчику команд. Если предположить, что это смещение считается в словах, диапазон будет составлять 32 Мбайт. Несколько кодов операций можно зарезервировать для команд LOAD и STORE, которым нужны длинные смещения в варианте 3 формата.
Теперь рассмотрим структуру двухадресной машины, в которой в качестве любого операнда может использоваться слово из памяти (рис. 5.18). Такая машина умеет складывать слово памяти с регистром, регистр со словом памяти, два регистра и два слова памяти. В настоящее время обращение к памяти связано со значительными издержками, поэтому такая структура не очень распространена, но если с развитием технологий обращаться к памяти станет менее накладно, получится простое и эффективное решение. Машины PDP-11 и VAX, в которых использовались похожие форматы, были очень популярны и доминировали на рынке мини-компьютеров в течение двух десятилетий.
Биты 8 | 3 | 5 | 4 | 3 | 5 | 4 |
Код операции | Режим адресации | Регистр | Смещение | Режим адресации | Регистр | Смещение |
I Необязательно 32-разрядный адрес или смещение \ р------------------------------------------------- ----- ^ ! Необязательно 32-разрядный адрес или смещение ■ !----------------------------------------------------------------------------------------------- j Рис. 5.18. Простые форматы команд для двухадресной машины
|
Здесь мы снова имеем 8-разрядный код операции, но теперь у нас есть по 12 бит для задания источника и приемника. Для каждого операнда 3 бита позволяют указать режим адресации, 5 бит — регистр и 4 бита — смещение. Имея 3 бита для задания режима адресации, мы можем поддерживать непосредственную, прямую, регистровую, косвенную регистровую индексную и стековую адресации, и при этом еще остается место для двух дополнительных режимов, которые, возможно, появятся в будущем. Это простая система, которую легко компилировать, в то же время она достаточно гибкая, особенно если счетчик команд, указатель стека и указатель локальных переменных находятся среди регистров общего назначения, к которым можно получить доступ.
Единственная проблема в том, что при прямой адресации нам нужно большее количество битов для адреса. В машинах PDP-11 и VAX к команде было добавлено дополнительное слово для указания адреса каждого прямо адресуемого операнда. Мы тоже могли бы использовать один из двух доступных режимов адресации для индексной адресации с 32-разрядным смещением, которое следует за командой. Тогда в худшем случае при сложении двух слов памяти, когда обращение к обоим операндам производится в режиме прямой адресации или с использованием длинной индексной формы, команда была бы размером 96 бит и занимала бы 3 цикла шины (один для команды и два для данных). В то же время для прибавления произвольного слова памяти к другому произвольному слову памяти большинству RISC-систем потребовалось бы по крайней мере 96 бит, а может и больше, на что нужно по крайней мере 4 цикла шины.
Форматы, изображенные на рис. 5.18, допускают самые разные варианты. В данной системе с помощью одной 32-разрядной команды, при условии что переменные i и j находятся среди первых 16 локальных переменных, можно выполнить следующую операцию: i = j;
Для переменных, расположенных после первых 16, нам потребуется перейти к 32-разрядным смещениям. Можно также придумать формат с одним 8-разряд- ным смещением вместо двух 4-разрядных при условии, что это смещение может использоваться либо источником, либо приемником, но не тем и другим вместе. Варианты компромиссов не ограничены, и чтобы получить хороший результат, разработчикам приходится учитывать многие факторы.
Еще по теме Ортогональность кодов операций и режимов адресации:
- Далее следует объяснение наиболее распространенных речевых кодов.
- Далее следует объяснение наиболее распространенных речевых кодов.
- Часть третья Использование кодов для определения типа характера
- Часть третья Использование кодов для определения типа характера
- Примеры парных кодов:
- ОПЕРАЦИЯ ФОРМАЛЬНАЯ
- ОПЕРАЦИЯ
- ОПЕРАЦИЯ ИНТЕЛЛЕКТУАЛЬНАЯ
- ОПЕРАЦИЯ КОНКРЕТНАЯ
- ОПЕРАЦИЯ СОЗНАТЕЛЬНАЯ
- Действия, операции и психологические приемы.
- § 2. Правовое регулирование валютных операций
- ОПЕРАЦИЯ ПРИСПОСОБИТЕЛЬНАЯ