3 |
3 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
|
|
|
|
|
|
1 0 0 0 0 r r r 0 0 0 0 0 b b b b b b b b b b b b b b b b x x x
Бит 31 = 1 задает косвенную адресацию с указанием области памяти через регистр. Биты 24, 25 и 26 (rrr): идентификатор области (область памяти, см. таблицу 3.4). Биты с 3 по 18 (bbbb bbbb bbbb bbbb): номер (диапазон от 0 до 65 535) адресуемого байта.
Биты с 0 по 2 (xxx): номер (диапазон от 0 до 7) адресуемого бита
Рис. 3.4. Формат указателя в виде двойного слова для косвенной адресации с указанием области памяти через регистр
Пример
L P#I 8.7 |
Загрузить указатель в формате двойного слова на адрес |
|
бита I 8.7 в аккумулятор 1. |
LAR1 |
Сохранить указатель в формате двойного слова на адрес |
|
бита I 8.7 в AR1. |
L P#Q 8.7 |
Загрузить указатель в формате двойного слова на адрес |
|
бита Q 8.7 в аккумулятор 1. |
LAR2 |
Сохранить указатель в формате двойного слова на адрес |
|
бита Q 8.7 в AR2. |
A [AR1, P#0.0] |
CPU складывает содержимое адресного регистра AR1 (P# I |
|
8.7) и смещение (P#0.0) и использует операнд, на который |
|
указывает результат (I8.7), в качестве операнда битовой |
|
логической операции И. Содержимое AR1 остается |
|
неизменным. |
= [AR2, P#1.1] |
CPU присваивает результат логической операции (RLO) |
|
операнду (Q 10.0). CPU вычисляет этот операнд, складывая |
|
содержимое адресного регистра AR2 (P#A 8.7) и смещение |
|
(P#1.1), указатель при этом деактивируется. Содержимое |
|
AR2 остается неизменным. |
14. ОПЕРАЦИИ С АККУМУЛЯТОРАМИ И КОМАНДЫ, ИСПОЛЬЗУЮЩИЕ АДРЕСНЫЕ РЕГИСТРЫ
В распоряжении программиста имеются следующие команды для манипулирования содержимым одного или обоих аккумуляторов:
70
Мнемоника |
Команда |
Объяснение |
||
TAK |
|
|
Обменять |
Эта команда обменивает содержимое |
|
|
|
содержимое |
аккумулятора 1 с содержимым |
|
|
|
аккумулятора 1 с |
аккумулятора 2. |
|
|
|
содержимым |
|
|
|
|
аккумулятора 2 |
|
PUSH |
с |
двумя |
Копировать |
Эта 1 в аккумулятор 2. |
аккумуляторами |
аккумулятор 1 в |
|
||
|
|
|
аккумулятор 2 |
|
POP |
с |
двумя |
Копировать |
Эта команда копирует содержимое |
аккумуляторами |
аккумулятор 2 в |
аккумулятора команда копирует |
||
|
|
|
аккумулятор 1 |
содержимое аккумулятора 2 в |
|
|
|
|
аккумулятор 1. |
PUSH |
|
с |
Копировать |
Эта команда копирует содержимое |
четырьмя |
|
аккумулятор 3 в |
аккумулятора 3 в аккумулятор 4, |
|
аккумуляторами |
аккумулятор 4, |
содержимое аккумулятора 2 в |
||
|
|
|
аккумулятор 2 в |
аккумулятор 3 и содержимое |
|
|
|
аккумулятор 3, |
аккумулятора 1 в аккумулятор 2. |
|
|
|
аккумулятор 1 в |
|
|
|
|
аккумулятор 2 |
|
POP с четырьмя |
Копировать |
Эта команда копирует содержимое |
||
аккумуляторами |
аккумулятор 2 в |
аккумулятора 2 в аккумулятор 1, |
||
|
|
|
аккумулятор 1, |
содержимое аккумулятора 3 в |
|
|
|
аккумулятор 3 в |
аккумулятор 2 и содержимое |
|
|
|
аккумулятор 2, |
аккумулятора 4 в аккумулятор 3. |
|
|
|
аккумулятор 4 в |
|
|
|
|
аккумулятор 3 |
|
ENT |
|
|
Войти в стек |
Эта команда копирует содержимое |
|
|
|
аккумуляторов |
аккумулятора 3 в аккумулятор 4 и |
|
|
|
|
содержимое аккумулятора 2 в |
|
|
|
|
аккумулятор 3. |
LEAVE |
|
Покинуть стек |
Эта команда копирует содержимое |
|
|
|
|
аккумуляторов |
аккумулятора 3 в аккумулятор 2 и |
|
|
|
|
содержимое аккумулятора 4 в |
|
|
|
|
аккумулятор 3. |
INC |
|
|
Инкрементировать |
Эта команда увеличивает содержимое |
|
|
|
аккумулятор 1 |
младшего байта в младшем слове |
|
|
|
|
аккумулятора 1 на 8-битовую |
|
|
|
|
константу, заданную в операторе |
|
|
|
|
команды. Эта константа может |
|
|
|
|
находиться в диапазоне от 0 до 255. |
DEC |
|
|
Декрементировать |
Эта команда уменьшает содержимое |
71
Мнемоника |
Команда |
|
Объяснение |
|
аккумулятор 1 |
|
младшего байта в младшем слове |
|
|
|
аккумулятора 1 на 8-битовую |
|
|
|
константу, заданную в операторе |
|
|
|
команды. Эта константа может |
|
|
|
находиться в диапазоне от 0 до 255. |
+AR1, +AR2 |
Прибавить |
|
Эта команда прибавляет содержимое |
|
аккумулятор 1 |
к |
младшего слова аккумулятора 1 к |
|
адресному регистру |
адресному регистру 1 или 2. |
|
+AR1 |
Прибавить |
|
Эта команда прибавляет константу к |
P# байт.бит, |
константу |
к |
содержимому адресного регистра 1 или |
+AR2 |
адресному регистру |
2 |
|
P# байт.бит |
|
|
|
BLD |
Команда |
|
Эта команда не выполняет никакой |
|
отображения |
|
функции и не влияет на биты |
|
программы |
|
состояния. Она имеет значение только |
|
|
|
для устройства программирования (PG) |
|
|
|
при отображении программы. Операнд |
|
|
|
<число> является идентификатором |
|
|
|
команды BLD и генерируется |
|
|
|
устройством программирования. |
NOP 0 |
Пустая команда |
0 |
Эти команды не выполняют никаких |
NOP 1 |
Пустая команда 1 |
|
действий и не оказывают влияния на |
|
|
|
содержимое слова состояния. Команды |
|
|
|
NOP 1 и NOP 0 необходимы для |
|
|
|
декомпиляции. Код команды содержит |
|
|
|
битовую комбинацию из 16 нулей или |
|
|
|
16 единиц. |
ПОЯСНЕНИЯ К НЕКОТОРЫМ КОМАНДАМ
Инкрементирование и декрементирование
Вы можете использовать команды Инкрементировать аккумулятор 1 (INC) и
Декрементировать аккумулятор 1 (DEC) для выполнения следующих функций:
•INC увеличивает содержимое младшего байта в младшем слове аккумулятора 1 на 8-битовую константу, заданную в операторе команды. Эта константа может лежать в диапазоне от 0 до 255.
•DEC уменьшает содержимое младшего байта в младшем слове
аккумулятор 1 на 8-битовую константу, заданную в команде. Эта константа может лежать в диапазоне от 0 до 255.
CPU всегда выполняет команды INC и DEC независимо от результата
72
логической операции. Эти команды не влияют на RLO и не изменяют биты в слове состояния.
Замечание Эти команды не годятся для 16-битовых и 32-битовых арифметических
операций, так как не происходит перенос из младшего байта младшего слова аккумулятора 1 в старший байт младшего слова аккумулятора 1. Для 16битовых и 32-битовых арифметических операций используйте соответственно команды +I и +D.
+AR1 и +AR2: прибавление константы к адресному регистру 1 или адресному регистру 2
Команда |
Операнд |
|
Функция |
|
|
|
+AR1 |
− |
Прибавляет содержимое младшего слова |
||||
|
|
аккумулятора |
1 |
к |
содержимому |
|
|
|
адресного регистра 1. |
|
|
|
|
+AR2 |
− |
Прибавляет содержимое младшего слова |
||||
|
|
аккумулятора |
1 |
к |
содержимому |
|
|
|
адресного регистра 2. |
|
|
|
|
+AR1 |
P#байт.бит: (диапазон от |
Прибавляет |
константу |
указателя |
к |
|
|
0.0 до 4095.7) |
содержимому адресного регистра 1. |
|
|||
+AR2 |
P#байт.бит: (диапазон от |
Прибавляет |
константу |
указателя |
к |
|
|
0.0 до 4095.7) |
содержимому адресного регистра 2. |
|
|||
Замечание Адресный регистр 2 используется при обработке мультиэкземпляров. Поэтому
перед программированием команды «+AR2» вы должны «сохранить» содержимое AR2 и загрузить его затем снова.
15. БИТОВЫЕ ЛОГИЧЕСКИЕ ОПЕРАЦИИ
15.1. БУЛЕВА БИТОВАЯ ЛОГИКА Булева битовая логика используется в следующих основных командах:
•И (A) и ее инверсная форма И-НЕ (AN);
•ИЛИ (O) и ее инверсная форма ИЛИ-НЕ (ON);
•Исключающее ИЛИ (X) и ее инверсная форма, Исключающее ИЛИ-НЕ
(XN).
Эти команды выполняют следующие основные функции:
•Они опрашивают состояние сигнала операнда, чтобы выяснить активизирован операнд «1» или нет «0»;
•Они опрашивают состояние сигнала таймера или счетчика, чтобы
73
выяснить, установлен ли он в «0» (значение = 0) или в «1» (значение > 0);
Бит FC определяет результат логической операции (RLO):
•Если FC равен 0, то результат опроса состояния остается неизменным и будет сохранен в RLO (начало логической цепи);
•Если FC равен 1, то результат опроса состояния будет логически скомбинирован с логической командой (A, O, X) в соответствии с таблицей истинности и будет сохранен в RLO.
Таблица истинности внутри булевой логической цепи
Мнемоника |
Команда |
RLO перед |
Состояние |
Результат в |
|
|
командой |
операнда |
RLO |
A |
И |
0 |
0 |
0 |
|
|
0 |
1 |
0 |
|
|
1 |
0 |
0 |
|
|
1 |
1 |
1 |
AN |
И-НЕ |
0 |
0 |
0 |
|
|
0 |
1 |
0 |
|
|
1 |
0 |
1 |
|
|
1 |
1 |
0 |
O |
ИЛИ |
0 |
0 |
0 |
|
|
0 |
1 |
1 |
|
|
1 |
0 |
1 |
|
|
1 |
1 |
1 |
ON |
ИЛИ-НЕ |
0 |
0 |
1 |
|
|
0 |
1 |
0 |
|
|
1 |
0 |
1 |
|
|
1 |
1 |
1 |
X |
Исключающее ИЛИ |
0 |
0 |
0 |
|
|
0 |
1 |
1 |
|
|
1 |
0 |
1 |
|
|
1 |
1 |
0 |
XN |
Исключающее ИЛИ-НЕ |
0 |
0 |
1 |
|
|
0 |
1 |
0 |
|
|
1 |
0 |
0 |
|
|
1 |
1 |
1 |
Операнды основных функций
Операнд команды может быть битом, таймером или счетчиком.
Команда обращается к операнду с помощью одного из следующих видов
74