it-swarm-ru.tech

Какова цель инструкций поворота (ROL, RCL на x86)?

Мне всегда было интересно, какова цель инструкций поворота, которые есть у некоторых процессоров (например, ROL, RCL на x86). Какое программное обеспечение использует эти инструкции? Сначала я подумал, что они могут быть использованы для шифрования/вычисления хеш-кодов, но эти библиотеки обычно пишутся на C, в котором нет операторов, которые соответствуют этим инструкциям.
Кто-нибудь нашел для них применение? Почему, где они добавили в набор инструкций?

25
Gratian Lup

Повороты требуются для сдвигов битов по нескольким словам. Когда вы SHL нижнего слова, старший бит выливается в переноску. Чтобы завершить операцию, вам нужно сдвинуть старшее Слово (слова), в то же время перенося перенос на младший бит. RCL - это инструкция, которая выполняет это.

 Старшее слово Низкое слово CF 
 Initial 0110 1001 1011 1001 1100 0010 0000 1101? 
 SHL Low Word 0110 1001 1011 1001 1000 0100 0001 1010 1 
 RCL старшее слово 1101 0011 0111 0011 1000 0100 0001 1010 1 .__ ,

ROL и ROR полезны для проверки значения побитовым способом, который (в конечном счете) является неразрушающим. Они также могут быть использованы, чтобы шунтировать битовую маску, не внося мусорные биты.

23
Nietzche-jou

Коды операций сдвига поворота ROL, RCL, ROR, RCR) используются почти исключительно для хеширования и вычислений CRC. Они довольно загадочны и очень редко используются.

Сдвиговые коды операций (SHL, SHR) используются для быстрого умножения на степени 2 или для перемещения младшего байта в старший байт большого регистра.

Разница между ROL и SHL в том, что ROL берет старший бит и катит его в младшую позицию. SHL выбрасывает старший бит и заполняет позицию младшего бита нулем.

16
dthorpe

ROR ROL являются «историческими», но все же полезными во многих отношениях.

До 80386 (и кода операции BT), ROL много использовался бы для проверки бита (SHL не распространяется на флаг переноса) - фактически в 8088 году ROR/ROL сдвигался только на 1 бит за раз !!! !

Также, если вы хотите сдвинуться в одну сторону, а затем в другую, не теряя биты, которые были сдвинуты из области видимости, вы бы использовали ROR/ROL вместо SHR/SHL

8
Alain Pannetier

Если я вас правильно понимаю, ваш вопрос таков:

"Учитывая тот факт, что инструкции ротации выглядят очень специализированными и не генерируются компиляторами, когда они фактически используются и почему они включены в ЦП?" 

Ответ двоякий:

  1. Процессоры не предназначены специально для выполнения программ на C. Скорее, они спроектированы как машины общего назначения, предназначенные для решения широкого круга задач с использованием широкого спектра различных инструментов и языков.

  2. Разработчики языка не обязаны использовать каждый код операции в CPU. Фактически, в большинстве случаев это не так, потому что некоторые инструкции ЦП являются узкоспециализированными, и у разработчика языка нет острой необходимости их использовать.

Дополнительную информацию о побитовых операторах (и как они связаны с программированием на C) можно найти здесь: http://en.wikipedia.org/wiki/Bitwise_operation

2
Robert Harvey

Когда микропроцессоры создавались впервые, большинство программ были написаны на ассемблере, а не скомпилированы. Большинство инструкций процессора, вероятно, не генерируются компиляторами (что является стимулом для создания RISC), но часто относительно легко реализуются в аппаратном обеспечении.

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

1
Gabe