Непосредственная адресация
Команда L может обращаться к константам в 8, 16 и 32 бита, а также к символам ASCII. Этот вид адресации называется непосредственной адресацией (см. таблицу 8.1).
|
|
|
|
|
Табл. 8.1. |
|
Операнд |
Пример |
|
Пояснение |
|
|
|
± |
L +5 |
Загружает 16-битовую целую константу в |
||||
|
|
аккумулятор 1. |
|
|
|
|
B#(..,..) |
L B#(1,10) |
Загружает константу как 2 байта в |
||||
|
|
аккумулятор 1. (В этом примере 10 |
||||
|
|
поступает в младший байт младшего |
||||
|
|
слова аккумулятора 1; 1 поступает в |
||||
|
|
старший |
байт |
младшего |
|
слова |
|
L B#(1,10,5,4) |
аккумулятора 1) |
|
|
|
|
|
|
Загружает константу как 4 байта в |
||||
|
|
аккумулятор 1. (В этом примере 4 и 5 |
||||
|
|
поступают соответственно в младший и |
||||
|
|
старший |
байт |
младшего |
|
слова |
|
|
аккумулятора 1; 10 и 1 поступают |
||||
|
|
соответственно в младший и старший |
||||
|
|
байт старшего слова аккумулятора) |
|
|||
L#.. |
L #+5 |
Загружает 32–битовую целую константу в |
||||
|
|
аккумулятор 1. |
|
|
|
|
16#.. |
L B#16#EF |
Загружает 8–битовую шестнадцтеричную |
||||
|
|
константу в аккумулятор 1. |
|
|
||
|
L W#16#FAFB |
Загружает |
|
16–битовую |
||
|
L DW#16#1FFE_1ABC |
шестнадцтеричную |
константу |
в |
||
|
аккумулятор 1. |
|
|
|
||
|
|
Загружает |
|
32–битовую |
||
|
|
шестнадцтеричную |
константу |
в |
||
|
|
аккумулятор 1. |
|
|
|
|
2#.. |
L 2#1111_0000_1111_0000 |
Загружает |
16–битовую |
двоичную |
||
|
L 2#1111_0000_1111_ |
константу в аккумулятор 1. |
|
|
||
|
Загружает 32–битовую двоичную |
|
||||
|
0000_1111_0000_1111_0000 |
|
||||
|
|
константу в аккумулятор 1. |
|
|
||
’..’ |
L ’AB’ |
Загружает 2 символа в аккумулятор 1. |
||||
|
L ’ABCD’ |
Загружает 4 символа в аккумулятор 1. |
||||
C#.. |
L C#1000 |
Загружает |
16–битовую |
константу |
||
|
|
счетчика в аккумулятор 1. |
|
|
||
S5TIME#.. |
L S5TIME#2S |
Загружает |
16–битовую |
константу |
||
|
|
S5TIME в аккумулятор 1. |
|
|
||
.. |
L 1.0E+5 |
Загружает 32–битовое число с плавающей |
||||
95
Операнд |
Пример |
|
Пояснение |
|
|
||
|
|
точкой в формате IEEE в аккумулятор 1. |
|
||||
P#.. |
L P#I1.0 |
Загружает 32–битовый указатель в |
|||||
|
L P##Start |
аккумулятор 1. |
|
|
|
|
|
|
Загружает 32–битовый указатель на |
||||||
|
|
локальную |
переменную |
(Start) |
в |
||
|
|
аккумулятор 1 |
|
|
|
|
|
|
L P#ANNA |
Загружает |
указатель |
на |
указанный |
||
|
|
параметр в аккумулятор 1. (Эта команда |
|||||
|
|
загружает |
относительное |
смещение |
|||
|
|
адреса указанного параметра. Для |
|||||
|
|
определения |
абсолютного |
смещения |
в |
||
|
|
экземплярном |
блоке |
данных |
|||
|
|
функционального |
|
блока |
с |
||
|
|
мультиэкземплярами |
к |
этому значению |
|||
|
|
должно быть добавлено |
содержимое |
||||
|
|
регистра AR2). |
|
|
|
|
|
D#.. |
L D#1994–3–15 |
Загружает |
16–битовую |
дату |
в |
||
|
|
аккумулятор 1. |
|
|
|
|
|
T#.. |
L |
Загружает 32–битовое значение времени |
|||||
|
T#0D_1H_1M_0S_0MS |
в аккумулятор 1. |
|
|
|
|
|
TOD#.. |
L TOD#1:10:3.3 |
Загружает 32–битовое значение времени |
|||||
|
|
суток в аккумулятор 1. |
|
|
|
||
Прямая и косвенная адресация
Команды L и T могут обращаться к байту (В), слову (W) или двойному слову
(D)в следующих областях памяти с помощью прямой и косвенной адресации:
•Вход и выход образа процесса (идентификаторы операндов IB, IW, I, QB, QW, QD);
•Внешние входы и выходы (идентификаторы операндов PIB, PIW, PID, PQB, PQW, PQD). Внешние входы могут быть операндами только команд L, внешние выходы могут быть операндами только команд T;
•Битовая память (идентификаторы операндов MB, MW, MD);
•Блок данных (идентификаторы операндов DBB, DBW, DBD, DIB, DIW, DID);
•Локальные данные (временные локальные данные, идентификаторы операндов LB, LW, LD).
18.2.ЧТЕНИЕ СЛОВА СОСТОЯНИЯ ИЛИ ПЕРЕДАЧА
ВСЛОВО СОСТОЯНИЯ
Команду загрузки (L) можно использовать для загрузки битов с 0 по 8 слова
96
состояния (см. рис. 8.1) в аккумулятор 1. Биты с 9 по 31 аккумулятора 1 сбрасываются в 0. Формат команды в этом случае имеет вид:
L STW
15 |
|
… |
9 8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|||
|
|
|
|
|
BR |
CC1 |
CC0 |
OV |
OS |
OR |
STA |
RLD |
|
FC |
|
Рис. 8.1. Структура слова состояния
Команда T STW передает содержимое аккумулятора 1 в слово состояния.
18.3. ЗАГРУЗКА ЗНАЧЕНИЙ ВРЕМЕНИ И СЧЕТЧИКОВ
Используя команды загрузки L Tn и L Cm, где n и m номер таймера или счетчика, можно считать двоичное значение времени (счета) и загрузить его в младшее слово аккумулятора 1. Этот вид загрузки называют прямой загрузкой. Основной особенность этой команды является то, что при считывании значения таймера, вы получаете только число в диапазоне 0…999. Значение базы таймера при этом не загружается.
Команды LС Tn и LС Cm, где n и m номер таймера или счетчика, позволяют загрузить в младшее слово аккумулятора 1 значение времени (счета) в ВСD коде.
18.4. ЗАГРУЗКА И ПЕРЕДАЧА МЕЖДУ АДРЕСНЫМИ РЕГИСТРАМИ
Можно использовать следующие команды, чтобы дать CPU возможность обмена информацией между адресными регистрами или обмена содержимым этих двух регистров:
Команда |
Объяснение |
LAR1 |
Загружает адресный регистр 1 содержимым области, к которой |
|
обращается команда. Если операнд не указан, то LAR1 загружает |
|
адресный регистр 1 содержимым аккумулятора 1. LAR1 может |
|
использовать в качестве операнда также AR2, т.е. LAR1 может |
|
загрузить AR1 содержимым AR2. |
LAR2 |
Загружает адресный регистр 2 содержимым области, к которой |
|
обращается команда. Если операнд не указан, то LAR2 загружает |
|
адресный регистр 2 содержимым аккумулятора 1. |
TAR1 |
Передает содержимое адресного регистра 1 в приемник, к которому |
|
обращается команда. Если операнд не указан, то TAR1 передает |
|
содержимое адресного регистра 1 в аккумулятор 1. TAR1 может |
|
использовать в качестве операнда также AR2, т.е. TAR1 может |
|
передать содержимое AR1 в AR2. |
TAR2 |
Передает содержимое адресного регистра 2 в приемник, к которому |
97
Команда |
Объяснение |
|
обращается команда. Если операнд не указан, то TAR2 передает |
|
содержимое адресного регистра 2 в аккумулятор 1. |
TAR |
Обменивает между собой содержимое AR1 и AR2. |
Команды LAR1 и LAR2 могут обращаться к 32-битовым константам. Этот вид адресации называют непосредственной адресацией.
Непосредственный адрес применяется для загрузки 32-битового указателя непосредственно в адресный регистр.
LAR1 P#{область,} байт{.бит}
где {область} = {I, Q, M, D, DX, L}
байт = от 0 до 65 535 {.бит} = 0 до 7
С командами LAR1, LAR2, TAR1 и TAR2 можно использовать прямую адресацию:
Команда |
Регистр или операнд |
Идентификатор операнда и диапазон |
|
LAR 1 |
(пусто) или AR2 |
DBD |
от 0 до 65 532 |
|
|
DID |
|
|
|
MD |
|
|
|
LD |
|
LAR 2 |
(пусто) |
|
|
TAR 1 |
(пусто) или AR2 |
DBD |
от 0 до 65 532 |
|
|
DID |
|
|
|
MD |
|
|
|
LD |
|
TAR 2 |
(пусто) |
|
|
Если операнд не указан (пусто), то LAR1/LAR2 загружает адресный регистр содержимым аккумулятора 1, а TAR1/TAR2 передает содержимое адресного регистра в аккумулятор 1.
18.5. ЗАГРУЗКА ИНФОРМАЦИИ О БЛОКЕ ДАННЫХ
Команда загрузки (L) может быть использована для загрузки длины или номера блока данных в аккумулятор 1.
Операнд |
Объяснение |
DBLG |
Загружает длину (в байтах) глобального блока данных в |
|
аккумулятор 1 |
DILG |
Загружает длину (в байтах) экземплярного блока данных в |
|
аккумулятор 1 |
DBNO |
Загружает номер глобального блока данных аккумулятор 1 |
DINO |
Загружает номер экземплярного блока данных в аккумулятор 1 |
98
19.АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ С ЦЕЛЫМИ ЧИСЛАМИ
19.1.ОСНОВНЫЕ АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ
Втабл. 9−1 перечислены команды AWL, с помощью которых можно складывать, вычитать, умножать и делить целые числа (16 битов) и двойные целые числа (32 бита).
|
|
Табл. 9.1. |
Команда |
Размер в |
Функция |
|
битах |
|
+I |
16 |
Складывает содержимое младших слов аккумуляторов 1 и |
|
|
2 и сохраняет результат в младшем слове аккумулятора 1. |
-I |
16 |
Вычитает содержимое младшего слова аккумулятора 1 из |
|
|
содержимого младшего слова аккумулятора 2 и сохраняет |
|
|
результат в младшем слове аккумулятора 1. |
*I |
16 |
Перемножает содержимое младших слов аккумуляторов 1 |
|
|
и 2 и сохраняет результат (32 бита) в аккумуляторе 1. |
/I |
16 |
Делит содержимое младшего слова аккумулятора 2 на |
|
|
содержимое младшего слова аккумулятора 1. Результат |
|
|
сохраняется в младшем слове аккумулятора 1. Целый |
|
|
остаток от деления сохраняется в старшем слове |
|
|
аккумулятора 1. |
+D |
32 |
Складывает содержимое аккумуляторов 1 и 2 и сохраняет |
|
|
результат в аккумуляторе 1. |
-D |
32 |
Вычитает аккумулятора 1 из содержимого аккумулятора 2 |
|
|
и сохраняет результат в аккумуляторе 1. |
*D |
32 |
Перемножает содержимое аккумуляторов 1 и 2 и |
|
|
сохраняет результат в аккумуляторе 1. |
/D |
32 |
и сохраняет частное в аккумуляторе 1. |
MOD |
32 |
Делит содержимое аккумулятора 2 на содержимое |
|
|
аккумулятора 1 и сохраняет остаток от деления как |
|
|
результат в аккумуляторе 1. |
Связь между арифметическими операциями и аккумуляторами
Арифметические операции комбинируют содержимое аккумуляторов 1 и 2. Результат сохраняется в аккумуляторе 1. Старое содержимое аккумулятора 1 сдвигается в аккумулятор 2.
В CPU с четырьмя аккумуляторами затем содержимое аккумулятора 3 копируется в аккумулятор 2, а содержимое аккумулятора 4 в аккумулятор 3. Старое содержимое аккумулятора 4 не меняется.
Например, в контроллере с двумя аккумуляторами, команда сложения
99