Прыгнуть в середину инструкции - в IA-32 - PullRequest
3 голосов
/ 03 марта 2011

Почему IA-32 позволяет нам перейти к середине инструкции?

как я могу использовать эту архитектоническую характеристику для оптимизации, когда пишу в Ассемблере? (кроме очевидных случаев мы хотели бы сохранить кодировку команды в регистре и затем активировать эту команду)?

Ответы [ 2 ]

3 голосов
/ 03 марта 2011

Правильнее будет сказать, что это не заставляет вас переходить только к началу инструкций ...

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

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

3 голосов
/ 03 марта 2011

IA-32 позволяет прыгать в середину инструкции по историческим причинам. Набор команд x86 является результатом последовательных уровней по сравнению с набором команд, используемым 8080, предшественником первого «x86» - что возвращает нас к концу 70-х годов. В то время оперативная память была очень дорогой, и стоило иметь как можно более короткие инструкции, даже если это подразумевало, что все инструкции не имеют одинаковую длину. Прямо сейчас, длина инструкции IA-32 может быть где угодно между 1 байтом и больше чем 12 байтов. Это подразумевает, что любой адрес потенциально может быть началом инструкции (без требования выравнивания), но многие адреса указывают на некоторый байт в середине инструкции. Прыжок в середину инструкции указывает ЦПУ переосмыслить байты машинного кода, начиная с целевого байта перехода, что приводит к совершенно другим инструкциям.

Для оптимизации правильный способ использовать функцию «прыгнуть в середину» состоит в том, чтобы не использовать ее. Процессор декодирует поток команд, конвертируя его внутренне в последовательность микрокоманд с гораздо более регулярной структурой, и работает над этим, чтобы ускорить процесс (параллельное выполнение, следование спекулятивному переходу и т. Д.). Средние прыжки могут нанести ущерб этим оптимизациям.

...