Смекни!
smekni.com

О возможности универсального кода внутреннего представления программы (стр. 3 из 4)

Рис. 2. Возможная функциональная схема формульного процессораГлавной идеей, лежащей в основе формульного процессора является включение флагов состояния загрузки регистров местной (внутрипроцессорной) памяти в код выполняемой команды для организации прямого вычисления формульных выражений. Флаги загрузки составляют часть битов регистра формирователя-дешифратора кода команды управления. Другую его часть составляют признаки кода очередной псевдокоманды, представляющей тот или иной символ операторно-формульного кода.
Рис. 3. Структура псевдокоманд формульного процессораПрограмма-эмулятор формульного процессора представляет собой информационно-логическую модель, реализующую пример системы кодов псевдокоманд и тактовой схемы процессора.Псевдокоманды – структурные ограничители являются однобайтными кодами символов-ограничителей алгоритмических формул (знаки арифметико-логических операций, скобки, знаки-разделители, коды выделенных операторов).Адресно-литеральные псевдокоманды состоят из однобайтного кода-определителя, описывающего формат и способ адресации данного, и самого этого данного либо соответствующей адресной ссылки. В адресной форме они могут задавать начальный адрес как операнда, так и подпрограммы-оператора или подпрограммы-функции.Внутреннее двоичное представление формульного кода напоминает одноадресную систему команд. Каждая отдельная псевдокоманда (элементарная инструкция) отвечает одному символу операторно-формульного кода и состоит из поля-определителя, содержащего код-определитель, подобный коду операции, и, возможно, единственного поля операнда (рис.3). Псевдокоманды подразделяются на адресно-литеральные и структурные ограничители, не содержащие поля операнда. Структурные ограничители выполняют роль символов-ограничителей (знаки операций, скобки, знаки-разделители, привилегированные операторы), а адресно-литеральные псевдокоманды соответствуют константам, переменным либо именам операторов и функций, т.е. составляют код оператора или функции. При этом поле операнда адресно-литеральной псевдокоманды может содержать непосредственно операнд арифметико-логической операции, либо адресную ссылку того или иного вида на такой операнд или на подпрограмму, отвечающую оператору или функции. В этих псевдокомандах поле-определитель задает формат операнда и способ его адресации. Пример возможной системы команд формульного процессора и тактовой схемы их выполнения был протестирован на реализуемость в программе-эмуляторе (табл.2 представляет часть соответствующей кодовой таблицы).Таблица 2Структурные ограничители

Сущность формульного процессора составляет зависимость выполнения команд от состояния загрузки регистров местной памяти. Для этого в качестве дополнительного звена в обычное подсоединение регистра чтения команды к устройству управления включается особый (главный) регистр автомата управления (РАУ; рис.2, 4), который также можно охарактеризовать как регистр формирователь-дешифратор кода команды управления. В роли этой команды выступает код, формируемый в РАУ в соответствии с состоянием загрузки регистров местной памяти и кодом очередной псевдокоманды (рис.4). Соответствие содержимого РАУ состоянию загрузки регистров местной памяти позволяет отслеживать текущее состояние вычислительного процесса и организовывать отработку очередного символа программы (т.е. очередной псевдокоманды) не только в зависимости от нее самой, но и от предшествующей части программы, выполнение которой создало данное состояние. Возможность соответствующего (однопросмотрового) алгоритма можно усмотреть, в частности, из общего «скобочного» принципа организации формульного вычисления: первой закрывается скобка (любого типа), которая была открыта последней. Иными словами, достаточно единственного (и даже общего) стека для адекватной организации сохранения промежуточных результатов. Подобным образом, оказывается достаточным малого числа информационных признаков (которыми выступают флаги загрузки регистров) для приведения зависимости вычисляющего алгоритма от общей структуры формулы к зависимости его фаз от этих признаков.

В отличие от обычного набора универсальных регистров арифметические регистры формульного процессора в силу их соответствия флагам загрузки несколько более специализированы. Хотя их основным назначением по-прежнему является временное сохранение кодов операций и операндов, каждый из них ориентирован на сохранение своего вида элементов формульного кода, которым может быть код оператора, функции, одноместной или двуместной арифметико-логической операции или их операнды (рис.4).

Таблица 3

Допустимые сочетания флагов загрузки арифметических регистров и их преобразования

Флаги загрузки регистров (1, 2, 3, 4, 5, 6) Установленный флаг в РАУ (7...13) 1 Результирующий код после выполнения всех операций (1, 2, 3, 4, 5, 6 биты РАУ)
0 0 0 0 0 0 1 0 0 0 0 0
1 (0) 0 0 0 0 7
9
10
12 или 132
1 0 1 0 0 0
1 0 0 0 1 0
1 0 0 0 0 0
1 0 0 0 0 0 или 0 0 0 0 0 0
1 (0) 0 0 1 0 8
10
11
12 или 13
1 0 0 1 1 0
1 1 0 0 0 0
по стеку
1 0 0 0 0 0 или 0 0 0 0 0 0
1 (0) 1 0 0 0 9
10
1 0 1 0 1 0
1 0 0 0 0 0
1 (0) 0 1 1 0 7
9
10
1 0 1 1 1 0
1 0 0 1 1 1
1 0 0 0 0 0
1 (0) 1 0 1 0 8
10
11
12 или 13
1 0 0 1 1 0
1 1 0 0 0 0
по стеку
1 0 0 0 0 0 или 0 0 0 0 0 0
1 (0) 1 1 1 0 9
10
1 0 1 1 1 1
1 0 0 0 0 0
1 (0) 0 1 1 1 8
10
11
12 или 13
1 0 0 1 1 0
1 1 0 0 0 0
по стеку
1 0 0 0 0 0 или 0 0 0 0 0 0
1 (0) 1 1 1 1 8
10
11
12 или 13
1 0 0 1 1 0
1 1 0 0 0 0
по стеку
1 0 0 0 0 0 или 0 0 0 0 0 0

В начальной фазе отработки очередного оператора РАУ находится в нулевом состоянии, а счетчик команд указывает на код текущей псевдокоманды, которая, при правильности формальной структуры программы, должна содержать код оператора. Выполнение этой «нулевой» (табл.3, первая строка) команды процессора состоит в переписывании кода оператора в регистр оператора, в силу чего соответственно переустанавливается флаг состояния его загрузки. Выборка последующей псевдокоманды завершает формирование новой команды управления. При загруженном регистре оператора процессор находится в режиме создания списка аргументов этого оператора. Этот режим завершается отработкой псевдокоманды, содержащей код разделителя операторов (флаг 13 на рис.4). К конечной фазе этой отработки в стеке (либо особо выделенных регистрах местной памяти) должны сформироваться адресно-литеральные псевдокоманды, представляющие вычисленные значения аргументов оператора, после чего инициируется выполнение данного оператора. При создании списка аргументов оператора процессор реализует вычисление соответствующих формульных выражений. Эти действия вытекают из логики обычного вычисления формулы и составляют наибольшее функциональное отличие формульного процессора от командного.

Рис. 4. Соответствие битов регистра автомата управления (РАУ) флагам загрузки регистров местной (внутрипроцессорной) памяти, предназначенных для сохранения и сборки кодов и операндов очередной выполняемой арифметико-логической операции

Базовый состав системы команд формульного процессора, включая управляющие команды, коды арифметико-логических операций и коды режимов адресации вполне укладывается в привычную сотню кодов. Добавляемые команды управления сопоставимы по сложности с командами перехода по счетчику или прерывания на подпрограмму. Принципиально, имеется три схемы выполнения команд управления. 1 – сохранение кода очередного элемента программы в подходящем регистре местной памяти; 2 – сохранение содержимого регистров местной памяти в стеке, подобное сохранению управляющих регистров при выполнении команды прерывания; 3 – наиболее сложные команды включают сопоставление приоритетов арифметико-логических операций, соответствующих прочитанному элементу программы и сохраненному в местной памяти либо в стеке. В зависимости от результата, в одном случае дальнейшее выполнение команды состоит в сохранении кода и операндов откладываемой операции в местной памяти и/или стеке (т.е. развивается по схеме 1 или 2), в другом – включается процесс выполнения накопленных отложенных операций и соответствующего освобождения ячеек стека и регистров местной памяти.

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