Программирование функций сдвига в STL
Доступные пользователю функции сдвига приведены в таблице 2.9. Их обозначение зависит от способа задания количества разрядов, на которое осуществляется сдвиг. Число позиций для функции сдвига может быть задано двумя путями – в аккумуляторе 2 или в параметре инструкции.
Таблица 2.9 - Обзор функций сдвига
Функция сдвига | W (слово) | DW (двойное слово) | ||
Число позиц. как параметр | Число поз. в Accum2 | Число позиц. как параметр | Число поз. в Accum2 | |
Сдвиг влево | Slwn | SLW | Sldn | SLD |
Сдвиг вправо | Srwn | SRW | Srdn | SRD |
Сдвиг со знаком | Ssin | SSI | Ssdn | SSD |
Циклический сдвиг влево | Rldn | RLD | ||
Циклический сдвиг вправо | Rrdn | RRD | ||
Циклический сдвиг влево через бит СС1 | RLDA | |||
Циклический сдвиг вправо через бит СС1 | RRDA |
Так, например, сдвиг слова данных влево осуществляется инструкциями:
SLW n // Сдвиг слова данных влево на n разрядов
SLW // Сдвиг слова данных влево на количество разрядов, указанных в аккумуляторе 2
Функция сдвига SLW позволяет бит за битом сдвигать влево данные, которые находятся в младшем слове аккумулятора 1 ( с 0 по 15). При этом разряды, которые освобождаются при сдвиге указанных бит, заполняются нулями. Биты, которые находятся в старшем слове аккумулятора остаются без изменения. Перенесение данных в бит 16 не выполняется.
Если содержимое аккумулятора 1 (младшего слова) интерпретируется как целое типа INT, то сдвиг влево эквивалентный умножению на 2.
Для сдвига двойного слова данных влево следует применять инструкции:
SLD n; //сдвиг двойного слова влево на n разрядов
SLD; //сдвиг двойного слова данных влево на количество разрядов, указанных в аккумуляторе 2
При сдвиге слова данных вправо применяются инструкции:
SRW n;
SRW;
Если содержимое аккумулятора 1 (младшего слова) интерпретируется как целое число формата INT, то сдвиг вправо эквивалентный делению на 2.
Функции сдвига устанавливают бит состояния CC0 в "0", а бит CC1 в состояние, в котором находился последний перемещенный бит.
Биты состояния проверяются с помощью двоичного опроса или в операциях перехода.
Функция циклического сдвига с битом состояния CC1 смещает содержимое аккумулятора 1 на одну разрядную позицию.
Примеры программирования функций сдвига:
L MW 130;
SLW 4; //сдвиг слова на 4 разряда влево
T MW 132;
… …
L #actval;
SSI 2; //сдвиг слова данных на 2 разряда вправо со знаком
T #display;
При сдвиге числа INT со знаком инструкцией SSI освобождающиеся разряды заполняются значением знакового бита 15, то есть значением "0", если число положительное и значением "1", если число отрицательное.
При сдвиге двойного слова данных (числа типа DINT) со знаком применяется инструкция SSD. Разряды, которые освобождаются при сдвиге, заполняются значением бита 31, который содержит знак числа формата DINT.
Операции циклического сдвига RLD и RRD позволяют бит за битом сдвигать влево (RLD) или вправо (RRD) данные, которые находятся во всех разрядах аккумулятора 1. При этом освобожденный при сдвиге разряд заполняется значением бита, который был "вытолкнут" из аккумулятора последним.
Циклический сдвиг может также выполняться через бит состояния CC1.
Дата добавления: 2016-12-09; просмотров: 2845;