Дополнительные команды сдвига

Система команд последних моделей микропроцессоров Intel, начиная с i80386, содержит дополнительные команды сдвига, расширяющие возможности, рассмотренные нами ранее.

Это — команды сдвигов двойной точности:

shld операнд_1,операнд_2,счетчик_сдвигов — сдвиг влево двойной точности.

Команда shld производит замену путем сдвига битов операнда операнд_1 влево, заполняя его биты справа значениями битов, вытесняемых из операнд_2 согласно схеме на рис. 5. Количество сдвигаемых бит определяется значением счетчик_сдвигов, которое может лежать в диапазоне 0...31. Это значение может задаваться непосредственным операндом или содержаться в регистре cl. Значение операнд_2 не изменяется.

 

 

shrd операнд_1,операнд_2,счетчик_сдвигов — сдвиг вправо двойной точности.

Команда производит замену путем сдвига битов операнда операнд_1 вправо, заполняя его биты слева значениями битов, вытесняемых из операнд_2 согласно схеме на рис. 6. Количество сдвигаемых бит определяется значением счетчик_сдвигов, которое может лежать в диапазоне 0...31. Это значение может задаваться непосредственным операндом или содержаться в регистре cl. Значение операнд_2 не изменяется.

 

 

Как мы отметили, команды shld и shrd осуществляют сдвиги до 32 разрядов, но за счет особенностей задания операндов и алгоритма работы эти команды можно использовать для работы с полями длиной до 64 бит.

Например, рассмотрим, как можно осуществить сдвиг влево на 16 бит поля из 64 бит.

;...

.data

pole_l dd 0b21187f5h1

pole_h dd 45ff6711h

.code

;...

.386

mov cl,16 ;загрузка счетчика сдвига в cl

mov eax,pole_h

shld pole_l,eax,cl

shl pole_h,cl ;pole_l=87f50000h, pole_h=6711b211h