русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-01-16; просмотров: 2061; Нарушение авторских прав


В командах сдвига источник должен содержать значение счетчика сдвигов. Естественно, это значение должно быть целым числом без знака, да к тому же и лежать в разумных пределах (в последних публикациях указывается ограничение, равное 31. Правда, говорится, что оно может быть и большим, до 255, но команды сдвига воспринимают из этого значения- источника только младшие 5 двоичных разрядов). Среди команд сдвига 2 выполняют арифметический сдвиг, а 2 –логический. Отличие в том, что при арифметическом сдвиге в качестве операндов выступают числа со знаком и это надо учитывать в программе. Рассмотрим эти команды подробнее.

Сдвиг влево логический SHL приемник, источник –каждый бит приемника сдвигается влево на указанное число двоичных разрядов. Освобождаемые позиции в младших разрядах заполняются нулями. Если представить эту операцию как серию сдвигов на 1 позицию, то старший разряд перед последним сдвигом попадает во флаг CF.

 

               

0

 

               

1.1. CF

 

 


Сдвиг вправо логический SHR приемник, источник –каждый бит приемника сдвигается вправо на указанное число двоичных разрядов. Освобождаемые позиции в старших разрядах заполняются нулями. Если представить эту операцию как серию сдвигов на 1 позицию, то младший разряд перед последним сдвигом попадает во флаг CF.

 

               

 

               

1.2. CF

 

 


Сдвиг влево арифметический SАL приемник, источник –каждый бит приемника сдвигается влево на указанное число двоичных разрядов. Освобождаемые позиции в младших разрядах заполняются нулями. Знак операция не сохраняет, но устанавливает в 1 флаг CF, если изменяется знаковый разряд очередным сдвигаемым битом, поэтому на приведенной ниже иллюстрации команды связь с флагом обозначена прерывистой линией.



 

               

0

 

               

1.3. CF

 

 


Сдвиг вправо арифметический SАR приемник, источник –каждый бит приемника сдвигается влево на указанное число двоичных разрядов. Команда сохраняет знак операнда-приемника, восстанавливая его после сдвига каждого очередного бита.

 

               

 

 

               

1.4. CF

 

 


Все описанные команды позволяют умножать (при сдвиге влево) или делить (при сдвиге вправо) значение источника на степени числа 2. При этом скорость выполнения команд сдвига намного больше, чем скорость операций умножения или деления.

Циклический сдвиг ROL и ROR отличается от логического тем, что выдавливаемые за пределы разрядной сетки биты операнда-приемника записываются в него же на освобождаемые справа или слева позиции. Последний выдавливаемый справа или слева разряд записывается во флаг CF.

 

               

 

 

               

1.5. CF

 

 


Команды циклического сдвига RCL и RCR отличаются от предыдущих тем, что выдавливаемые биты становятся значением флага CF и только на следующем выполнении этих команд (при условии, что они выполняются в цикле) бит из флага CF заносится в младший или старший биты операнда-приемника.

 

 

               

 

 

               

1.6. CF

 


Занесение бита после предыдущего сдвига

 

Можно использовать команды циклических и обычных сдвигов для умножения и деления чисел в формате двойного слова на степени двойки. Рассмотрим 32-битовое число, в котором старшие 16 бит хранятся в DX, а младшие – в AX и виде DX:AX. Инструкции для умножения этого числа таковы:

SHL AX,1 ;сдвигаем все биты налево, а старший – в CF

RCL DX,1 ;помещаем бит из CF в DX, предварительно сдвинув все биты регистра влево.

Для деления на 2 такого числа нужно применить команды:

SAR DX,1 ;сдвигаем биты направо, а младший – в CF

RCR AX,1 ;все биты АХ сдвигаем направо, а на освободившееся место записываем выдвинутый на предыдущем шаге бит из DX.

 

Вопросы для проверки усвоения команд пересылки данных.

1. Для команды с двумя операндами укажите, какой операнд является источником, а какой приемником?

2. Укажите символьные инструкции (команды ассемблера), выполняющие следующие действия: сдвиг СХ на 2 бита вправо; сдвиг АХ на 2 бита влево; помещение значения 426 в СХ; сравнение BYTE1 и 25Н.

3. Полагая, что DL содержит 011110001В, а элемент данных BOOL содержит 11100011В, определите результат в DL каждой отдельно взятой инструкции:

а) AND DL,BOOL b) OR DL,BOOL

c) XOR DL,BOOL d) AND DL,00000000B

e) XOR DL,11111111B f) NOT DL

Какими инструкциями будет установлен в 1 флаг ZF?

4. Полагая, что DX содержит значение 10111001 10111001В, определите, какое значение будет содержать DX после выполнения следующих отдельно взятых инструкций:

a) SHL DL,1 b) SHL DX,2 c) SHR DX,1

d) SAR DX,2 e) SAL DH,3 f) ROR DX,3

g) ROR DL,3

 



<== предыдущая лекция | следующая лекция ==>
Команды манипулирования битами | Общие сведения


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.346 сек.