Эти команды обеспечивают основные операции, необходимые для выполнения действий над длинными невыровненными битовыми строками. Команды двойного сдвига выполняются как над словами, так и над двойными словами следующим образом :
Берутся два операнда длиной в слово и получается результат длиной в слово (32-разрядный сдвиг).
Берутся два операнда длиной в двойное слово и получается результат длиной в двойное слово (64-разрядный сдвиг).
Из двух операндов, операнд-источник должен быть регистром, в то время как операнд назначения может быть как регистром, так и ячейкой памяти. Количество битов, на которое выполняется сдвиг, может быть задано в регистре CL или непосредственно значением байта в команде. Биты, вытесненные за границу операнда-источника, заполняют пустые биты в операнде назначения, который тоже сдвигается. Сохраняется значение только операнда назначения.
Когда выполняется сдвиг на ноль позиций, ни один из флагов не подвергается изменениям. В противном случае, флагу CF присваивается значение последнего бита, вытесненного из операнда назначения, и изменяются значения флагов SF, ZF и PF. При сдвиге на один разряд флаг OF получает значение "единица", если знак операнда изменяется, в противном случае флаг OF очищается. При сдвигах более чем на один бит состояние флага AF не определено.
SHLD (Двойной сдвиг влево) сдвигает биты операнда назначения влево, заполняя пустые биты значениями битов, вытесняемых из операнда-источника (см. Рисунок 3-9). Результат запоминается в операнде назначения. Операнд-источник не изменяется.
SHRD (Двойной сдвиг вправо) сдвигает биты операнда назначения вправо, заполняя пустые биты значениями битов, вытесняемых из операнда-источника (цм. Рисунок 3-10). Результат запоминается в операнде назначения. Операнд-источник не изменяется.