Дополнительные команды сдвига
Система команд последних моделей микропроцессоров Intel, начиная с i80386, содержит дополнительные команды сдвига, расширяющие возможности, рассмотренные нами ранее.
Это — команды сдвигов двойной точности:
операнд_1,операнд_2,счетчик_сдвигов — сдвиг влево двойной точности.
Команда shld производит замену путем сдвига битов операнда операнд_1 влево, заполняя его биты справа значениями битов, вытесняемых из операнд_2 согласно схеме на рис. 5. Количество сдвигаемых бит определяется значением счетчик_сдвигов, которое может лежать в диапазоне 0...31. Это значение может задаваться непосредственным операндом или содержаться в регистре cl. Значение операнд_2 не изменяется.
Рис. 5. Схема работы команды shld
операнд_1,операнд_2,счетчик_сдвигов — сдвиг вправо двойной точности.
Команда производит замену путем сдвига битов операнда операнд_1 вправо, заполняя его биты слева значениями битов, вытесняемых из операнд_2 согласно схеме на рис. 6. Количество сдвигаемых бит определяется значением счетчик_сдвигов, которое может лежать в диапазоне 0...31. Это значение может задаваться непосредственным операндом или содержаться в регистре cl. Значение операнд_2 не изменяется.
Рис. 6. Схема работы команды shrd
Как мы отметили, команды 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 |