Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2277

.pdf
Скачиваний:
1
Добавлен:
15.11.2022
Размер:
1.35 Mб
Скачать

12. КОСВЕННАЯ АДРЕСАЦИЯ ОПЕРАНДОВ

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

В языке программирования STEP 5 для этих целей применяется оператор подстановки В, имеющий следующий формат:

Формат

 

Область значений

Область применения

оператора

 

операндов

 

B DW

0

255

Слова (16 бит) открытого блока данных

B MW

0

254

Слова (16 бит) области памяти маркеров

Операторы подстановки В используются в основном при программировании функциональных блоков и могут еще быть использованы для косвенного вызова программного блока.

В STEP 5 оператор В состоит из двух предложений. Первое содержит сам оператор В и адрес слова блока данных или слова памяти маркеров, второе – операцию и идентификатор операнда, который будет модифицироваться.

Примечание: операнд второго оператора должен всегда быть ―0‖ или

―0.0‖.

Пример:

B DW 17

20

DW 17

L EW 0

 

 

 

 

L EW 20

В данном примере значение слова данных DW 17 используется для подстановки в оператор загрузки и может быть изменено операторами инкремента или декремента для последующего применения с новым значением.

Необходимо помнить о том, что при выполнении оператора B DW используются значения текущего открытого блока данных. Оба оператора не изменяют значения флага VKE.

12.1. Косвенная адресация битовых операндов

Параметры слова блока данных или слова памяти маркеров, используемые для подстановки в этом случае имеют следующий формат:

40

Старший байт

Младший байт

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Не используются

Адрес бита

Адрес байта (0 127)

 

 

(0

7)

 

 

 

 

 

 

Операция

Операнды

 

 

Описание

U

E, A, M, T, Z

Операция ―И‖, сканирование ―1‖

UN

E, A, M, T, Z

Операция ―И‖, сканирование ―0‖

O

E, A, M, T, Z

Операция ―ИЛИ‖, сканирование ―1‖

ON

E, A, M, T, Z

Операция ―ИЛИ‖, сканирование ―0‖

S

E, A, M, Z

Установка в ―1‖

R

E, A, M, Z

Сброс (установка ―0‖)

=

E, A, M, Z

Присвоение значения логического результата

SI

T

Запуск таймера как короткого импульса

SE

T

Запуск таймера с задержкой включения

SV

T

Запуск таймера как удлиненного импульса

SS

T

Запуск с задержкой включения и запоминанием

SA

T

Запуск с задержкой отключения

FR

T, Z

Запрет таймера и счетчика

ZV

Z

Запуск счетчика на инкремент

ZR

Z

Запуск счетчика на декремент

Младший байт слова, используемого с оператором В, содержит адрес байта (с выравниванием вправо), а старший – адрес бита также с выравниванием вправо. Пример:

 

 

Старший байт

Младший байт

 

 

 

 

 

 

 

 

B

DW 27

 

4

0

36

DW 27

U

E 0.0

 

 

 

 

 

U E 36.4

Исполняемый оператор

41

При использовании оператора подстановки для модификации команд управления таймером или счетчиком используется только младший байт слова, который содержит номер таймера (счетчика).

Пример:

 

Старший байт

Младший байт

 

 

 

 

 

B DW 17

4

12

DW 17

SA T 0

 

 

 

SA T 12

Исполняемый оператор

Оператор подстановки В не может быть использован для косвенной адресации отдельных бит операндов из области блоков данных D.

12.2. Косвенная адресация прочих операндов

Список операторов, с которыми может использоваться оператор подстановки В, приведен ниже. Формат слова, используемого в этих операторах, аналогичен формату, используемому для операций с таймерами и счетчиками.

Оператор

Операнд

Описание

L, T

EB байт входов

Загрузка в аккумулятор и пересылка

 

EW слово входов

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

 

ED двойное слово входов

 

 

AB байт выходов

 

 

AW слово выходов

 

 

AD двойное слово выходов

 

 

MB байт маркеров

 

 

MW слово маркеров

 

 

MD двойное слово маркеров

 

 

DR правый (младший) байт

 

 

DL левый (старший) байт

 

 

DW слово блока данных

 

 

DD двойное слово данных

 

L, LC

T, Z таймеры и счетчики

Загрузка и кодированная загрузка

D

Младший байт

Декремент

I

Младший байт

Инкремент

42

Пример. Требуется организовать циклическую передачу девяти значений данных, расположенных в словах DW1 DW9, через байт выходов АВ0.

 

AWL

Пояснения

A DB 1

Открытие текущий блока данных – DB1

L DW 0

Загрузка индексного слова в аккумулятор

I

1

Инкремент аккумулятора

T DW 0

Сохранение нового значения индексного слова

L KF +10

Значение индекса не превышает максимальное ?

><F

 

SPB =BEG

Если нет, то передача данных

L KF +1

Если превышает, то загрузить значение ―1‖ в индекс-

T DW 0

ное слово

BEG :

B DW 0

Загрузка очередного байта данных оператором под-

L DW 0

становки

T AB 0

Передача данных на выход

BE

 

 

 

 

12.3. Косвенная адресация в организационных операторах

Ниже приведены организационные операторы, которые могут быть выполнены с оператором подстановки В. Параметр для выполнения этой операции берется из младшего байта слова данных или слова маркеров. Старший байт при этом не используется.

Пример:

 

 

 

Старший байт

 

Младший байт

 

 

 

 

 

 

 

 

 

B DW 77

 

4

 

6

DW 77

PAR0: SРA =PAR0

 

 

 

 

 

 

 

SPA

+6

 

 

 

 

 

 

 

 

 

 

 

Оператор

 

 

Описание

 

 

1

 

 

 

2

 

 

 

SPA PB

Безусловный вызов программного блока

 

 

SPB PB

Условный вызов программного блока: выполняется, если ре-

 

 

зультат логической операции равен ―1‖. Если он ―0‖, то вызов

 

 

не выполняется, а результат устанавливается в ―1‖

 

 

SPA FB

Безусловный вызов функционального блока

 

 

 

 

 

 

 

 

 

1

 

 

 

2

 

 

 

 

 

 

43

 

 

 

SPB FB Условный вызов функционального блока: выполняется, если результат логической операции равен ―1‖. Если он ―0‖, то вызов не выполняется, а результат устанавливается в ―1‖

A DB Вызов блока данных

SPA Безусловный переход

SPB Условный переход: выполняется, если результат логической операции равен ―1‖. Если он ―0‖, то вызов не выполняется, а результат устанавливается в ―1‖

SPZ Переход, если равно нулю SPN Переход, если не равно нулю SPP Переход, если ―+‖

SPM Переход, если ―-‖

SPO Переход, если переполнение: переполнение возникает при превышении заданного объема памяти в результате выполнения арифметической операции

SRW Сдвиг слова вправо

SLW Сдвиг слова влево

SLD Сдвиг двойного слова влево

RRD Циклический сдвиг двойного слова вправо

RLD Циклический сдвиг двойного слова влево

Операции сдвига выполняются без каких-либо условий. Сдвинутый в последнюю очередь бит может контролироваться с помощью операторов перехода. При условии, что этот бит равен ―0‖, переход может быть выполнен оператором SPZ, а если он равен ―1‖ – то операторами SPB и SPN. Параметризованной частью этих операторов указывается, на сколько разрядов содержимое накопителя перераспределяется или поворачивается

Пример: в качестве примера приведем блок РВ1, состоящий из восьми программных блоков с номерами 0 7. Номер выполняемого в данном цикле блока получается из входного байта ЕВ0.

L EB 0

; чтение номера программного блока, который необ-

 

ходимо выполнить

L KB 7

; загрузка константы

UW

; в аккумуляторе оставлены биты 0 2

SPZ =PRG0

; переход на выполнение программного блока ―0‖

 

(ПБ0)

T MW 200

; относительная метка перехода передана в MW 200

B MW 200

; составной оператор косвенного перехода

ZERO: SPA =ZERO

; (оператор подстановки)

SPA =PRG1

 

SPA =PRG2

 

SPA =PRG3

 

 

44

SPA =PRG4

; метки переходов к выбранным блокам

SPA =PRG5

 

SPA =PRG6

 

PRG7:

; начало программного блока 7 (ПБ7)

:

 

BEB

; условное окончание программного блока 7

PRG0:

; начало программного блока 0 (ПБ0)

:

 

BEB

; условное окончание программного блока 0

PRG1:

; начало программного блока 1 (ПБ1)

:

 

BEB

; условное окончание программного блока 1

PRG2:

; начало программного блока 2 (ПБ2)

:

 

BEB

; условное окончание программного блока 2

PRG3:

; начало программного блока 3 (ПБ3)

:

 

BEB

; условное окончание программного блока 3

PRG4:

; начало программного блока 4 (ПБ4)

:

 

BEB

; условное окончание программного блока 4

PRG5:

; начало программного блока 5 (ПБ5)

:

 

BEB

; условное окончание программного блока 5

PRG6:

; начало программного блока 6 (ПБ6)

:

BE ; окончание программного блока 6 и всей программы Поясним некоторые особенности организации программы:

программные блоки ПБ0 … ПБ5 и блок ПБ7 заканчиваются оператором условного окончания блока ВЕВ. Этот оператор выполняется, если значение бита VKE в момент его выполнения равно ―1‖. Если это условие не будет выполнено, то будет выполнен следующий программный блок (например, после ПБ3 будет выполнен ПБ4) и т.д.;

если из программы убрать оператор проверки полученного номера на значение ―0‖ (оператор SPZ =PRG0), то при полученных номерах 0 и 1 будет выполняться программный блок 1;

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

45

13.КОМАНДЫ С ФОРМАЛЬНЫМИ ОПЕРАНДАМИ

13.1.Операции переходов

Команда

Операнд

Описание

SPA=

Метка (не бо-

Переход безусловный

 

лее 4 симв.)

 

SPB=

Метка (не бо-

Переход условный.

 

лее 4 симв.)

Условный переход совершается, если результат

 

 

логической операции = ―1‖.

 

 

Если результат = ―0‖, то команда не выполняется, а резуль-

 

 

тат логической операции устанавливается в ―1‖

SPZ=

Метка (не бо-

Переход по равенству 0.

 

лее 4 симв.)

Переход выполняется, если ANZ1 = 0 и ANZ0 = 0.

 

 

VKE не изменяется

SPN=

Метка (не бо-

Переход по неравенству ―0‖.

 

лее 4 симв.)

Переход выполняется, если ANZ1 <> ANZ0 = 0.

 

 

VKE не изменяется

SPP=

Метка (не бо-

Переход по положительному результату.

 

лее 4 симв.)

Переход выполняется, если ANZ1 = 1 и ANZ0 = 0.

 

 

VKE не изменяется

SPM=

Метка (не бо-

Переход по отрицательному результату.

 

лее 4 симв.)

Переход выполняется, если ANZ1 = 0 и ANZ0 = 1.

 

 

VKE не изменяется

SPO=

Метка (не бо-

Переход по переполнению (Overflow).

 

лее 4 симв.)

Переход выполняется в случае переполнения.

 

 

VKE не изменяется

При использовании операций переходов все время надо указывать метку, к которой осуществляется переход, состоящую максимально из 4 знаков, при этом первый знак обязательно должен быть буквой.

Поле метки отделяется от поля оператора символом ―:‖. При программировании следует помнить следующее:

дистанция перехода не может превышать +127 или –128 слов в памяти программы. При необходимости более дальнего перехода следует вводить промежуточные метки;

переходы производятся только в пределах одного блока; нельзя переходить границы сегмента (BLD 255).

Пример. Если слово входов EW 1 равно ―0‖, то выполняется переход к метке AN1. Если входное слово EW 1 и выходное слово AW 3 не идентичны, то происходит переход к метке AN0. В случае идентичности слов EW 1 и AW 3 EW 1 сравнивается со словом данных DW 12. Если EW 1 > или < DW 12, то происходит переход к метке ZIEL.

46

AWL

Описание

AN0: L

EW1

Входное слово загружено в AKKU1

L

KF 00

Т.к. инструкция ―L . . .― не влияет на флаги условий, то для

+F

 

того, чтобы выполнить операцию перехода необходимо

SPZ=AN1

выполнить сложение с константой равной ―0‖

U

E1.0

После этого, если содержимое AKKU1 = 0, происходит

:

 

переход к метке AN1

AN1: L

EW 1

Сравнение слов EW 1 и AW 3. В случае неравенства уста-

L

AW3

навливаются отдельные биты. Если содержимое AKKU1

XOW

 

не равно ―0‖, то переход на метку AN0

SPN=AN0

 

L

EW1

Входное слово EW 1 сравнивается со словом данных по

L

DW12

функции ―не равно‖

><F

 

В случае неравенства VKE устанавливается в ―1‖ и проис-

SPB=ZIEL

ходит переход на метку ZIEL

:

 

Если VKE = 0, то следует обработка следующей инструк-

:

 

ции

ZIEL: U

E12.2

 

:

 

 

13.2. Операции замещения

Если необходимо обработать программу без больших изменений, но с различными операндами, то целесообразно отдельные операнды параметрировать. Если надо изменить параметры, то необходимо задать только различные параметры при вызове функционального блока. В программе эти параметры обрабатываются как формальные операнды. Для обработки формальных операндов необходимы специальные операторы, которые специфичны, однако в принципе не отличаются от тех, что рассмотрены ранее.

13.2.1. Двоичные логические операции

Команда

Операнд

Описание

U =

Формальный

Функция ―И‖.

 

операнд

Опрос формального операнда на состояние ―1‖

UN =

Формальный

Функция ―И‖.

 

операнд

Опрос формального операнда на состояние ―0‖

O =

Формальный

Функция ―ИЛИ‖.

 

операнд

Опрос формального операнда на состояние ―1‖

ON =

Формальный

Функция ―И‖.

 

операнд

Опрос формального операнда на состояние ―0‖

 

 

47

Формальный

Допустимый актуальный

 

Параметр

операнд

операнд

Вид

 

Тип

 

Двоично-адресованные вхо-

 

 

 

 

ды, выходы и маркеры, тай-

E, A, M

 

BI

 

меры и счетчики

T, Z

 

 

13.2.2. Операции запоминания

Команда

 

 

 

Операнд

 

 

 

Описание

 

 

S =

 

 

Формальный

 

Установка (двоичная) формального операнда

 

 

 

операнд

 

 

 

 

 

 

 

RB =

 

 

Формальный

 

Сброс (двоичный) формального операнда

 

 

 

операнд

 

 

 

 

 

 

 

= =

 

 

Формальный

 

Назначение результата формальному операнду.

 

 

 

операнд

 

VKE устанавливается формальным операндом

 

 

 

 

 

 

 

 

Формальный

 

Допустимый актуальный

 

Параметр

 

операнд

 

 

 

 

 

операнд

 

 

Вид

 

Тип

 

 

 

 

Двоично-адресованные вхо-

E, A, M

BI

 

 

 

 

 

ды, выходы и маркеры

 

 

 

 

Пример.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вызов функционального

 

Программа в функцио-

Исполняемая программа

блока в ОВ1

 

 

нальном блоке

 

 

 

 

 

 

 

 

 

 

 

U

=EIN1

 

U

E

2.0

SPA

FB

30

 

 

UN

=EIN2

 

UN

E

2.1

NAME:

VERK

 

 

O

=EIN3

 

O

E

2.2

EIN1: E

2.0

 

 

 

 

S

=MOT5

 

S

A

7.3

EIN2: E

2.1

 

 

 

=

=AUS1

 

=

A

7.1

EIN3: E

2.2

 

 

 

 

U

=VEN1

 

U

E

2.3

VEN1:

E

2.3

 

 

U

=EIN2

 

U

E

2.1

AUS1:

A

7.1

 

 

ON

=EIN3

 

ON

E

2.2

AUS2:

A

7.2

 

 

RB

=MOT5

 

R

A

7.3

MOT5:

A

7.3

 

=

=AUS2

 

=

A

7.2

BE

 

 

 

 

 

 

BE

 

 

BE

 

 

48

13.2.3. Операции загрузки и пересылки

 

Команда

 

 

 

Операнд

 

 

 

 

 

Описание

 

 

 

L =

 

 

Формальный

 

Загрузка формального операнда

 

 

 

 

операнд

 

 

 

 

 

 

 

 

 

 

LC =

 

 

Формальный

 

Загрузка кодированного формального операнда

 

 

 

 

операнд

 

 

 

 

 

 

 

 

 

 

LW =

 

 

Формальный

 

Загрузка формального операнда как набор битов

 

 

 

 

операнд

 

 

 

 

 

 

 

 

 

 

T =

 

 

Формальный

 

Передача в формальный операнд

 

 

 

 

операнд

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Формальный

 

Допустимый актуальный

 

 

Параметр

 

операнд

 

 

 

 

 

 

операнд

 

 

 

Вид

Тип

 

Для L =

 

 

 

Двоично-адресованные вхо-

E, A, M

BY, W

 

 

 

 

 

ды, выходы и маркеры, тай-

 

 

 

 

 

 

 

 

 

 

меры и счетчики

 

T, Z

 

 

 

Для LC =

 

 

 

Таймеры и счетчики

T, Z

 

 

 

Для LW =

 

 

 

Набор битов

 

D

 

 

KF, KH, KM,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

KY, KC, KT, KZ

 

Для T =

 

 

 

Двоично-адресованные вхо-

E, A, M

BY, W

 

 

 

 

 

ды, выходы и маркеры

 

 

 

 

 

 

Пример: в РВ1 параметрируется FB 34.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вызов функционального

 

Программа в функцио-

 

Исполняемая программа

 

 

блока в ОВ1

 

нальном блоке (FB 34)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

U

=E0

 

 

U

Е 20

 

 

 

SPA FB 34

 

 

 

L

=L1

 

 

L

МW10

 

 

NAME:

LADE/TRAN

 

 

 

S

Z6

 

 

S

Z 6

 

 

ЕО:

Е 2.0

 

 

 

U

=E1

 

 

U

Е 2. 1

 

 

Е1:

Е 2. 1

 

 

 

LW

=LW1

 

 

L

К2 140

 

 

L1:

HW10

 

 

 

S

Z7

 

 

S

Z 7

 

 

LW1:

KZ 140

 

 

 

U

E2. 2

 

 

U

Е 2. 2

 

 

LC1:

Z 7

 

 

 

ZV

Z6

 

 

ZV

Z 6

 

 

Т1:

AV4

 

 

 

ZV

Z7

 

 

ZV

Z 7

 

 

LV2:

KZ 169

 

 

 

LC

=LC1

 

 

LC

Z 7

 

 

 

BE

 

 

 

T

=Т1

 

 

T

AV 4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

U

Е 2. 7

 

 

U

Е 2.7

 

 

 

 

 

 

 

 

 

 

 

49

 

 

 

 

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]