Команды сдвигов

RCL mem/reg, count RCL mem/reg, count

           
     


ROL mem/reg, count ROR mem/reg, count

       
   
 


SAL(SHL) mem/reg, count SAR mem/reg, count

           
     
 
 


       
   
 
 


SHR mem/reg, count

 
 


 
 


Здесь count – счётчик, определяющий число сдвигов. Этот операнд может быть указан как константа 1(статический сдвиг) или как регистр CL. В первом случае осуществляется сдвиг на один бит, а во втором – число сдвигов определяется содержимым регистра CL. Таким образом, число сдвигов можно задать переменной, вычисляемой во время выполнения программы (динамический сдвиг). Команды сдвигов подразделяются на команды циклических сдвигов (ротации) и обычных. В циклических сдвигах выдвигаемый бит помещается на место освобождающегося бита. При выполнении команд сдвигов флажок С всегда содержит значение последнего выдвинутого бита. Циклические сдвиги влияют только на флаги С и О. В обычных сдвигах флаги S,Z, и P модифицируются в соответствии с полученным результатом.

Команды RCL,RCR,ROL,ROR – реализуют циклические сдвиги. Команды RCL и RCR называются командами циклического сдвига влево и вправо через перенос.

Команды SHL и SHR – реализуют логический сдвиг влево и вправо. Здесь в освобождающийся бит загружается нуль, а выдвигаемый бит теряется. Команды SAL и SAR предназначены для арифметического сдвига влево и вправо. Арифметический сдвиг вправо отличается от логического тем, что знаковый бит, не сдвигается, а тиражируется в соседнем правом бите, сохраняя знак числа. Арифметический сдвиг влево в дополнительном коде не отличается от логического.

Рассмотрим пример. Пусть необходимо решить задачу формирования 32 разрядного числа из двух символов, вводимых с клавиатуры. Первый введённый символ помещается в младший байт младшего слова формируемого числа, второй символ в младший байт старшей части числа. Затем полученное число должно быть сдвинуто на три разряда влево. Основной фрагмент программы, реализующей решение этой задачи, имеет вид:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: