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