Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЕОМ тема 1.doc
Скачиваний:
9
Добавлен:
25.02.2016
Размер:
416.26 Кб
Скачать

4 Системи команд

Система команд МК містить 111 команд, що мають довжину 1, 2 або 3 байта і виконуються за один, два або чотири (множення або ділення) машинних цикла. При задаючій частоті fr=12 МГц продовжуваність циклу складає 1 мкс.

На рис. 10 наведено 13 форматів команд МК. Перший байт містить код операції (КОП), другий та третій – адреси операндів або безпосередні операнди.

Система команд наведена в табл. 2. В таблиці на рис. 10 використовуються позначення:

#d – безпосередній операнд (8-розрядне двійкове число);

#d16 – безпосередній операнд (16-розрядне двійкове число);

ad – прямо адресуєма 8-розрядна адреса комірки РПД або регістрів спеціальних функцій (можуть зустрітися abs-адреса отримувача і add-адреса джерела);

ad11, ad16 – відповідно 11- та 16-розрядна адреса;

bit(у графі “Пояснення” може зустрічатись позначення b) – адреса бітів;

re1 – 8-розрядне зміщення зі знаком;

Rn – регістр із номером n(0-7);

@Ri – операнд, косвенно адресуємий через Ri при і=0,1 (комірки РПД або зовнішньої пам'яті даних);

(X) – уміст елемента Х;

((X)) – уміст за адресою, що міститься в елементі Х;

(X)[15-8] – група розрядів елемента Х;

Операції:

+ додавання;

- віднімання;

* множення;

/ ділення;

OR логічне додавання (АБО);

AND логічне множення (І);

XOR “ВИКЛЮЧАЮЧЕ АБО”;

/X інверсія X.

В кодах команд через r, i, позначені двійкові розряди номера регістра, a[j] – розряди адреси, A[j] – розряди акумулятора.

В першій колонці таблиці 2.2 наведено мнемоніка команди й час її виконання в числі машинних циклів. В другій колонці наведено код операції і номер формату (рис. 2.10), який має відповідна команда. В колонці “Пояснення” під ВПД розуміється зовнішня пам'ять даних об'ємом 256 байт, а під розширеною ВПД – пам'ять об'ємом до 64 Кбайт.

Система команд мікроконтролера КМ1816ВЕ51 Таблиця 2

Мнемоніка

Число циклів

Код операції

Формат №

Поясненя

Команди передачі даних

MOV A, Rn

Циклів 1

11101rrr

Формат 1

Пересилка в акумулятор із регістру; (А)(Rn)

MOV A, ad

Циклів 1

11100101

Формат 3

Пересилка в акумулятор прямоадресуємого байта;(A)(ad)

MOV A, @Ri

Циклів 1

1110011i

Формат 1

Пересилка в акумулятор байта з РДП;(A)((Ri))

MOV A, #d

Циклів 1

01110100

Формат 2

Завантаження в акумулятор константи;

(A)#d

MOV Rn, A

Циклів 1

11111rrr

Формат 1

Пересилка в регістр з акумулятора; (A)#d

MOV Rn, ad

Циклів 2

10101rrr

Формат 3

Пересилка в регістр прямоадресуємого байта; (Rn)(ad)

MOV Rn, #d

Циклів 1

01111r

Формат 2

Завантаження в регістр константи;

(Rn)#d

MOV ad, A

Циклів 1

11110101

Формат 3

Пересилка за прямою адресою акумулятора; (ad)(A)

MOV ad, Rn

Циклів 2

10001rrr

Формат 3

Пересилка за прямою адресою регістра; (ad)(Rn)

MOV add, ads

Циклів 2

10000101

Формат 9

Пересилка прямоадресуємого байта за прямою адресою;

(add)(ads)

MOV ad, @Ri

Циклів 2

1000011i

Формат 3

Пересилка байта із РДП за прямою адресою; (ad)((Ri))

MOV ad, #d

Циклів 2

01110101

Формат 7

Пересилка за прямою адресою константи; (ad)#d

MOV @Ri, A

Циклів 1

1111011i

Формат 1

Пересилка в РПД з акумулятора;

((Ri))(A)

MOV @Ri, ad

Циклів 2

1010011i

Формат 3

Пересилка в РПД прямоадресуємого байта; ((Ri))(ad)

MOV @Ri, #d

Циклів 1

0111011i

Формат 2

Пересилка в РПД константи;

((Ri))#d

MOV DPTR, #d16

Циклів 2

10010000

Формат 13

Завантаження покажчика даних; (DPTR)#d16

Продовження Таблиці 2

MOV A, @A+DPTR

Циклів 2

10010011

Формат 1

Пересилка в акумулятор байта з пам'яті програм;

(A)((A))+(DPTR)

MOV A, @A+PC

Циклів 2

10000011

Формат 1

Пересилка в акумулятор байта з пам'яті програм;

(PC)(PC)+1; (A)((A)+(PC))

MOVX A, @Ri

Циклів 2

1110001i

Формат 1

Пересилка в акумулятор байта з ВПД;(A)((Ri))

MOVX A, @DPTR

Циклів 2

11100000

Формат 1

Пересилка в акумулятор байта з розширеної ВПД; (A)((DPTR))

MOVX @Ri, A

Циклів 2

1111001i

Формат 1

Пересилка в ВПД з акумулятора; ((Ri))(A)

MOVX @DPTR, A

Циклів 2

11110000

Формат 1

Пересилка в розширену ВПД з акумулятора; ((DPTR))(A)

PUSH ad

Циклів 2

11000000

Формат 3

Завантаження в стек; (SP)(SP)+1; ((SP))(ad)

POP ad

Циклів 2

11010000

Формат 3

Витягування зі стека;

(ad)((SP)); (SP)(SP)-1

XCH A,Rn

Циклів 1

11001rrr

Формат 1

Обмін акумулятора з регістром; (A)(Rn)

XCH A, ad

Циклів 1

11000101

Формат 3

Обмін акумулятора з прямоадресуємим байтом; (A)ad

XCH A, @Ri

Циклів 1

1100011i

Формат 1

Обмін акумулятора з байтом з РПД; (A)((Ri))

XCHD A, @Ri

Циклів 1

1101011i

Формат 1

Обмін молодшої тетради акумулятора з молодшою тетрадою байта РПД;

(A[3-0])((Ri[3-0]))

Арифметичні команди

ADD A, Rn

Циклів 1

00101rrr

Формат 1

Складання акумулятора з регістром;

(A)(A)+(Rn)

ADD A, ad

Циклів 1

00100101

Формат 3

Складання акумулятора з прямоадресуємим байтом; (A)(A)+(ad)

ADD A, @Ri

Циклів 1

0010011i

Формат 1

Складання акумулятора з байтом з РПД;

(A)(A)+((Ri))

ADD A, #d

Циклів 1

00100100

Формат 2

Складання акумулятора з константою; (A)(A)+#d

ADDC A, Rn

Циклів 1

00111rrr

Формат 1

Складання акумулятора з байтом з РПД;

(A)(A)+(Rn)+(C)

ADDC A, ad

Циклів 1

00110101

Формат 3

Складання акумулятора зпрямоадресуємим байтом та переносом; (A)(A)+(ad)+(C)

ADDC A, @Ri

Циклів 1

0011011i

Формат 1

Складання акумулятора з байтом з РПД і переносом;

(A)(A)+((Ri))+(C)

ADDC A, #d

Циклів 1

00110100

Формат 2

Складання акумулятора з константою й переносом; (A)(A)+#d+C

DA A

Циклів 1

11010100

Формат 1

Десяткова корекція акумулятора: якщо ((A[3-0])>9 або (AC)=1), то (A[3-0])(A[3-0])+6;

якщо ((A[7-4])>9 або (C)=1),

то (A[7-4])(A[7-4])+6

SUBB A, Rn

Циклів 1

10011rrr

Формат 1

Віднімання з акумулятора регістра й запозичення;

(A)(A)-(Rn)-(C)

Продовження Таблиці 2

SUBB A, ad

Циклів 1

10010101

Формат 3

Віднімання від акумулятора прямоадресуємого байта й запозичення;

(A)(A)-(ad)-(C)

SUBB A, @Ri

Циклів 1

1001011i

Формат 1

Віднімання від акумулятора байта РПД і запозичення; (A)(A)-((Ri))-(C)

SUBB A, #d

Циклів 1

10010100

Формат 2

Віднімання з акумулятора константи та запозичення;

(A)(A)-#d-(C)

INC A

Циклів 1

00000100

Формат 1

Інкремент акумулятора; (A)(A)+1

INC Rn

Циклів 1

00001rrr

Формат 1

Інкремент регістра;

(Rn)(Rn)+1

INC ad

Циклів 1

00000101

Формат 3

Інкремент прямоадресуємого байта; (ad)(ad)+1

INC @Ri

Циклів 1

0000011i

Формат 1

Інкремент байта в РПД;

((Ri))((Ri))+1

INC DPTR

Циклів 2

10100011

Формат 1

Інкремент покажчика даних; (DPTR)(DPTR)+1

DEC A

Циклів 1

0010100

Формат 1

Декремент акумулятора;

(A)(A)-1

DEC Rn

Циклів 1

00011rrr

Формат 1

Декремент регістра;

(Rn)(Rn)-1

DEC ad

Циклів 1

00010101

Формат 3

Декремент прямоадресуємого байта; (ad)(ad)-1

DEC @Ri

Циклів 1

0001011i

Формат 1

Декремент байта в РПД; ((Ri))((Ri))-1

MUL AB

Циклів 4

10100100

Формат 1

Множення акумулятора на регістр В; (B).(A)(A)*(B)

DIV AB

Циклів 4

10000100

Формат 1

Ділення акумулятора на регістр В; (A).(B)(A)/(B)

Логічні команди

ANL A, Rn

Циклів 1

01011rrr

Формат 1

Логічне І акумулятора та регістра;

(A)(A) AND (Rn)

ANL A, ad

Циклів 1

01010101

Формат 3

Логічне І акумулятора та прямоадресуємого байта; (A)(A) AND (ad)

ANL A, @Ri

Циклів 1

0101011i

Формат 1

Логічне І акумулятора й байта з РПД; (A)(A) AND ((Ri))

ANL A, #d

Циклів 1

01010100

Формат 2

Логічне І акумулятора й константи; (A)(A) AND #d

ANL ad, A

Циклів 1

01010010

Формат 3

Логічне І прямоадресуємого байта й акумулятора;

(ad)(ad) AND (A)

ANL ad, #d

Циклів 2

01010011

Формат 7

Логічне І прямоадресуємого байта й константи;

(ad)(ad) AND #d

ORL A, Rn

Циклів 1

01001rrr

Формат 1

Логічне АБО акумулятора й регістра; (A)(A) OR (Rn)

ORL A, ad

Циклів 1

01000101

Формат 3

Логічне АБО акумулятора і прямоадресуємого байта;

(A)(A) OR (ad)

ORL A, @Ri

Циклів 1

0100011i

Формат 1

Логічне АБО акумулятора й байта з РПД; (A)(A) OR ((Ri))

Продовження Таблиці 2

ORL A, #d

Циклів 1

01000100

Формат 2

Логічне АБО акумулятора й константи; (A)(A) OR #d

ORL ad, A

Циклів 1

01000010

Формат 3

Логічне АБО прямоадресуємого байта й акумулятора; (ad)(ad) OR (A)

ORL ad, #d

Циклів 2

01000011

Формат 7

Логічне АБО прямоадресуємого байта й константи;

(ad)(ad) OR #d

XRL A, Rn

Циклів 1

01101rrr

Формат 1

Виключаюче АБО акумулятора та регістра;

(A)(A) XOR (Rn)

XRL A, ad

Циклів 1

01100101

Формат 3

Виключаюче АБО акумулятора та прямоадресуємого байта; (A)(A) XOR (ad)

XRL A, @Ri

Циклів 1

0110011i

Формат 1

Виключаюче АБО акумулятора й байта із РПД;

(A)(A) XOR ((Ri))

XRL A, #d

Циклів 1

01100100

Формат 2

Виключаюче АБО акумулятора й константи; (A)(A) XOR #d

XRL ad, A

Циклів 1

01100010

Формат 3

Виключаюче АБО прямоадресуємого байта й акумулятора; (ad)(ad) XOR

XRL ad, #d

Циклів 2

01100011

Формат 7

Виключаюче АБО прямоадресуємого байта й константи; (ad)(ad) XOR #d

CLR A

Циклів 1

11100100

Формат 1

Скид акумулятора; (А)0

CPL A

Циклів 1

11110100

Формат 1

Інверсія акумулятора; (А)/(А)

RL A

Циклів 1

00100011

Формат 1

Зсув акумулятора вліво циклічний;

(A[j+1])(A[j]) для j=0-6;

(A[0])(A[7])

RLC A

Циклів 1

00110011

Формат 1

Зсув акумулятора вліво через перенос;

(A[j+1])(A[j]) для j=0-6;

(A[0])(C), (C)(A[7])

RR A

Циклів 1

00000011

Формат 1

Зсув акумулятора вправо циклічний;

(A[j])(A[j+1]) для j=0-6;

(A[7])(A[0])

RRC A

Циклів 1

00010011

Формат 1

Зсув акумулятора вправо через перенос;

(A[j])(A[j+1]) для j=0-6;

(A[7])(C), (C)(A[0])

SWAP A

Циклів 1

11000100

Формат 1

Обмін містами тетрад в акумуляторі;

(A[0-3])(A[4-7])

Команди операцій з бітами

CLR C

Циклів 1

11000011

Формат 1

Обнуління переносу; (С)0

CLR bit

Циклів 1

11000010

Формат 4

Обнуління біта; (b)0

CPL C

Циклів 1

10110011

Формат 1

Інверсія переносу; (С)/(С)

CPL bit

Циклів 1

10110010

Формат 4

Інверсія біта; (b)/(b)

SETB C

Циклів 1

11010011

Формат 1

Установка переносу; (С)1

Продовження Таблиці 2

SETB bit

Циклів 1

11010010

Формат 4

Установка біта; (b)1

ANL C, bit

Циклів 2

10000010

Формат 4

Логічне І біта та переносу; (C)(C) AND (bit)

ANL C, /bit

Циклів 2

10110000

Формат 4

Логічне І інверсія біта й переносу; (С)(С) AND (/bit)

ORL C, bit

Циклів 2

01110010

Формат 4

Логічне АБО біта й переносу;

(C)(C) OR (bit)

ORL C, /bit

Циклів 2

10100000

Формат 4

Логічне АБО інверсії біта й переносу; (С)(С) OR (/bit)

MOV C, bit

Циклів 2

10100010

Формат 4

Пересилка біта в перенос;

(C)(bit)

MOV bit, C

Циклів 2

10010010

Формат 4

Пересилка переносу в біт; (bit)(C)

Команди передачі керування

LJMP ad16

Циклів 2

00000010

Формат 12

Довгий перехід у повному об'ємі пам'яті програм; (РС)ad16

AJMP ad11

Циклів 2

a[10]a[9]

a[8]00001

Формат 6

Абсолютний перехід усередині сторінки в 2 Кбайт;

(PC)(PC)+2; (PC[10-0])ad11

SJMP re1

Циклів 2

10000000

Формат 5

Короткий перехід усередині сторінки в 256 байт; (PC)(PC)+2; (PC)(PC)+re1

JMP @A+DPTR

Циклів 2

01110011

Формат 1

Косвенний перехід; (PC)(A)+(DPTR)

JZ re1

Циклів 2

01100000

Формат 5

Перехід, якщо акумулятор дорівнює нулю; (PC)(PC)+2;

якщо (A)=0, то (PC)(PC)+re1

JNZ re1

Циклів 2

01110000

Формат 5

Перехід, якщо акумулятор не дорівнює нулю; (PC)(PC)+2;

якщо (A)<>0, то (PC)(PC)+re1

JC re1

Циклів 2

01000000

Формат 5

Перехід, якщо перенос установлено; (PC)(PC)+2;

якщо (C)=1, то (PC)(PC)+re1

JNC re1

Циклів 2

00110000

Формат 5

Перехід, якщо перенос установлено;(PC)(PC)+2;

якщо (C)=0, то (PC)(PC)+re1

JB bit,re1

Циклів 2

00010000

Формат 11

Перехід, якщо біт установлено; (PC)(PC)+3;

якщо (b)=1, то (PC)(PC)+re1

JNB bit, re1

Циклів 2

00010000

Формат 11

Перехід, якщо біт не встановлено; (PC)(PC)+3;

якщо (b)=0, то (PC)(PC)+re1

JBC bit, re1

Циклів 2

11011rrr

Формат 11

Перехід, якщо біт встановлено й обнуленя цього біта; (PC)(PC)+3;

якщо (b)=1, то (PC)(PC)+re1;

(b)0

DJNZ Rn, re1

Циклів 2

11010101

Формат 5

Декремент регістра й перехід, якщо не нуль; (PC)(PC)+2; (Rn)(Rn)-1; якщо (Rn)<>0, то (PC)(PC)+re1

DJNZ ad, re1

Циклів 2

11010101

Формат 8

Декремент прямоадресуємого байта й перехід, якщо не нуль; (PC)(PC)+2; (ad)(ad)-1;

Якщо (ad)<>0, то (PC)(PC)+re1

Продовження Таблиці 2

CJNE A,ad, re1

Циклів 2

10110101

Формат 8

Порівняння акумулятора зпрямоадресуємим байтом і перехід, якщо не дорівнює;

(PC)(PC)+3;

якщо (ad)<(A),

то (PC)(PC)+re1, (C)0;

якщо (ad)>(A),

то (PC)(PC)+re1,(C)1

CJNE A, #d, re1

Циклів 2

10110100

Формат 10

(PC)(PC)+3;

якщо #d<(Rn),

то (PC)(PC)+re1, (C)0;

якщо #d>(Rn),

то (PC)(PC)+re1, (C)1

CJNE Rn, #d, re1

Циклів 2

10111rrr

Формат 10

Порівняння байта з РПД з константою й перехід, якщо не дорівнює; (PC)(PC)+3; якщо #d<((Ri)),

то (PC)(PC)+re1, (C)0;

якщо #d>((Ri)), то (PC)(PC)+re1, (C)1

LCAL ad16

Циклів 2

00010010

Формат 12

Довгий виклик підпрограми;

(PC)(PC)+3, (SP)(SP)+1, ((SP))(PC[7-0]),(SP)(SP)+1, ((SP))(PC[15-8]),(PC)ad16

ACALL ad11

Циклів 2

a[10]a[9]

a[8]10001

Формат 6

Абсолютний виклик підпрограми в межах сторінки в 2 Кбайт;

(PC)(PC)+2, (SP)(SP)+1, ((SP))(PC[7-0]), (SP)(SP)+1, ((SP))(PC[15-8]),

(PC)[10-0]ad11

RET

Циклів 2

00100010

Формат 1

Поверненя з підпрограми;

(PC[15-8])((SP)), (SP)(SP)-1, (PC[7-0])((SP)), (SP)(SP)-1

RETI

Циклів 2

00110010

Формат 1

Повернення з переривання; (PC[15-8])((SP)), (SP)(SP)-1, (PC[7-0])((SP)), (SP)(SP)-1

NOP

Циклів 1

00000000

Формат 1

Немає операції; (PC)(PC)-1

В таблиці 3 наведено команди, що впливають на установку прапорців PSW (х – прапорець дорівнює 0 або 1).

Нижче наводиться опис особливостей деяких команд.

Арифметичні команди

При операції MUL помножаються цілі беззнакові (уміст акумулятора на вміст регістра В). Старший байт добутку поміщається в регістр У, молодший в акумулятор. Прапорець переповнення встановлюється, якщо результат перевищує 255 (0FFh).

Таблиця 3

Мнемоніка

Прапорці

Мнемоніка

Прапорці

C

OV

AC

C

OV

AC

ADD

x

x

x

CLR C

0

ADDC

x

x

x

CPL C

x

SUBB

x

x

x

ANL C, bit

x

MUL

0

x

ANL C, /bit

x

Таблиця 3. Продовження

DIV

0

x

ORL C, bit

x

DA

x

ORL C, /bit

x

RRC

x

MOV C, bit

x

RLC

x

CJNE

x

SETB C

1

Команди ділення DIV ділить цілі беззнакові числа. Ділене розміщається в акумуляторі, дільник – в регістрі В. ціла частина частки розміщується в А, а остача – в регістрі В. прапорці С та OV обнуляються. Виключення становить лише той випадок, коли дільник дорівнює нулю, тут прапорець переповнення встановлюється.

При виконанні команд додавання (ADD) або додавання з переносом (ADDC) встановлюються прапорці С та АС (при виникненні переносів відповідно із розрядів 7 і 3). Пропорець С при додаванні чисел без знаку вказує на появу переповнення. Біт OV встановлюється, якщо є перенос із біта 6 і немає переносу з біта 7. При додаванні чисел із знаком біт OV вказує на від'ємну суму при додаванні додатних операндів або на додатну суму двох від'ємних доданків.

В командах “віднімання з запозиченням” прапорці С та АС установлюються, якщо необхідне запозичення для бітів 7 та 3. Біт OV при відніманні чисел зі знаком свідчить про від'ємний результат при відніманні від'ємного числа з додатного або про додатній результат при відніманні додатного числа з від'ємного.

Команда десяткової корекції DA корегує в акумуляторі результат додавання (командами ADD та ADDC) двох змінних, що представлені у двійково-десятичному форматі. Мета операції отримати дві двійково-десяткові цифри. Команда виконує двійково-десяткове перетворення шляхом складання вмісту А з числами 06, 60h, 66h у відповідності від висхідного стану А та прапорців С, АС. Команда DA використовується лише після операції додавання і не може використовуватись, наприклад, після операції віднімання, а також виконувати просте перетворення шістнадцятирічного числа у двійково-десяткове.

Команди передачі даних

Команда завантаження покажчика даних завантажує DPTR 2-байтною константою з 2-го та 3-го байтів команди. При цьому другий байт команди пересилається в DPH, третій – в DPL.

Зчитування даних із пам'яті програм виконується командами MOVC. Адреса зчитуємого байта обчислюється як сума вмісту А (число без знака) і одного з двох 16-розрядних регістрів (DPTR або РС).

Мається два типа команд MOVX обміну із зовнішньою пам'яттю даних. Перший з них забезпечує доступ до 256 коміркам ВПД, при чому адреса розміщується в регістрах R1 або R0 поточного байта регістрів. Другий забезпечує доступ до розширеної ВПД, котра може містити до 64 Кбайт пам'яті. Адреса в цьому випадку розміщується в регістрі-покажчику даних DPTR.

Логічні команди

Ці команди виконують операції І, АБО, ВИКЛЮЧАЮЧЕ АБО і записують результат у байт призначення. Є також команди циклічного й арифметичного зсуву вправо та вліво.

Команди операцій з бітами

Працюють із бітом переносу і будь-якими іншими бітами, що дозволяють пряму адресацію. Наприклад, якщо С=0, розряд порту Р1.0=0, то виконання команди ORL С, /Р1.0 приведе до встановлення біта С.

Команди передачі керування

Указана група містить команди умовного та безумовного переходу, виклику та повернення з програм. До команд безумовного переходу відносяться:

-- довгий перехід LGMP, який дозволяє виконувати передачу керування в межах усієї пам'яті програм (до 64 Кбайт). Команда містить 3 байта. Для економії пам'яті, якщо це можливо, використовують наведені нижче команди, що мають меншу довжину;

-- абсолютний перехід AJMP для переходу в межах сторінки розміром 2048 байт, для чого в коді команди задаються 11 молодших розрядів адреси;

-- короткий перехід SJMP у межах –128/+127 байт відносно адреси команди, що слідує за SJMP. Для такого переходу в другому байті команди задається зміщення re1 – ціле число зі знаком. Такий само метод адресації використовують і всі команди умовного переходу.

-- косвенний перехід JMP @A+DPTR дозволяє виконати перехід за адресою, спочатку невідомою й обчислюємою програмою. Приклад використання цієї команди наведено нижче.

Команди умовних переходів дозволяють виконувати розгалудження за наступними умовами: уміст А дорівнює нулю (JZ), не дорівнює нулю (JNZ); перенос дорівнює нулю (JNC), не дорівнює нулю (JC); адресуємий біт дорівнює нулю (JNB), не дорівнює нулю (JB, JBC).

Команди DJNZ виконує декремент указаної комірки і виконує розгалудження, якщо результат не дорівнює нулю. У протилежному випадку виконується перехід до наступної команди. Адреса переходу визначається додаванням вмісту лічильника команд, збільшеного на 2, із зміщенням. Цю команду зручно використовувати для організації циклів.

Команда “порівняння й перехід, якщо не дорівнює” CJNE порівнює значення двох операндів і виконує розгалудження, якщо вони не рівні. Обидва операнди є цілими беззнаковими. В залежності від співвідношення операндів установлюється (обнуляється) біт С (табл. 2).

Для звернення до підпрограми використовуються команди ACALL (абсолютний виклик) і LCALL (довгий виклик). Ці команди на відміну від команд переходу AJMP, LJMP зберігають у стеку адресу звороту в основну програму. Для повернення з підпрограми використовується команда RET, після виконання якої програма продовжує виконання з команди, що йде за LCALL або ACALL.

Для повернення з підпрограми обробки переривань використовується команда RETI. Її відмінність від команди RET у тому, що вона дозволяє переривання обслуженого рівня. Якщо при виконанні команди RETI знайдено переривання з таким само чи меншим рівнем пріоритету, одна команда основної програми виконується до обробки такого переривання. Це властивість системи переривань можна використовувати для організації покрокового виконання програми, зручного при відладці контролерів.