shld операнд_1, операнд_2, счетчик_сдвигов — сдвиг влево двойной точности.
производит сдвиг влево операнда_1, заменяя освободившиеся справа биты значениями битов операнда_2, которые были бы вытолкнуты из него сдвигом влево на то же количество битов.
Количество сдвигаемых бит определяется значением счетчик_сдвигов, которое может лежать в диапазоне 0…31. Это значение может задаваться непосредственным операндом или содержаться в регистре cl. Значение операнд_2 не изменяется.
shrd операнд_1, операнд_2, счетчик_сдвигов — сдвиг вправо двойной точности.
производит сдвиг вправо операнда_1, заменяя освободившиеся слева биты значениями младших битов операнда_2, которые были бы вытолкнуты из него сдвигом вправо на то же количество битов. Количество сдвигаемых бит определяется значением счетчик_сдвигов, которое может лежать в диапазоне 0…31. Это значение может задаваться непосредственным операндом или содержаться в регистре cl. Значение операнд_2 не изменяется.
Команды shld и shrd осуществляют сдвиги до 32 разрядов, но за счет особенностей задания операндов и алгоритма работы эти команды можно использовать для работы с полями длиной до 64 бит.
Пример того, как можно осуществить сдвиг влево на 16 бит поля из 64 бит. ;... .data pole_l dd 0b21187f5h1 pole_h dd 45ff6711h .code ;... mov cl,16 ;загрузка счетчика сдвига в cl mov eax,pole_h shld pole_l, eax, cl shl pole_h,cl ;pole_l=87f50000h, pole_h=6711b211h