Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания к учебной практике.docx
Скачиваний:
13
Добавлен:
28.09.2019
Размер:
2.44 Mб
Скачать
    1. Команды передачи управления

Группа представлена командами безусловного и условного переходов, командами вызова подпрограмм и командами возврата из подпрограмм (табл.23).

Таблица 8.

Название команды

Мнемокод

КОП

Т

Б

Ц

Операция

Длинный переход в

полном объеме ПП

LJMP ad16

02

12

3

2

(PC)  ad16

Абсолютный переход

внутри страницы в 2 Кб

AJMP ad11

A10a9a8

00001

6

2

2

(PC)  (PC) + 2, (PC0-10)  ad11

Короткий относительный переход внутри страницы

в 256 байт

SJMP rel

80

5

2

2

(PC)  (PC) + 2, (PC)  (PC) +rel

Косвенный относительный переход

JMP @A+DPTR

73

1

1

2

(PC)  (A) + (DPTR)

Переход, если аккумулятор равен нулю

JZ rel

60

5

2

2

(PC)(PC)+2, если (A)=0, то (PC)(PC)+rel

Переход, если аккумулятор

не равен нулю

JNZ rel

70

5

2

2

(PC)(PC)+2, если (A)≠0, то (PC)(PC)+rel

Переход, если перенос

равен единице

JC rel

40

5

2

2

(PC)(PC)+2, если (С)=1, то (PC)(PC)+rel

Переход, если перенос

равен нулю

JNC rel

50

5

2

2

(PC)(PC)+2, если (С)=0,

то (PC)(PC)+rel

Переход, если бит равен единице

JB bit, rel

20

11

3

2

(PC)(PC)+3, если (b)=l,

то (PC)(PC)+rel

Переход, если бит равен

Нулю

JNB bit, rel

30

11

3

2

(PC)(PC)+3, если (b)=0,

то (PC)(PC)+rel

Переход, если бит установлен, с последующим

сбросом бита

JBC bit, rel

10

11

3

2

(PC)  (PC) + 3, если (b)=1,

то (b)  0 и

(PC) (PC) + rel

Декремент регистра и

переход, если не нуль

DJNZ Rn, rel

D8 – DF

5

2

2

(PC)  (PC) + 2, (Rn)  (Rn) - 1, если (Rn) ≠ 0, то (PC)  (PC) + rel

Декремент прямо-адресуемого байта

и переход, если не нуль

DJNZ ad, rel

D5

8

3

2

(PC)  (PC) + 2, (ad)  (ad)

- 1, если (ad) ≠ 0, то

(PC)  (PC) + rel

Сравнение аккумулятора с прямоадресуемым байтом

и переход, если не равно

CJNE A, ad, rel

B5

8

3

2

(PC)  (PC) + 3,если (A) ≠ (ad), то (PC)  (PC) + rel,

если (A) < (ad), то

(C)  1, иначе (C)  0

Сравнение аккумулятора с

константой и переход,

если не равно

CJNE A, #d, rel

B4

10

3

2

(PC)  (PC) + 3,если (A) ≠

#d, то (PC)  (PC) + rel,

если (A) < #d, то

(C)  1, иначе (С)  0

Сравнение регистра с

константой и переход,

если не равно

CJNE Rn, #d, rel

B8 – BF

10

3

2

(PC)  (PC) + 3,если (Rn) ≠ #d, то (PC)  (PC) + rel,

если (Rn) < #d, то

(C)  1, иначе (С)  0

Сравнение байта в РПД с

константой и переход,

если не равно

CJNE @Ri,#d,rel

B6 – B7

10

3

2

(PC)  (PC) + 3,если ((Ri))

≠ #d, то (PC)  (PC) + rel,

если ((Ri)) < #d, то (C)  1,

иначе (C)  0

Длинный вызов

подпрограммы

LCALL adl6

12

12

3

2

(PC)  (PC) + 3, (SP)  (SP) +1, ((SP))  (PC0…7), (SP)  (SP) + 1, ((SP))  (PC8…15), (PC)  ad16

Абсолютный вызов

подпрограммы в пределах

страницы в 2 Кб

ACALL ad11

A10a9a8

10001

6

2

2

(PC)  (PC) + 2, (SP)  (SP) + 1, ((SP))  (PC0…7), (SP)  (SP) + 1, ((SP))  (PC8…15), (PC0-10)  ad11

Возврат из подпрограммы

RET

22

1

1

2

(PC8…15)  ((SP)), (SP)  (SP) - 1, (PC0…7)  ((SP)), (SP)  (SP) – 1

Возврат из подпрограммы

обработки прерывания

RETI

32

1

1

2

(PC8…15)  ((SP)), (SP)  (SP) - 1, (PC0…7)  ((SP)), (SP)  (SP) – 1

Пустая операция

NOP

0

1

1

1

(PC)  (PC) + 1

Команды безусловного перехода:

LJMP ad16 (Long Jump - длинный переход) – длинный абсолютный переход по всему адресному пространству ПП. В трехбайтовой команде содержится полный 16-битный адрес перехода (ad16), позволяющий обращаться к любой ячейке памяти в пределах 64К. На практике редко возникает необходимость перехода в пределах всего адресного пространства и чаще используются укороченные команды перехода, занимающие меньше места в памяти.

AJMP ad11 (Absolute Jumpабсолютный переход) – абсолютный переход в пределах одной страницы памяти программ размером 2048 байт. Такие команды содержат только 11 младших бит адреса перехода (ad11). Команды абсолютного перехода имеют формат 2 байта, при этом второй байт команды содержит 8 младших разрядов адреса (А7-А0), которые адресуют 256 байт памяти, а 3 старших разряда (А10-А8) находятся в первом байте вместе с кодом операции. Для изменения адреса перехода необходимо выбирать команду с другим кодом операции. Всего имеется 8 команд типа AJMP. При выполнении команды в вычисленном адресе следующей по порядку команды ((РС)= (PC) + 2) 11 младших бит заменяются на ad11 из тела команды абсолютного перехода.

SJMP rel (Short Jump – короткий переход) - относительный переход позволяет передать управление в пределах -128 ÷ +127 байт относительно адреса следующей команды (команды, следующей по порядку за командой относительного перехода). Формирование адреса относительного перехода (rel) осуществляется путем сложения базового адреса с адресом в поле операнда команды. В качестве базового адреса используется содержимое программного счетчика, а адрес в поле операнда команды представляет собой восьмиразрядное смещение rel (relative - относительный). Число rel интерпретируется командой как целое со знаком, представленное в дополнительном коде. Диапазон его представления -128 ÷ +127. При определении числа rel следует учесть, что программный счетчик указывает на следующую, подлежащую выполнению, команду. Относительный переход широко используется в командах передачи управления, так как по сравнению с абсолютными переходами они придают программе важное качество перемещаемости.

JMP @A + DPTR – косвенный переход по адресу, представляющим собой сумму содержимого аккумулятора A и регистра DPTR. Эта команда удобна тем, что предоставляет возможность организации перехода по адресу, вычисляемому самой программой и неизвестному при написании исходного текста программы. При этом в регистре DPTR находится постоянная часть адреса, в аккумуляторе – вычисляемая.

Команды условного перехода имеют структуру Jump(условие) bit, rel или Jumр(условие), rel и позволяют осуществлять переход при выполнении следующих условий (переход если):

  • JZ — аккумулятор содержит нулевое значение;

  • JNZ — аккумулятор содержит не нулевое значение

  • JC — бит переноса С установлен;

  • JNC — бит переноса С не установлен;

  • JB — прямоадресуемый бит равен 1

  • JNB — прямоадресуемый бит равен 0;

  • JBC — прямоадресуемый бит равен 1 и сбрасывается в нулевое значение при выполнении команды.

Все команды условного перехода содержат короткий относительный адрес, т. е. переход может осуществляться в пределах -128... +127 байт относительно следующей команды, аналогично команде SJMP.

Команды вызова подпрограмм и возврата из них:

LCALL ad16 – длинный вызов подпрограммы в пределах полного адресного пространства 64К. Трехбайтовая команда аналогичная команде LJMP.

ACALL ad11 – двухбайтовая команда вызова подпрограммы в пределах адресного пространства 2К. Как и для команды AJMP, имеется 8 команд типа ACALL.

RET – безадресная команда возврата из подпрограммы.

RETI - безадресная команда возврата из подпрограммы обработки прерывания.

Все команды данной группы, за исключением CJNE и JBC, не оказывают воздействия на флаги. Команда CJNE устанавливает флаг C, если первый операнд оказывается меньше второго. Команда JBC сбрасывает флаг C в случае перехода.