Пример применения функций сдвига
Сдвиг переменных размером в слово показан на рисунке 2.31. Значение в слове памяти MW 130 сдвигается на 4 позиции влево и хранится в слове памяти MW 132.
Число сдвигов на входе N может быть константой или переменной. Если число сдвигов равно 0, то функция не выполняется, если больше 15, то исходная переменная после выполнения функции содержит нуль.
Рисунок 2.31 - Пример сдвига числа INT
При сдвиге двойного слова, например функцией SHR_DI, содержимое переменной типа DINT на входе IN сдвигается побитно вправо на количество позиций, которое задано на входе N. Битовые разряды, освобожденные при сдвиге, заполняются значениями бита 31, который является знаком числа DINT. Сдвиг вправо числа в формате DINT эквивалентен делению на , где показатель степени n является числом сдвигов.
Циклические сдвиги переменной влево осуществляются с помощью функции ROL_DW. Функция сдвигает влево содержимое переменной типа DWORD на входе IN побитно на количество позиций, заданное числом на входе N. Битовые позиции, которые высвобождаются при сдвиге, заполняются вытесненными битовыми разрядами. Результат содержится в переменной типа DWORD на выходе OUT.
Число сдвигов на входе N может быть константой или переменной. Если число сдвигов равно 0, то функция не выполняется. Если оно равно 32, то содержимое входной переменной сохраняется и устанавливаются биты состояния. Если число сдвигов равно 33, осуществляется сдвиг одного разряда, если равно 34, сдвигаются два разряда и так далее, т.е. сдвиги выполняется по модулю 32.
Циклический сдвиг переменной вправо осуществляется с помощью функции ROR_DW.
Дата добавления: 2016-12-09; просмотров: 2468;