Программирование для встроенных систем - статьи

Наследование операндов


Под наследованием операндов подразумевается использование в инструкции родительских операндов. При этом изменение таких операндов возможно только на уровне родителя. В качестве примера возьмем те же инструкции, что и рассмотренные при описании наследования кода операции:

MOVE GRs, GRt с кодом 0111-0011-GGGG-RRRR,

где операнды GRs, GRt кодируются битами, помеченными в бинарном коде инструкции буквами GGGG и RRRR соответственно, и

MOVE ARs, GRt с кодом 0011-0011-AAAA-RRRR,

где операнды ARs, GRt кодируются битами, помеченными в бинарном коде инструкции соответственно буквами AAAA и RRRR.

Видно, что вторые операнды этих двух инструкций GRt имеют одинаковый тип и одинаковое положение в бинарном коде. Таким образом, если в дереве инструкций добавить родительский узел с определенным в нем операндом:

Имя: GRt
Тип: General Purpose Register
Кодирование: XXXX-XXXX-XXXX-RRRR,

а затем добавить к этому родительскому узлу двух потомков: MOVE GRs, GRt с операндами:



Имя: GRs
Унаследован: нет
Тип: General Purpose Register
Кодирование: XXXX-XXXX-GGGG-XXXX,
 
Имя: GRt
Унаследован: да

и MOVE ARs, GRt с операндами:

Имя: ARs
Унаследован: нет
Тип: Address Register
Кодирование: XXXX-XXXX-AAAA-XXXX,
  
Имя: GRt
Унаследован: да

то эти потомки будут содержать унаследованный операнд GRt. При изменении каких либо свойств этого операнда в родительском узле соответствующие изменения автоматически применятся к потомкам. Опыт авторов показывает, что в условиях должной организации дерева команд при добавлении новой инструкции большая часть операндов наследуется от родительского узла.

Наследовать можно любое количество операндов, по-разному расположенных в бинарном коде родителя, в том числе и с перекрытием. При удалении операнда у родителя соответствующий унаследованный операнд удаляется у всех потомков.



Содержание раздела