СТЕКОВАЯ ЭВМ С ПРЕФИКСНЫМИ КОМАНДАМИ
STACK COMPUTERS WITH PREFIX COMMANDS

Изобретение относится к технике обработки данных с помощью ЭВМ, в частности к стековым ЭВМ с префиксными командами, и может быть использовано в вычислительных машинах с архитектурами CISC (Complex Instruction Set Computer) и RISC (Reduced Instruction Set Computer).
Известна стековая ЭВМ HP3000 [1] компании Hewlett-Packard, архитектура которой ориентирована на обработку данных, хранящихся в стеке. Доступ к операндам в стеке ограничивается верхними элементами стека, а результат операции всегда помещается на вершину стека. Для доступа к памяти используются команды загрузки и выгрузки верхнего элемента стека из памяти и обратно.
Недостатками аналога являются большое количество команд обращений к памяти, а также сложность доступа к данным процедуры из-за использования стека для хранения как данных процедуры, так и адреса возврата.
Известен компьютер со стековой системой команд [2], который поддерживает язык FORTH [3]. Компьютер содержит шину данных, АЛУ, два стека - стек данных и стек возврата, память программ, память данных и регистры - счетчик команд, указатели стека данных и возврата. Здесь решена проблема доступа к параметрам процедуры за счет использования дополнительного стека для хранения адреса возврата в вызывающую программу.
Недостатком аналога является большое количество вспомогательных команд загрузки и выгрузки данных из памяти в стек и обратно, что увеличивает объем кода программы и число тактов при обработке данных.
Известен способ объединения команд стековой ЭВМ в одну трехадресную инструкцию [4] для стековой виртуальной машины языка Java [5]. Виртуальная машина языка Java обеспечивает доступ к локальным данным, хранящимся в стеке, и их обработку одной байтовой командой. Объединение байтовых команд в одну инструкцию позволяет выполнять несколько команд виртуальной машины языка Java за один такт.
Недостатком аналога является сложная аппаратная реализация объединения стековых команд в одну инструкцию, а также необходимость использования вспомогательных команд загрузки и выгрузки данных на стек и обратно при обработке данных в памяти, что увеличивает число команд программы и объем кода.
Наиболее близким к заявленному техническому решению является стековая ЭВМ, содержащая стек и адресуемые регистры [6], выбранная в качестве прототипа, в которой ЭВМ содержит АЛУ, память, дешифратор команд, регистровый файл с данными стека, регистром указателем стека, регистрами общего назначения и двумя шинами доступа к данным стека и регистрам. ЭВМ также содержит регистр верхнего элемента стека, мультиплексоры на входах и выходе АЛУ, дешифратор команд, который декодирует и исполняет команды ЭВМ. Кроме этого дешифратор команд декодирует и исполняет префиксные команды, задающие операнды источники и операнд приемник для последующей команды обработки данных из регистров общего назначения или стека в различном их сочетании.
Недостатками данного технического решения является использование при обработке данных в памяти вспомогательных команд загрузки обрабатываемых данных из памяти в регистровый файл и выгрузки результатов обработки обратно в память, большое количество форматов команд, имеющих переменную длину, ограниченная разрядность информационных полей команд и большая длина команд.
Задачей, на решение которой направлено заявляемое изобретение, является достижение технического результата, заключающегося в сокращении числа команд и времени обработки данных в памяти, сокращении форматов и длины команд, а также снятии ограничений на разрядность информационного поля команд стековой ЭВМ.
Поставленная задача решается благодаря тому, что в стековой ЭВМ с префиксными командами, содержащей АЛУ, память, дешифратор команд, регистровый файл с данными стека, регистром указателем стека и шиной доступа к данным стека, содержащей регистр верхнего элемента стека, мультиплексоры на входах и выходе АЛУ, дешифратор команд, который декодирует и исполняет команды ЭВМ, в т.ч. префиксные команды, в которой мультиплексор на первом входе АЛУ соединен с дешифратором команд и регистровым файлом, мультиплексор на втором входе АЛУ соединен с регистром верхнего элемента стека и дешифратором команд, выход АЛУ соединен с выходным мультиплексором и памятью, выходной мультиплексор соединен с регистровым файлом и регистром верхнего элемента стека, предусмотрены следующие отличия: ЭВМ содержит регистр операнда, соединенный с мультиплексором на первом входе АЛУ и мультиплексором на выходе АЛУ, дешифратор команд дополнительно декодирует и исполняет две байтовые префиксные команды - операнда и константы, команда префикса операнда задает элемент стека или ячейку памяти, которые дешифратор использует как источник и приемник для следующей команды обработки, команду префикса константы дешифратор команд использует в качестве константы следующей команды обработки данных или для расширения разрядов ее информационного поля.
Между совокупностью существенных признаков заявляемой стековой ЭВМ с префиксными командами и достигаемым техническим результатом существует причинно-следственная связь, а именно команда префикса операнда позволяет выполнять обработку данных без использования вспомогательной команды выгрузки результата операции из стека в память, доступ к элементам стека позволяет обрабатывать данные без обращения к памяти, а префикс константы позволяет задавать константу для следующей команды обработки данных или расширять разряды ее информационного поля без введения дополнительных форматов команд.
Техническое решение позволяет сократить число команд и время обработки данных, снять ограничения на разрядность информационного поля команд стековой ЭВМ.
Изобретение поясняется чертежами. На фиг. 1 приведен пример тракта обработки данных стековой ЭВМ. На фиг. 2 приведен пример форматов команд стековой ЭВМ. На фиг. 3 приведена блок-схема примера программы вычисления выражения.
Тракт обработки данных стековой ЭВМ, изображенный на фиг. 1, содержит АЛУ 1, память 2, дешифратор команд 3, регистровый файл 4, регистр верхнего элемента стека 5, регистр операнда 6, мультиплексоры на входах 7, 8 и выходе 9 АЛУ 1, мультиплексор 8 на первом входе АЛУ 1 соединен с регистровым файлом 4, дешифратором команд 3 и регистром операнда 6, мультиплексор 7 на втором входе АЛУ 1 соединен с регистром верхнего элемента стека 5 и дешифратором команд 3, выход АЛУ 1 соединен с мультиплексором 9 и памятью 2, мультиплексор 9 по входу также соединен с памятью 2, а его выход соединен с регистровым файлом 4, регистром верхнего элемента стека 5 и регистром операнда 6.
Регистровый файл 4 содержит массив слов с данными стека, регистр указатель стека и имеет шину доступа к любому элементу стека.
Мультиплексор 8 имеет три входа, через которые он подает на первый вход АЛУ 1 данные из регистрового файла 4, регистра операнда 6 или константу от дешифратора команды 3.
Мультиплексор 7 имеет два входа, через которые он подает на второй вход АЛУ 1 данные из регистра верхнего элемента стека 5 или константу от дешифратора команды 3.
АЛУ 1 выполняет операции обработки данных, поданных на его входы. Выходной результат операции АЛУ записывается в память 2 или подается на вход мультиплексора 9.
Мультиплексор 9 имеет два входа, через которые он выбирает данные либо с выхода АЛУ 1, либо из памяти 2. Выбранные данные с выхода мультиплексора 9 дешифратор команд 3 записывает либо в регистровый файл 4, либо в регистр верхнего элемента стека 5, либо в регистр операнда 6.
Дешифратор команд 3 обеспечивает выполнение команд стековой ЭВМ и дополнительно выполняет две байтовые префиксные команды - операнда и константы. Для команды префикса операнда дешифратор команд 3 выполняет загрузку операнда в регистр операнда 6 из регистрового файла 4 или ячейки памяти 2 и затем записывает результат выполнения следующей команды обратно в регистровый файл 4 или ячейку памяти 2. Префикс константы дешифратор команд 3 использует в качестве константы для следующей команды обработки данных или для расширения разрядов ее информационного поля.
На фиг. 2 приведен пример форматов команд 16-разрядной стековой ЭВМ.
Коды ОР1 задают байтовые команды управления и команды обработки данных.
Коды ОР2 задают байтовые команды с 5-разрядным полем. Поле команды задает операнд или 5-разрядную константу. Операнд, заданный в команде - это элемент стека, адресуемый относительно указателя стека, либо ячейка памяти. Префикс константы используется для расширения разрядности полей следующей команды или как 5-разрядная константа для следующей команды обработки данных.
Коды ОР3 задают 2-байтовые команды условной и безусловной передачи управления с 8-разрядным смещением, а также команду загрузки 8-разрядной константы в стек.
Код ОР4 задает 2-байтовую команду вызова процедуры по 11-разрядному адресу. Байтовый префикс константы расширяет этот адрес до 16 разрядов.
Коды ОР5 задают 3-байтовую команду загрузки 16-разрядной константы в стек и команду доступа к памяти по 16-разрядному адресу.
На фиг. 3 приведена блок-схема программы вычисления выражения, приведенного в описании прототипа:
В блоке 1 осуществляется чтение переменной А на верхушку стека.
В блоке 2 верхушка стека дублируется в стеке.
В блоке 3 осуществляется чтение переменной С на верхушку стека.
В блоке 4 осуществляется умножение верхушки стека на префиксную константу 7.
В блоке 5 осуществляется сложение переменной А, сохраненной в стеке, и результата умножения.
В блоке 6 вычисляется разность значения копии переменной А и результата промежуточного вычисления выражения.
В блоке 7 осуществляется чтение переменной В на верхушку стека.
В блоке 8 осуществляется сложение элементов стека с сохранением результата на верхушке стека.
В блоке 9 содержимое верхушки стека записывается в переменную X.
Ниже в таблице приведены коды программы вычисления выражения 1 при обработке переменных в памяти и в стеке для форматов команд 16-разрядной стековой ЭВМ (фиг. 2).
Программа занимает 10 байт, если переменные находятся в стеке, и 18 байт, если переменные находятся в памяти.
Для прототипа программа вычисления данного выражения занимает 23 байта.
Ниже в таблице приведены сравнительные оценки объема кода и числа команд при реализации унарной операции инкремента (добавления единицы) переменной и бинарной операции сложения переменной с константой и с переменной в стековой ЭВМ, используемой как прототип, и в предлагаемой ЭВМ для переменной в памяти и в стеке.
Из таблицы следует, что предлагаемая стековая ЭВМ за счет префиксных команд обеспечивает сокращение объема кода, а также времени выполнения программ при обработке данных по сравнению с прототипом, кроме этого за счет префиксной команды константы предлагаемая стековая ЭВМ позволяет расширить разрядность информационных полей команд на 5 дополнительных разрядов, таким образом, например, относительный переход в командах ветвления уже не ограничен 8-разрядным смещением, а может составлять 13 разрядов, а двухбайтовые команды вызова процедур по 11-разрядному адресу при наличии 5-разрядного префикса константы позволяют адресовать 16-разрядную память.
Кроме этого в предлагаемом решении по сравнению с прототипом используется меньше форматов команд, а прямая адресация элементов стека позволяет выполнять обработку данных, размещенных в стеке, без использования основной памяти ЭВМ.
Источники информации
1. Hewlett-Packard: НР3000 Computer Systems: General Information Manual; August 1983; 5953-7553.
2. Патент США 4,980,821.
3. ANSI FORTH. Описание стандарта. АЕСН.431295.001Д4
ANSI Х3.215-1994.
4. Патент США 2007/0277021.
TM
5. The Java Virtual Mashine Specification. Second Edition.
Tim Lindholm, Frank Yellin. Sun Microsystems, Inc. 1999.
6. Патент США 2007/0061551 - прототип.