русс | укр

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

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

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

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


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

Koманды циклического сдвига.


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


Команды циклического сдвига выполняют циклическое перемещение разрядов в байтах, словах и двойных словах. Биты, вытесненные с одного конца операнда, заносятся в него с другого конца. В отличие от команд смещения никакие биты не очищаются в процессе циклического сдвига. Команды циклического сдвига используют только флаги CF и OF. Флаг CF может работать в качестве расширения операнда в двух командах циклического сдвига, позволяющих биту стать обособленным и затем быть проверенным командами условного перехода (JC или JNC). Флаг CF всегда содержит значение последнего бита, вытесненного за пределы операнда в процессе циклического сдвига, даже если команда не использует флаг CF в качестве расширения операнда. Состояние флагов SF, ZF, AF и PF не изменяется. При циклическом сдвиге на один бит флаг OF устанавливается, если операция изменяет самый старший бит (знаковый бит) операнда назначения. Если сохраняется исходное значение знака, флаг OF очищается. После циклического сдвига более чем на один бит значение флага OF не определено.

ROL (Циклический сдвиг влево) циклически сдвигает байт, слово или двойное слово операнда назначения влево на один бит или на количество битов, заданное в операнде-счетчике (непосредственное значение или значение, содержащееся в регистре CL). Для каждого разряда бит, который вытесняется с левого конца операнда, возвращается в правый конец. Смотри Рисунок 3-11. ROR (Циклический сдвиг вправо) циклически сдвигает байт, слово или двойное слово операнда назначения вправо на один бит или на количество битов, заданное в операнде-счетчике (непосредственное значение или значение, содержащееся в регистре CL). Для каждого разряда бит, который вытесняется с правого конца операнда, возвращается в левый конец. Смотри Рисунок 3-12.

RCL (Циклический сдвиг влево через перенос) циклически сдвигает байт, слово или двойное слово операнда назначения влево на один бит или на количество битов, заданное в операнде-счетчике (непосредственное значение или значение, содержащееся в регистре CL). Эта команда отличается от ROL тем, что она интерпретирует флаг CF как однобитовое расширение операнда назначения со стороны старших разрядов. Для каждого разряда бит, который вытесняется с левого конца операнда, перемещается во флаг CF. В тоже время бит, содержащийся во флаге CF, вводится с правой стороны. Смотри Рисунок 3-13.



RCR (Циклический сдвиг вправо через перенос) циклически сдвигает байт, слово или двойное слово операнда назначения вправо на один бит или на количество битов, заданное в операнде-счетчике (непосредственное значение или значение, содержащееся в регистре CL).

Эта команда отличается от ROR тем, что она интерпретирует флаг CF как однобитовое расширение операнда назначения со стороны младших разрядов. Для каждого разряда бит, который вытесняется с правого конца операнда, перемещается во флаг CF. В тоже время бит, содержащийся во флаге CF, вводится с левой стороны. Смотри Рисунок 3-14.

+-------------------------------------------------------------+| 31 0 || +--+ +----------------------------------------+ || |CF|---------| Приемник (память или регистр) |-+ || +--+ | +----------------------------------------+ | || | | || +-------------------------------------------------+ |+-------------------------------------------------------------+ Рисунок 3-11. Команда ROL. +-------------------------------------------------------------+| 31 0 || +----------------------------------------+ +--+ || +---->| Приемник (память или регистр) |------>|CF| || | +----------------------------------------+ | +--+ || | | || +-------------------------------------------------+ |+-------------------------------------------------------------+ Рисунок 3-12. Команда ROR. +-------------------------------------------------------------+| +---------------------------------------------------------+ || | | || | 31 0 | || | +--+ +----------------------------------------+ | || +------|CF|--| Приемник (память или регистр) |-+ || +--+ +----------------------------------------+ |+-------------------------------------------------------------+ Рисунок 3-13. Команда RCL. +-------------------------------------------------------------+| +--------------------------------------------------------+ || | | || | 31 0 | || | +----------------------------------------+ +--+ | || +---->| Приемник (память или регистр) |-->|CF|--+ || +----------------------------------------+ +--+ |+-------------------------------------------------------------+ Рисунок 3-14. Команда RCR.

3.4.4.4 Быстрый "bit blt" с использованием команд двойного сдвига

Одним из назначений команд двойного сдвига является реализация перемещения строки битов, с произвольным рассогласованием битовых строк. Это называется "bit blt" (BIT BLock Transfer - пересылка блока битов). Простым примером является перемещение строки битов с произвольного смещения в памяти в выровненную по двойным словам строку байт. Слева направо в строке пересылается 32 бита за один раз, если в цикле пересылки используется двойное смещение.

MOV ESI,ScrAddr MOV EDI,DestAddr MOV EBX,WordCnt MOV CL,RelOffset ; относительное смещение Dest-Src MOV EDI,[ESI] ; загрузить первое слово источника ADD ESI,4 ; увеличить адрес источникаBltLoop: LODS ; новая часть в убывающем порядке ; в EAX SHLD EDX,EAX,CL ; переписать содержимое EDX на ; выровненную вставку XCHG EDX,EAX ; поменять местами старшее и младшее ; слово STOC ; записать очередную выровненную ; часть данных DEC EBX ; уменьшить счетчик цикла JNZ BltLoop

Это простой цикл, позволяющий данным быть перемещенными по 32-разрядным частям с наивысшей возможной скоростью. Без двойного смещения наилучшим результатом, который может быть получен, является 16-разрядная пересылка за цикл с использованием 32-разрядного смещения, и заменой команды XCHG на команду ROR по 16 бит для замены местами старшего и младшего слова в регистрах. Более общий цикл, чем приведен выше, потребует некоторого маскирования первого перемещаемого двойного слова (перед основным циклом), последнего перемещаемого двойного слова (после основного цикла), но будет пересылать те же 32 бита за один цикл, что и программа, приведенная выше.



<== предыдущая лекция | следующая лекция ==>
Команды двойного сдвига. | Быстрая вставка и исключение битовых строк.


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


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

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

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


 


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

 
 

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

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