Справочник по языку Ассемблера IBM PC

       

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


Система команд последних моделей микропроцессоров 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



Содержание раздела