Команды переходов

Команды переходов осуществляют условную или безусловную передачу управления в точку программы, находящуюся в этом же сегменте блока.

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

1) SPA - безусловный переход на строку.

Формат команды: SPA =SM.

Безусловный переход на строку, помеченную символьной меткой SM. Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

Формат индексной команды:

В DWx(MWx)

+SPA =SM

где x - номер слова данных или метки, содержащего индекс; SM - символьная метка. Команда изменяет флаги ZF, CF, SF, PF, OF.

ПРИМЕР:

В DWx(MWx)

+SPA =ММ

....................

MM: SPA =М0;точка перехода при DWx(MWx)=0

SPA =М1;точка перехода при DWx(MWx)=1

SPA =М2;точка перехода при DWx(MWx)=2

....................

SPA =Mn;точка перехода при DWx(MWx)=n

Если индекс DWx (MWx) = 0, индексная команда выполняет переход на команду SPA =М0. Если индекс DWx (MWx) = 1, выполняется переход на команду SPA =М1 и т.д. Между индексируемыми командами SPA =SM не должно быть других команд, даже пустых строк и строк комментариев.

2) SPB - переход на строку по логическому аккумулятору.

Формат команды: SPB =SM.

Переход на строку, помеченную символьной меткой SM, если логический аккумулятор LA=1. Команда сбрасывает флаги CF и OF в 0, изменяет флаги ZF, SF, PF. Команда “заканчивает опрос”.

ПРИМЕР:

U E 3.5; Занесение в LA значения логического входа Е 3.5

SPB =END; Если Е 3.5 = 1, то перейти на метку с названием END

…: Если Е 3.5 = 0, то программа выполняется дальше без перехода

END:; На эту строчку произойдет переход при выполнении условия Е 3.5 = 1

=1 A 8.1; Продолжается выполнение программы

BE; Перейти в начало программы.

3) SPP - переход на строку по “больше”.

Формат команды: SPP =SM.

Переход на строку, помеченную символьной меткой SM, если CF=0 и ZF=0 (если беззнаковый RW2 (RG2, RB2) > RW1 (RG1, RB1)). Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

4) SPM - переход на строку по “меньше”.

Формат команды: SPM =SM.

Переход на строку, помеченную символьной меткой SM, если CF=1 (если беззнаковый RW2 (RG2, RB2) < RW1 (RG1, RB1)). Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

5) SPPZ - переход на строку по “больше или равно”.

Формат команды: SPPZ =SM.

Переход на строку, помеченную символьной меткой SM, если CF=0 (если беззнаковый RW2 (RG2, RB2) >= RW1 (RG1, RB1)). Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

6) SPMZ - переход на строку по “меньше или равно”.

Формат команды: SPMZ =SM.

Переход на строку, помеченную символьной меткой SM, если CF=1 или ZF=1 (если беззнаковый RW2 (RG2, RB2) <= RW1 (RG1, RB1)). Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

7) SPZ - переход на строку по “равно”.

Формат команды: SPZ =SM.

Переход на строку, помеченную символьной меткой SM, если ZF=1 (если беззнаковый или знаковый RW2 (RG2, RB2) = RW1 (RG1, RB1)). Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

8) SPN - переход на строку по “не равно”.

Формат команды: SPN =SM.

Переход на строку, помеченную символьной меткой SM, если ZF=0 (если беззнаковый или знаковый RW2 (RG2, RB2) >< RW1 (RG1, RB1)). Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

9) SPG - переход на строку по “больше с переполнением”.

Формат команды: SPG =SM.

Переход на строку, помеченную символьной меткой SM, если ZF=0 и SF=OF (если знаковый RW2 (RG2, RB2) > RW1 (RG1, RB1)). Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

10) SPL - переход на строку по “меньше с переполнением”.

Формат команды: SPL =SM.

Переход на строку, помеченную символьной меткой SM, если SF >< OF (если знаковый RW2 (RG2, RB2) < RW1 (RG1, RB1)). Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

11) SPGZ - переход на строку по “больше или равно с переполнением”.

Формат команды: SPGZ =SM.

Переход на строку, помеченную символьной меткой SM, если SF=OF (если знаковый RW2 (RG2, RB2) >= RW1 (RG1, RB1)). Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

12) SPLZ - переход на строку по “меньше или равно с переполнением”.

Формат команды: SPLZ =SM.

Переход на строку, помеченную символьной меткой SM, если ZF=1 или SF >< OF (если знаковый RW2 (RG2, RB2) <= RW1 (RG1, RB1)). Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

13) SPO - переход на строку по “флагу переполнения”.

Формат команды: SPO =SM.

Переход на строку, помеченную меткой SM, если OF=1. Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

14) SPS - переход на строку по “флагу знака”.

Формат команды: SPS =SM.

Переход на строку, помеченную меткой SM, если SF=1. Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

15) SPE - переход на строку по “флагу четности”.

Формат команды: SPE =SM.

Переход на строку, помеченную меткой SM, если PF=1. Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

Команды SPP, SPM, SPPZ, SPMZ, SPZ, SPN могут использоваться для разветвления программы по результату сравнения беззнаковых операндов в аккумуляторах RW2 (RB2) и RW1 (RB1) или по результату сравнения аккумуляторов RG2 и RG1. Команды SPG, SPL, SPGZ, SPLZ, SPZ, SPN могут использоваться для разветвления программы по результату сравнения знаковых операндов в аккумуляторах RW2 (RB2) и RW1 (RB1) или RG2 и RG1. Для этого соответствующая команда перехода ставится после любой команды сравнения (см. п. 4.9).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: