Primula C Compiler     Xameleon Project        |        In English

Закладки? Нет — очередное расширение системы команд

Comment are off

Мы погрязли в отладке следующих, ещё не перенесённых в конвейерную версию, инструкций. Сложность заключается в том, что при изменении схематики приходится заново прогонять все тесты и вместе с добавлением новой функциональности добиваться идентичного прохода уже пройденных тестов. В общем — рутина. Как только следующая инструкция пройдёт тесты, так сразу про это появится статья на нашем сайте. А пока немного отвлечёмся и поговорим о… закладках.

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

Как вы понимаете, если разработчик архитектуры «Эверест» начинает всерьёз интересоваться закладками, публично их обсуждать и вообще привлекать внимание к этой теме, то возникает резонный вопрос — а не собирается ли он встроить закладку? Воспользуемся принципом: «Не можешь победить — возглавь это». Итак, делаем анализатор потока инструкций в виде такого устройства:
long_instruction

И вешаем его на старшие биты шины IDA. Таким образом мы анализируем поток инструкций и при совпадении последовательности длиной 31 байт, заданной в ПЗУ (x_instruction_rom), устанавливаем выходной сигнал hit. Исходный код блока form4_decoder:
form4_decoder

И сгенерированная на основе этого кода схематика:
Analyzer

Замечу, что в отличие от опубликованной на ixbt схематики, этот блок не шифруется и не сохраняет информацию о состоянии детектирования последовательности. Сигнал hit будет установлен лишь на один такт во время совпадения последовательности кода с эталонной.

А теперь наступило время «открыть карты». Речь же изначально шла о закладках? Не так ли? А давайте считать «закладками» лишь недокументированные инструкции, а если инструкция описана в стандарте или его расширении, то такую инструкцию считать закладкой не будем. И что же у нас получилось? Очередной раз мы превращаем недостаток в преимущество и находим новую, уже четвёртую по счёту, возможность расширения системы команд, но на этот раз по принципу «закладок». Есть ли смысл в таком расширении системы команд? Отчасти. Дело в том, что системе команд «Эверест» версии 1 ревизии 2 мы определили инструкции вплоть до 5 байт длиной. Это инструкции загрузки 32-х битной константы в регистр. Но в запасе остался блок инструкции из диапазона 0xf0-0xff, а их длину мы предусмотрительно не определили в текущей ревизии. Это было задумано для практически безграничного расширения кодов инструкции за счёт увеличения их размера. Поэтому нет особого смысла в расширении системы команд за счёт комбинации инструкций. Однако, ширина шины IDA (в текущей редакции — 40 бит) вводит некоторые ограничения на длину инструкций. Таким образом описанный способ расширения системы команд позволяет обойти ограничение ширины шины IDA, если по каким-то причинам её невозможно расширить.

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

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

Во избежание инсинуаций хотелось бы отметить отдельно, что употребляя местоимение «мы», я говорю от лица нашей команды с которой вы вскоре познакомитесь. Предоставленная информация имеет статус Prior Art, а при перепечатке или переводе обязательно указывайте ссылку на оригинал статьи.

Оставить комментарий