Материал: Основы программирования микроконтроллеров на языке step 7. Слепокуров Ю.С

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Исходное значение

0

1 0

0

0

0

0

1

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

NEGR

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Результат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1 0

0

0

0

0

1

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Рис. 12.8. Изменение знака числа с плавающей точкой

23. ЛОГИЧЕСКИЕ ОПЕРАЦИИ СО СЛОВАМИ

Логические операции со словами комбинируют пары слов (16 битов) или двойных слов (32 бита) бит за битом в соответствии с правилами булевой логики. Каждое слово или двойное слово должно находиться в одном из двух аккумуляторов.

Для слов содержимое младшего слова аккумулятора 2 комбинируется с содержимым младшего слова аккумулятора 1. Результат комбинирования сохраняется в младшем слове аккумулятора 1, заменяя его старое содержимое. Для двойных слов содержимое аккумулятора 2 комбинируется с содержимым аккумулятора 1. Результат комбинирования сохраняется в аккумуляторе 1, заменяя его старое содержимое.

Если результат логического комбинирования равен 0, то бит CC 1 слова состояния сбрасывается в 0. Если результат логического комбинирования не равен 0, то CC 1 устанавливается в 1. В любом случае биты CC 0 и OV слова состояния сбрасываются в 0.

Для выполнения логических операций со словами в вашем распоряжении имеются следующие команды:

Мнемон

Команда

 

Функция

ика

 

 

 

 

AW

Поразрядное

 

 

Комбинирует бит за битом два слова в

 

логическое

И

со

соответствии с таблицей истинности для И

 

словами

 

 

 

OW

Поразрядное

 

 

Комбинирует бит за битом два слова в

 

логическое

ИЛИ

со

соответствии с таблицей истинности для ИЛИ

 

словами

 

 

 

XOW

Поразрядное

 

 

Комбинирует бит за битом два слова в

 

исключающее ИЛИ

соответствии с таблицей истинности для

 

со словами

 

 

исключающего ИЛИ

AD

Поразрядное

 

 

Комбинирует бит за битом два двойных слова

 

логическое

И

с

в соответствии с таблицей истинности для И

 

двойными словами

 

 

OD

Поразрядное

 

 

Комбинирует бит за битом два двойных слова

 

логическое

ИЛИ

с

в соответствии с таблицей истинности для

115

Мнемон

Команда

Функция

ика

 

 

 

двойными словами

ИЛИ

XOD

Поразрядное

Комбинирует бит за битом два двойных слова

 

исключающее ИЛИ с

в соответствии с таблицей истинности для

 

двойными словами

исключающего ИЛИ

Команда AW, OW или XOW может использовать в качестве операнда 16– битовую константу. Команда комбинирует содержимое младшего слова аккумулятора 1 с 16–битовой константой.

Команда AD, OD или XOD может использовать в качестве операнда 32– битовую константу.

24.КОМАНДЫ СДВИГА И ЦИКЛИЧЕСКОГО СДВИГА

Спомощью команд сдвига вы можете побитно сдвинуть налево или направо содержимое младшего слова аккумулятора 1 или содержимое всего аккумулятора. Сдвиг на n битов влево умножает содержимое аккумулятора на 2n, сдвиг на n битов вправо делит содержимое аккумулятора на 2n. Таким образом, если, например, вы сдвигаете двоичный эквивалент десятичного числа 3 на 3 бита влево, то в аккумуляторе получается двоичный эквивалент десятичного числа 24. Если вы сдвигаете двоичный эквивалент десятичного числа 16 на 2 бита вправо, то в аккумуляторе получается двоичный эквивалент десятичного числа 4.

Число, следующее за командой сдвига или записанное в младшем байте младшего слова аккумулятора 2, указывает, на сколько битов должен быть произведен сдвиг. Разряды, освобождаемые командой сдвига, заполняются нулями или сигнальным состоянием знакового бита (0 - для положительных чисел, 1 - для отрицательных). Последний сдвинутый бит загружается в бит СС 1 слова состояния. Биты СС 0 и OV слова состояния сбрасываются в 0. Вы можете анализировать бит СС 1 с помощью команд перехода.

Команды сдвига безусловны, т.е. их выполнение не зависит ни от каких определенных условий. Они не влияют на результат логической операции.

Команды сдвига: числа без знака

Следующие команды сдвигают побитно содержимое младшего слова аккумулятора 1 влево или вправо:

Сдвинуть слово влево (SLW, 16 битов);

Сдвинуть слово вправо (SRW, 16 битов).

Следующие команды сдвигают все содержимое аккумулятора 1 побитно влево или вправо:

Сдвинуть двойное слово влево (SLD, 32 бита);

Сдвинуть двойное слово вправо (SRD, 32 бита).

116

Во всех случаях освободившиеся битовые разряды заполняются нулями.

0

0

0

0

0

0

0

0

0

0

 

1

1

1

1

0

1

0

 

1

0

1

0

1

 

 

 

 

 

 

 

 

 

 

 

 

SLW 6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

0

1

1

1

1

0

1

 

0

1

0

1

0

1

0

 

0

0

0

0

0

 

Эти пять бит

Бит, сдвигаемый последним,

 

Освободившиеся

 

теряются

 

сохраняется в бите CC 1 слова

 

 

 

 

разряды

 

 

 

 

 

 

 

 

состояния.

 

 

 

 

 

 

 

 

 

 

 

 

заполняются

Рис. 14.1. Сдвиг младшего слова аккумулятора 1 на 6 разрядов влево

Операции сдвига: числа со знаком

Команда Сдвинуть целое число со знаком (SSI, 16 битов) сдвигает содержимое младшего слова аккумулятора 1 побитно вправо, включая знак.

Команда Сдвинуть двойное целое число со знаком (SSD, 32 бита) сдвигает все содержимое аккумулятора побитно вправо, включая знак.

Знаковый бит копируется в освободившиеся битовые разряды.

1

0

0

0

1

1

1

1

0

1

 

0

1

0

1

0

1

1

1

0

1

0

1

 

 

 

 

 

 

 

 

 

 

 

SSI 6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

1

1

1

1

1

0

0

0

 

1

1

1

1

0

1

0

1

0

1

0

1

Освободившиеся

разряды

заполняются знаковым битом

Бит, сдвигаемый последним, Эти пять бит сохраняется в бите CC 1 слова теряются

состояния.

Рис. 14.2. Сдвиг младшего слова аккумулятора 1 на шесть разрядов со знаком В табл. 14.1 приведены характеристики команд сдвига.

 

 

 

 

 

 

Табл. 14.1

Команд

Задействованна

Направл

Указание

Заполнитель

 

Диапазон

а

я область

ение

количества

для

 

сдвига

 

 

 

разрядов для

освободивш

 

 

 

 

 

сдвига

 

ихся

 

 

 

 

 

 

 

разрядов

 

 

SLW n

Младшее слово

влево

В операторе

 

0

 

n = 0 ÷15

 

аккумулятора 1

 

 

 

 

 

 

SLW

Младшее слово

влево

В младшем

байте

0

 

0 ÷ 255 2)

 

аккумулятора 1

 

младшего

слова

 

 

 

 

 

 

аккумулятора 2

 

 

 

117

Команд

Задействованна

Направл

Указание

Заполнитель

Диапазон

а

я область

ение

количества

для

сдвига

 

 

 

разрядов для

освободивш

 

 

 

 

сдвига

 

ихся

 

 

 

 

 

 

разрядов

 

SLD n

Аккумулятор 1

влево

В операторе

 

0

n = 0 ÷32

SLD

Аккумулятор 1

влево

В младшем

байте

0

0 ÷ 255 3)

 

 

 

младшего

слова

 

 

 

 

 

аккумулятора

2

 

 

SRW n

Младшее слово

вправо

В операторе

 

0

n = 0 ÷15

 

аккумулятора 1

 

 

 

 

 

SRW

Младшее слово

вправо

В младшем

байте

0

0 ÷ 255 2)

 

аккумулятора 1

 

младшего

слова

 

 

 

 

 

аккумулятора

2

 

 

SRD n

Аккумулятор 1

вправо

В операторе

 

0

n = 0 ÷32

SRD

Аккумулятор 1

вправо

В младшем

байте

0

0 ÷ 255 3)

 

 

 

младшего

слова

 

 

 

 

 

аккумулятора

2

 

 

SSI n

Младшее слово

вправо

В операторе

 

Знаковый

n = 0 ÷15

 

аккумулятора 1

 

 

 

бит

 

SSI

Младшее слово

вправо

В младшем

байте

Знаковый

0 ÷ 255 4)

 

аккумулятора 1

 

младшего

слова

бит

 

 

 

 

аккумулятора

2

 

 

SSD n

Аккумулятор 1

вправо

В операторе

 

Знаковый

n = 0 ÷32

 

 

 

 

 

бит

 

SSD

Аккумулятор 1

вправо

В младшем

байте

Знаковый

0 ÷ 255 5)

 

 

 

младшего

слова

бит

 

 

 

 

аккумулятора

2

 

 

Примечания:

1)Если количество разрядов, на которые необходимо произвести сдвиг или циклический сдвиг, равно 0, то команда выполняется как NOP.

2)Для величин сдвига, больших 16, результат функции сдвига равен

W#16#0000 и CC 1 = 0.

3)Для величин сдвига, больших 32, результат функции сдвига равен

DW#16#0000_0000 и CC 1 = 0

4)Для величин сдвига, больших 15, результат функции сдвига равен

W#16#0000 и CC 1 = 0 или W#16#FFFF и CC 1 = 1 в зависимости от знака (0

или 1).

5)Для величин сдвига, больших 31, результат функции сдвига равен

DW#16#0000_0000 (CC 1 = 0) или DW#16#FFFF_FFFF (CC 1 = 1) в зависимости от знака числа битов, подлежащих сдвигу.

Команды циклического сдвига С помощью команд циклического сдвига вы можете побитно циклически

118

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

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

Взависимости от команды циклический сдвиг выполняется через бит СС 1 в слове состояния. Бит СС 0 в слове состояния сбрасывается в 0.

Имеются следующие команды циклического сдвига:

• Сдвинуть циклически влево двойное слово (RLD)

• Сдвинуть циклически вправо двойное слово (RRD)

• Сдвинуть циклически влево аккумулятор 1 через бит CC 1 (RLDA)

• Сдвинуть циклически вправо аккумулятор 1 через бит CC 1 (RRDA)

Если число битов, на которое нужно произвести циклический сдвиг, равно 0, то команда выполняется как пустая операция (NOP).

Втабл. 14.2 приведены характеристики команд циклического сдвига.

 

 

 

 

 

 

Табл. 14.2

Команда

Сдвигать

Направление

 

Указание количества

Диапазон

 

через СС1?

 

 

разрядов для сдвига

сдвига

RLD n

нет

влево

В операторе

 

n = 0 ÷ 32

RLD

нет

влево

В

младшем

байте

0 ÷ 255

 

 

 

младшего

слова

 

 

 

 

аккумулятора 2

 

 

RRD n

нет

вправо

В операторе

 

n = 0 ÷ 32

RRD

нет

вправо

В

младшем

байте

0 ÷ 255

 

 

 

младшего

слова

 

 

 

 

аккумулятора 2

 

 

RLDA

да

влево

 

 

 

1

RRDA

да

вправо

 

 

 

1

RLD 3

1 1 1 1 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1

1 1 1 1 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1

Три выдвигаемых бита вставляются в освободившиеся позиции. Последний сдвинутый бит также

сохраняется в CC 1.

Рис. 14.3.. Циклический сдвиг аккумулятора 1 на три разряда влево

119

Смотрите также:

12
1673
271
2863
2994
3788
3857
54
5719
605