69375

ПРОГРАМУВАННЯ МІКРОПРОЦЕСОРНИХ СИСТЕМ НА БАЗІ МІКРОКОНТРОЛЕРІВ РОДИНИ МК-51

Лекция

Коммуникация, связь, радиоэлектроника и цифровые приборы

Більшу частину команд даної групи (таблиця 1) складають команди передачі та обміну байтами. Команди пересилки входять і в групу команд роботи з окремими бітами. Всі команди даної групи не модифікують прапорці результату, за винятком команд завантаження PSW...

Украинкский

2014-10-04

822 KB

3 чел.

РОЗДІЛ 2 ПРОГРАМУВАННЯ МІКРОПРОЦЕСОРНИХ СИСТЕМ НА БАЗІ МІКРОКОНТРОЛЕРІВ РОДИНИ МК-51

Тема 2.3 Класифікація команд за функціональним призначенням

леКЦІЯ 4 КЛАСИФІКАЦІЯ КОМАНД ЗА ФУНКЦІОНАЛЬНИМ ПРИЗНАЧЕННЯМ

САМОСТІЙНА РОБОТА СТУДЕНТІВ


  1.  ЗАГАЛЬНІ ВІДОМОСТІ

111 основних команд мікроконтролера MCS-51 розбиті на п'ять груп (таблиці 1-5):

  •  команди передачі даних;
  •  арифметичні команди;
  •  логічні операції;
  •  операції з бітами;
  •  команди передачі керування.

Таблиці команд дають достатньо повну характеристику кожної з базових команд мікроконтролера:

  •  назва команди (у стислій формі описує функцію команди);
  •  мнемокод (включає в себе мнемоніку команди та опис операндів, які беруть участь в операції);
  •  код операції (КОП);
  •  тип команди (позначається як Т);
  •  довжину команди в байтах (позначається як Б);
  •  кількість машинних циклів, необхідних для виконання команди (позначається як Ц);
  •  коментар (операція).
  1.  СИМВОЛІЧНІ ПОЗНАЧЕННЯ, ЯКІ ВИКОРИСТОВУЮТЬСЯ ПРИ ОПИСІ КОМАНД МІКРОКОНТРОЛЕРА

При описанні команд мікроконтролера (таблиці 1-5) використовуються наступні символічні позначення:

  1.  А – регістр-акумулятор (8 біт);

Вибір поточного банку РЗП

№банку

RS1

RS0

0

0

0

1

0

1

2

1

0

3

1

1

  1.  Rn – один з регістрів загального призначення поточного банку РЗП (R0/R1/R2/R3/R4/R5/R6/R7; n = 0, 1, …, 7). RS1, RS0 – два біта регістра прапорців – PSW;
  2.  @Ri – непряма адресація. Операнд знаходиться в резидентній пам'яті даних (РПД) або в зовнішній пам'яті даних (ЗПД) за адресою, що міститься в одному з двох РЗП поточного банку: R0/R1 (Ri, де i = 0/1);
  3.  ad; add; ads – позначення байту, що адресується прямо, який міститься в РПД або в одному з 21 регістрів спеціальних функцій (РСФ);
  4.  #D8 – 8-розрядний безпосередній операнд (константа);
  5.  DPTR - 16-розрядний регістр МК-ра;
  6.  PC – програмний лічильник  16-розрядний регістр МК-ра;
  7.  @DPTR – непряма адресація. Операнд знаходиться у зовнішній пам'яті даних (ЗПД) за адресою, що міститься в регістрі DPTR;
  8.  @A+DPTR; @A+PC – непряма адресація. Операнд знаходиться в пам'яті програм (ПП) за адресою, яка обчислюється відповідно як сума: (A+DPTR) або (A+PC);
  9.  B – регістр-розширювач акумулятора (8 біт);
  10.  Bit – позначення біта, що адресується прямо, який міститься в одному з 128 бітів РПД (8*16 = 128) або в 11 регістрах спеціальних функцій (див. програмістську модель);
  11.  С – прапорець перенесення/позики регістра PSW;
  12.  ad16; ad11 – відповідно 16-ти або 11-ти розрядна пряма адреса пам'яті програм;
  13.  rel – 8-ми розрядне число зі знаком: (-128...+127), яке при виконанні переходів додаєтсья до адресм наступної команди (rel = ADR мітки  ADR наступної команди);
  14.  КОМАНДИ ПЕРЕДАЧІ ДАННИХ

Більшу частину команд даної групи (таблиця 1) складають команди передачі та обміну байтами. Команди пересилки входять і в групу команд роботи з окремими бітами. Всі команди даної групи не модифікують прапорці результату, за винятком команд завантаження PSW, тригера (прапорця) C і акумулятора (встановлюється прапорець паритету). На рисунку 1 зображений граф шляхів передачі даних в МК-рі.

Рисунок 1  Граф шляхів передачі даних в МК-рі

Окремою вершиною на цьому графі зображений акумулятор А, тому що він бере участь у більшості пересилок і адресується за допомогою неявної або прямої адресації. Проте деякі пересилки виконуються без участі акумулятора.


Таблиця 1 – Група команд передачі даних

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

Мнемокод

КОП

Т

Б

Ц

Операція

1

Пересилка в акумулятор з регістра (n = 0..7)

MOV  A, Rn

11101rrr

1

1

1

(A) (Rn)

2

Пересилка в акумулятор байта, що адресується прямо

MOV  A, ad

11100101

3

2

1

(A) (ad)

3

Пересилка в акумулятор байта з РПД (i = 0,1)

MOV  A, @Ri

1110011i

1

1

1

(A) РПД(Ri)

4

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

MOV  A, #D8

01110100

2

2

1

(A) D8

5

Пересилка у регістр (n = 0..7) з акумулятора

MOV  Rn, A

11111rrr

1

1

1

(Rn) (A)

6

Пересилка у регістр байта, що адресується прямо

MOV  Rn, ad

10101rrr

3

2

2

(Rn) (ad)

7

Завантаження в регістр (n = 0..7) константи

MOV  Rn, #D8

01111rrr

2

2

1

(Rn) D8

8

Пересилка за прямою адресою акумулятора

MOV  ad, A

11110101

3

2

1

(ad) (A)

9

Пересилка за прямою адресою регістра

MOV  ad, Rn

10001rrr

3

2

2

(ad) (Rn)

10

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

MOV  add, ads

10000101

9

3

2

(add) (ads)

11

Пересилка байта з РПД за прямою адресою

MOV  ad, @Ri

1000011i

3

2

2

(ad) РПД(Ri)

12

Пересилка за прямою адресою константи

MOV  ad, #D8

01110101

7

3

2

(ad) D8

13

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

MOV  @Ri, A

1111011i

1

1

1

РПД(Ri) (A)

14

Пересилка у РПД байта, що адресується прямо

MOV  @Ri, ad

0110011i

3

2

2

РПД(Ri) (ad)

15

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

MOV  @Ri, #D8

0111011i

2

2

1

РПД(Ri) D8

16

Завантаження регістра-покажчика даних

MOV  DPTR, #D16

10010000

13

3

2

(DPTR) D16

17

Пересилка в акумулятор байта з ПП

MOVC  A, @A+DPTR

10010011

1

1

2

(A) ПП((A) + (DPTR))

18

Пересилка в акумулятор байта з ПП

MOVC  A, @A+PC

10000011

1

1

2

(PC) (PC) + 1

(A) ПП((A) + (PC))

19

Пересилка в акумулятор байта з ЗПД

MOVX  A, @Ri

1110001i

1

1

2

(A) ЗПД(Ri)

20

Пересилка в акумулятор байта з розширеної ЗПД

MOVX  A, @DPTR

11100000

1

1

2

(A) ЗПД(DPTR)

21

Пересилка у ЗПД з акумулятора

MOVX  @Ri, A

1111001i

1

1

2

ЗПД(Ri) (A)

22

Пересилка у розширену ЗПД з акумулятора

MOVX  @DPTR, A

11110000

1

1

2

ЗПД(DPTR) (A)

23

Завантаження у стек

PUSH  ad

11000000

3

2

2

(SP) (SP) + 1

РПД(SP) (ad)

24

Зчитування зі стека

POP  ad

11010000

3

2

2

(ad) РПД(SP)

(SP) (SP) - 1

25

Обмін акумулятора з регістром

XCH  A, Rn

11001rrr

1

1

1

(A) (Rn)

26

Обмін акумулятора з байтом , що адресується прямо

XCH  A, ad

11000101

3

2

1

(A) (ad)

27

Обмін акумулятора з байтом з PПД

XCH  A, @Ri

1100011i

1

1

1

(A) РПД(Ri)

28

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

XCHD  A, @Ri

1101011i

1

1

1

(A0-3) РПД(Ri)0-3


В число команд пересилок входять операції зі стеком, який організується в РПД. Для адресації комірок стека використовується регістр-показник стека (SP), який дозволяє адресувати будь-яку комірку внутрішнього ОЗП. Запис інформації в стек проводиться командою PUSH  ad, а зчитування зі стека POP  ad. У початковоому стані SP адресує "вершину" стека останню комірку стекової пам’яті, у якій записана інформація. Довжина операнда при роботі зі стеком дорівнює 8 біт. Перед записом у стек вміст SP інкрементується, а після зчитування декрементується.

  1.  АРИФМЕТИЧНІ КОМАНДИ

В наборі команд МК-ра (таблиця 2) є такі арифметичні операції: додавання, додавання з врахуванням прапорця перенесення, віднімання з позикою, множення і ділення, інкременту, декременту, десяткова корекція.

В АЛП проводяться дії над цілими числами. У таких операціях над двома операндами, як: додавання ADD, додавання з перенесенням ADDC та віднімання з позикою SUBB, акумулятор зберігає перший операнд і приймає результат операції.

Другим операндом може бути регістр вибраного банку робочих регістрів, регістр внутрішньої пам’яті даних із непрямою та прямою адресацією або байт безпосередніх даних. Вказані операції впливають на прапорці: переповнення, перенесення, допоміжного перенесення і прапорець парності в слові стану процесора PSW.

Використання розряду перенесення дозволяє багаторазово підвищити точність при виконанні операцій додавання ADDC і віднімання SUBB.


Таблиця 2 – Група команд арифметичних операцій

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

Мнемокод

КОП

Т

Б

Ц

Операція

1

Додавання акумулятора до регістра (n = 0..7)

ADD  A, Rn

00101rrr

1

1

1

(A) (A) + (Rn)

2

Додавання акумулятора до байта, що адресується прямо

ADD  A, ad

00100101

3

2

1

(A) (A) + (ad)

3

Додавання акумулятора до байта з РПД (i = 0,1)

ADD  A, @Ri

0010011i

1

1

1

(A) (A) + РПД(Ri)

4

Додавання акумулятора до константи

ADD  A, #D8

00100100

2

2

1

(A) (A) + D8

5

Додавання акумулятора до регістра і перенесення

ADDC  A, Rn

00111rrr

1

1

1

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

6

Додавання акумулятора до байта, що адресується прямо, і перенесення

ADDC  A, ad

00110101

3

2

1

(A) (A) + (ad) + (C)

7

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

ADDC  A, @Ri

0011011i

1

1

1

(A) (A) + РПД(Ri) + (C)

8

Додавання акумулятора до константи і перенесення

ADDC  A, #D8

00110100

2

2

1

(A) (A) + D8 + (C)

9

Десяткова корекція акумулятора (після додавання двох операндів, що представлені в упакованому BCD-коді)

DA  A

11010100

1

1

1

Якщо (A3-0)>9 V (AC)=1,

то (А7-0) (A7-0) + 6; потім

якщо (A7-4)>9 V (C)=1, то

(A7-4) (A7-4) + 6

10

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

SUBB  A, Rn

10011rrr

1

1

1

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

11

Віднімання від акумулятора байта, що адресується прямо, і позики

SUBB  A, ad

10010101

3

2

1

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

12

Віднімання від акумулятора байта РПД і позики

SUBB  A, @Ri

1001011i

1

1

1

(A) (A) - (C) - РПД(Ri)

13

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

SUBB  A, #D8

10010100

2

2

1

(A) (A) - (C) - D8

14

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

INC  A

00000100

1

1

1

(A) (A) + 1

15

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

INC  Rn

00001rrr

1

1

1

(Rn) (Rn) + 1

16

Інкремент байта, що адресується прямо

INC  ad

00000101

3

2

1

(ad) (ad) + 1

17

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

INC  @Ri

0000011i

1

1

1

РПД(Ri) РПД(Ri) + 1

18

Інкремент показника даних

INC  DPTR

10100011

1

1

2

(DPTR) (DPTR) + 1

19

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

DEC  A

00010100

1

1

1

(A) (A) - 1

20

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

DEC  Rn

00011rrr

1

1

1

(Rn) (Rn) - 1

21

Декремент байта

DEC  ad

00010101

3

2

1

(ad) (ad) - 1

22

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

DEC  @Ri

0001011i

1

1

1

РПД(Ri) РПД(Ri) - 1

23

Множення акумулятора на регістр В

MUL  AB

10100100

1

1

4

Якщо (А)х(В) > 255,

то (B)(A) (A)x(B);

якщо (А)х(В) < 255,

то (A) (A)x(B)

24

Ділення акумулятора на регістр В

DIV  AB

10000100

1

1

4

(A) (A)/(B) - ціла частина

(В) R ((А)/(В)) – остача від ділення


Виконання операцій додавання і віднімання з урахуванням знака може бути здійснене за допомогою прапорця переповнення OV регістра PSW. Прапорець допоміжного перенесення AC забезпечує виконання арифметичних операцій у двійково-десятковому коді і використовується командою десяткової корекції DAA.

Операції інкременту і декременту на прапорці не впливають.

  1.  ЛОГІЧНІ КОМАНДИ

АЛП МК-ра дає можливість виконувати логічні операції над байтовими і бітовими операндами. В таблиці 3 включені команди виконання логічних операцій над вмістом 8-розрядних даних. Операції над бітовими операндами описані в таблиці 4.

Система команд МК-ра дозволяє реалізувати такі логічні операції: "І", "АБО", "ВИКЛЮЧНЕ АБО" над операндом в регістрі-акумуляторі А і байтом-джерелом. Другим операндом (байтом-джерелом) при цьому можуть бути регістр у вибраному банку робочих регістрів, регістр внутрішнього ОЗП, який адресується за допомогою непрямої адресації, комірки внутрішнього ОЗП, які адресуються прямо і регістри спеціального призначення, а також безпосередні операнди. Вказані логічні операції можуть бути реалізовані або на будь-якому регістрі внутрішнього ОЗП, який адресується прямо, або на регістрі спеціального призначення, беручи за другий операнд вміст акумулятора А або безпосередній операнд.

Існують логічні операції, що виконуються тільки в акумуляторі: скидання та інвертування усіх восьми розрядів А; циклічний зсув вліво та вправо; циклічний зсув вліво та вправо з урахуванням прапорця перенесення; обмін місцями старшої і молодшої тетрад акумулятора.



Таблиця 3 – Група команд логічних операцій

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

Мнемокод

КОП

Т

Б

Ц

Операція

1

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

ANL  A, Rn

01011rrr

1

1

1

(A) (A)    (Rn)

2

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

ANL   A, ad

01010101

3

2

1

(A) (A)    (ad)

3

Логічне І акумулятора та байта з РПД

ANL   A, @Ri

0101011i

1

1

1

(A) (A)    РПД(Ri)

4

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

ANL   A, #D8

01010100

2

2

1

(A) (A)    #D8

5

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

ANL   ad, A

01010010

3

2

1

(ad) (ad)    (A)

6

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

ANL   ad, #D8

01010011

7

3

2

(ad) (ad)    #D8

7

Логічне АБО акумулятора та регістра

ORL   A, Rn

01001rrr

1

1

1

(A) (A)  V  (Rn)

8

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

ORL   A, ad

01000101

3

2

1

(A) (A)  V  (ad)

9

Логічне АБО акумулятора та байта з РПД

ORL   A, @Ri

0100011i

1

1

1

(A) (A)  V  РПД(Ri)

10

Логічне АБО акумулятора та константи

ORL   A, #D8

01000100

2

2

1

(A) (A)  V  D8

11

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

ORL   ad, A

01000010

3

2

1

(ad) (ad)  V  (A)  

12

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

ORL   ad, #D8

01000011

7

3

2

(ad) (ad)  V  #D8

13

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

XRL   A, Rn

01101rrr

1

1

1

(A) (A)  Å  (Rn)

14

Виключне АБО акумулятора та байта, що адресується прямо

XRL  A, ad

01100101

3

2

1

(A) (A)  Å  (ad)

15

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

XRL  A, @Ri

0110011i

1

1

1

(A) (A)  Å  РПД(Ri)

16

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

XRL  A, #D8

01100100

2

2

1

(A) (A)  Å  #D8

17

Виключне АБО байта, що адресується прямо, та акумулятора

XRL  ad, A

01100010

3

2

1

(ad) (ad)  Å  (A)

18

Виключне АБО байта, що адресується прямо, та константи

XRL  ad, #D8

01100011

7

3

2

(ad) (ad)  Å  #D8

19

Скидання акумулятора

CLR  A

11100100

1

1

1

(A) 0

20

Інверсія акумулятора

CPL  A

11110100

1

1

1

(A) (Ā)

21

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

RL  A

00100011

1

1

1

(An+1) (An),  n = 0..6,

(A0) (A7)

22

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

RLC  A

00110011

1

1

1

(An+1) (An),  n=0..6,

(A0) (C),  (C) (A7)

23

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

RR  A

00000011

1

1

1

(An) (An+1),  n = 0..6,

(A7) (A0)

24

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

RRC  A

00010011

1

1

1

(An) (An+1),  n = 0..6,

(A7) (C),  (C) (A0)

25

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

SWAP  A

11000100

1

1

1

(A3-0) (A7-4)


  1.  ОПЕРАЦІЇ З БІТАМИ

До складу МК-ра входить так званий "бітовий" процесор, який забезпечує виконання ряду операцій над бітами (таблиця 4).

Бітовий процесор є частиною архітектури МК-ра родини MCS-51 і його можна розглядати як незалежний процесор для побітової обробки. Бітовий процесор виконує свій набір команд, має свій ОЗП, що адресується побітово, і свій пристрій введення/виведення.

Команди, що оперують із бітами, забезпечують пряму адресацію 128 бітів у шістнадцятьох комірках внутрішнього ОЗП (комірки з адресами 20H-2FH) і пряму побітову адресацію регістрів спеціального призначення, адреси яких кратні восьми: P0 (80H), TCON (88H), P1 (90H), SCON (98H), Р2 (A0H), IE (A8H), PЗ (B0H), IP (B8H), PSW (D0H), A (E0H), B (F0H).

Кожен з бітів, що адресуються окремо, може бути встановлений у "лог. 1", скинутий у "лог. 0", інвертований, перевірений. Можуть бути реалізовані переходи: якщо біт встановлений; якщо біт не встановлений; перехід, якщо біт встановлений, із скиданням цього біта; біт може бути перезаписаний у (із) розряд(у) перенесення. Між будь-яким бітом, що адресується прямо, і прапорцем перенесення можуть бути виконані логічні операції "І", "АБО", а результат заноситься у розряд прапорця перенесення. Команди побітової обробки забезпечують реалізацію складних функцій комбінаторної логіки та оптимізацію програм користувача.



Таблиця 4 – Група команд операцій з бітами

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

Мнемокод

КОП

Т

Б

Ц

Операція

1

Скидання перенесення

CLR  C

11000011

1

1

1

(C) 0

2

Скидання біта

CLR  bit

11000010

4

2

1

(b) 0

3

Встановлення перенесення

SETB  C

11010011

1

1

1

(C) 1

4

Встановлення біта

SETB  bit

11010010

4

2

1

(b) 1

5

Інверсія перенесення

CPL  C

10110011

1

1

1

(C)  

6

Інверсія біта

CPL  bit

10110010

4

2

1

(b)  

7

Логічне І перенесення та біта

ANL  C, bit

10000010

4

2

2

(C) (C)    (b)

8

Логічне І перенесення та інверсії біта

ANL  C, /bit

10110000

4

2

2

(C) (C)    ()

9

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

ORL  C, bit

01110010

4

2

2

(C) (C)  V  (b)

10

Логічне АБО перенесення та інверсії біта

ORL  C, /bit

10100000

4

2

2

(C) (C)  V  ()

11

Пересилка біта у перенесення

MOV  C, bit

10100010

4

2

1

(C) (b)

12

Пересилка перенесення у біт

MOV  bit, C

10010010

4

2

2

(b) (C)


  1.  КОМАНДИ ПЕРЕДАЧІ КЕРУВАННЯ

До даної групи команд (таблиця 5) відносяться команди, що забезпечують умовні та безумовні переходи, виклик підпрограм і повернення з них, а також команда пустої операції NOP. У більшості команд використовується пряма адресація, тобто адреса переходу цілком (або його частина) залишається у самій команді передачі керування. Можна виділити три різновиди команд переходів за вказаною розрядністю адреси переходу.

Довгий перехід. Це перехід по всьому адресному простору ПП. В команді міститься повна 16-бітна адреса переходу ad16. Трьохбайтні команди довгого переходу містять у мнемокоді букву L (Long). Всього існує дві такі команди: LJMP – довгий перехід і LCALL – довгий виклик підпрограми. На практиці рідко виникає необхідність переходу в межах всього адресного простору і частіше використовуються скорочені команди переходу, що займають менше місця в пам’яті.

Абсолютний перехід. Це перехід в межах однієї сторінки пам’яті програм розміром 2048 байт. Такі команди містять тільки 11 молодших біт адреси переходу ad11. Команди абсолютного переходу мають формат 2 байти. Початкова буква мнемокоду A (Absolute). При виконанні команди в обчисленій адресі наступної по порядку команди ((РС) = (РС) + 2) одинадцять молодших біт замінюються на ad 11 із тіла команди абсолютного переходу.


Таблиця 5 – Група команд передачі керування

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

Мнемокод

КОП

Т

Б

Ц

Операція

1

Довгий перехід у повному обсязі пам'яті програм

LJMP  ad16

00000010

12

3

2

(PC) ad16

2

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

AJMP  ad11

a10a9a800001

6

2

2

(PC) (PC) + 2

(PC10-0) ad11

3

Короткий відносний перехід всередині сторінки у 256 байт

SJMP  rel

10000000

5

2

2

(PC) (PC) + 2

(PC) (PC) + rel

4

Непрямий перехід

JMP  @A+DPTR

01110011

1

1

2

(PC) (A) + (DPTR)

5

Перехід, якщо акумулятор дорівнює нулю

JZ  rel

01100000

5

2

2

(PC) (PC) + 2,

якщо (A) = 0, тоді (PC) (PC) + rel

6

Перехід, якщо акумулятор не дорівнює нулю

JNZ  rel

01110000

5

2

2

(PC) (PC) + 2,

якщо (A) ≠ 0, тоді (PC) (PC) + rel

7

Перехід, якщо перенесення дорівнює одиниці

JC  rel

01000000

5

2

2

(PC) (PC) + 2,

якщо (C) = 1, тоді (PC) (PC) + rel

8

Перехід, якщо перенесення дорівнює нулю

JNC  rel

01010000

5

2

2

(PC) (PC) + 2,

якщо (C) = 0, тоді (PC) (PC) + rel

9

Перехід, якщо біт дорівнює одиниці

JB  bit, rel

00100000

11

3

2

(PC) (PC) + 3,

якщо (b) = 1, тоді (PC) (PC) + rel

10

Перехід, якщо біт дорівнює нулю

JNB  bit, rel

00110000

11

3

2

(PC) (PC) + 3,

якщо (b) = 0, тоді (PC) (PC) + rel

11

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

JBC  bit, rel

00010000

11

3

2

(PC) (PC) + 3,

якщо (b) = 1, тоді (b) 0 и (PC) (PC) + rel

12

Декремент і перехід, якщо не нуль

DJNZ  Rn, rel

11011rrr

5

2

2

(PC) (PC) + 2, (Rn) (Rn) -1,

якщо (Rn) ≠ 0, то (PC)(PC) +rel

13

Декремент байта, що адресується прямо, і перехід, якщо не нуль

DJNZ  ad, rel

11010101

8

3

2

(PC) (PC) + 3, (ad) (ad) -1,

якщо (ad) ≠ 0, то (PC) (PC) +rel

14

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

CJNE  A, ad, rel

10110101

8

3

2

(PC) (PC) + 3,

якщо (A) ≠ (ad), то (PC)(PC)+rel,

якщо(A)< (ad), то (С) 1,

інакше (C) 0

Продовження таблиці 5

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

Мнемокод

КОП

Т

Б

Ц

Операція

15

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

якщо не дорівнює

CJNE  A, #D8, rel

10110100

10

3

2

(PC) (PC) + 3, якщо (A) ≠ #D8,

то (PC) (PC) + rel, якщо(A) < D8,

то (С) 1, інакше (C) 0

16

Порівняння регістра з константою і перехід,

якщо не дорівнює

CJNE  Rn, #D8, rel

10111rrr

10

3

2

(PC) (PC) + 3, якщо (Rn) ≠ #D8,

то (PC) (PC) + rel,якщо(Rn) < D8,

то (С) 1, інакше (C) 0

17

Порівняння байта в РПД з константою і перехід,

якщо не дорівнює

CJNE  @Ri, #D8, rel

1011011i

10

3

2

(PC) (PC) + 3, якщо РПД(Ri) ≠ #D8,

то (PC) (PC) + rel, якщо РПД(Ri) < #D8,

то (С) 1, інакше (C) 0

18

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

LCALL  ad16

00010010

12

3

2

(PC) (PC) +3, (SP) (SP) + 1,

РПД(SP) (PC7-0), (SP) (SP) + 1,

РПД(SP) (PC8-15), (PC) ad16

19

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

сторінки у 2 Кбайти

ACALL  ad11

a10a9a810001

6

2

2

(PC) (PC) +2, (SP) (SP) + 1,

РПД(SP) (PC7-0), (SP) (SP) + 1,

РПД(SP) (PC15-8), (PC) ad11

20

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

RET

00100010

1

1

2

(PC15-8) РПД(SP),(SP)(SP)-1,

(PC7-0) РПД(SP),(SP) (SP)-1

21

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

RETI

00110010

1

1

2

(PC15-8) РПД(SP),(SP)(SP)-1,

(PC7-0) РПД(SP),(SP) (SP)-1

22

Холоста команда

NOP

00000000

1

1

1

(PC) (PC) + 1

Примітка. Асемблер припускає використання узагальненого імені команд JMP і CALL, які в процесі трансляції замінюються оптимальними за форматом командами переходу (AJMP, SJMP, LJMP) або виклику (ACALL, LCALL).


Відносний перехід. Це короткий відносний перехід дозволяє передати керування в межах від –128 до +127 байт відносно адреси наступної команди (команди, що йде наступною по порядку за командою відносного переходу). Існує одна команда безумовного короткого відносного переходу SJMP (Short). Всі команди умовного переходу використовують даний метод адресації. Відносна адреса переходу rel міститься у другому байті команди.

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

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

Для організації програмних циклів зручно користуватись командою DJNZ. Як лічильник циклів може використовуватись регістр або байт, що адресується прямо (наприклад, комірка РПД).

Команда порівняння CJNE ефективно використовується в процедурах очікування якоїсь події. Наприклад, команда

WAIT:     CJNE  A, P0, WAIT

буде виконуватись доти, поки на лініях порту 0 не встановиться інформація, що збігається із вмістом акумулятора.

Всі команди даної групи, за винятком CJNE, не впливають на прапорці. Команда CJNE встановлює прапорець C, якщо перший операнд виявляється меншим ніж другий.

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


КОНТРОЛЬНІ ЗАПИТАННЯ

  1.  Дайте визначення символічним позначенням:
    1.  Rn
    2.  @Ri
    3.  DPTR
    4.  @A+DPTR
    5.  rel
  2.  Охарактеризуйте роль акумулятора А у командах пересилок
  3.  Перелічить доступні у наборі команд МК-51 арифметичні операції
  4.  Які логічні операції виконуються тільки в акумуляторі?
  5.  Роль бітового процесору в архітектурі МК-51
  6.  Охарактеризуйте довгий та абсолютний переходи по пам’яті

ЛІТЕРАТУРА


САМОСТІЙНА РОБОТА СТУДЕНТІВ

  1.  ОПИС ОКРЕМИХ КОМАНД
  2.  Команда АСАLL <addr 11>

Команда "абсолютний виклик підпрограми" викликає безумовно підпрограму, розміщену за вказаною адресою. При цьому лічильник команд збільшується на 2 для отримання адреси наступної команди, після чого отримане 16-бітове значення РС поміщається в стек (спочатку йде молодший байт), і вміст покажчика стека також збільшується на 2. Адреса переходу одержується за допомогою конкатенації старших біт збільшеного вмісту лічильника команд, трьох бітів старшого байта команди і молодшого байта команди.

Асемблер:

АСАLL <мітка>

Код:

А10 А9 А8 1 0 0 0 1

A7 A6 A5 A4 A3 A2 A1 A0

Час:

2 цикли

Алгоритм:

(pc): = (pc) +2

(sp): = (sp) +1

((sp): = (pc [7-0])

(sp): = (sp) +1

((sp )):=( pc ([15-8])

(pc [10-0]): = A10A9A8 II A7A6A5A4A3A2A1A0,

II-знак конкатенації (зчеплення)

Приклад:

ACALL MT1

;до виконання команди ACALL:

;(sp) = 07H

;мітка МТ1 відповідає адресі:

;0345H, тобто

;(pc) = 0345H

;розташована за адресою 028DH, тобто

;(pс) = 028DH

;після виконання команди:

;(sp) = 09H, (pc) = 0345H,

;ОЗП [08] = 8FH, ОЗП [09] = 02H

  1.  Команда ADD A, <байт джерело>

Ця команда складає вміст акумулятора А з вмістом байта-джерела, залишаючи результат в акумуляторі. При появі перенесення з розрядів 7 і 3, встановлюються прапорці перенесення (С) і додаткового перенесення (АС) відповідно, в протилежному випадку ці прапорці скидаються. При складанні цілих чисел без знака прапорець перенесення "С" вказує на переповнення. Прапорець переповнення (OV) встановлюється, якщо є перенесення з біта 6 і немає перенесення з біта 7, або є перенесення з біта 7 і немає з біта 6, у протилежному випадку прапорець (OV) скидається. При складанні цілих чисел зі знаком прапорець (OV) вказує на від’ємну величину, отриману при додаванні двох додатніх операндів або на додатню суму для двох від’ємних операндів.

Для команди складання дозволені наступні режими адресації байта джерела:

1) регістровий;

2) непрямий;

3) прямий;

4) безпосередній.

1) Асемблер:

ADD A, Rn

n = 0-7

   Код:

0 0 1 0 1 r r r

r r r = 000-111

   Час:

1 цикл

   Алгоритм:

   Приклад:

(A):=(A)+(Rn),

C:=X, OV:=X, AC:=X

ADD A, R6

n=0-7

X=(0 або 1)

;(A)=C3H, R6=AAH

;(A)=6DH, (R6)=AAH, (AC)=0

;(C)=1, (OV)=1

2) Асемблер

ADD A, @Ri

i=0,1

   Код:

0 0 1 0 0 1 1 i

i=0,1

   Час:

1 цикл

   Алгоритм:

   Приклад:

(A):=(A)+((Ri)),

C:=X, OV:=X, AC:=X,

ADD A, @R1

i=0,1

X=0 або 1

;(A)=95H, (R1)=31H,

;(ОЗП[31])=4CH

;(A)=E1H, (ОЗП[31])=4CH,

;(C)=0, (OV)=0, (AC)=1

3) Асемблер:

ADD A, <direct>

   Код:

0 0 1 0 0 1 0 1

direct address

   Час:

1 цикл

   Алгоритм:

   Приклад:

(A):=(A)+(direct)

C:=X,OV:=X, AC:=X

ADD A, 90H

X=0 або 1

;(A)=77H, ;(ОЗП[90])=FFH,

;(A)=76H, ;(ОЗП[90])=FFH,

;(C)=1, (OV)=0, (AC)=1

4) Асемблер:

ADD A,<#data>

   Код:

0 0 1 0 0 1 0 0

#data

   Час:

1 цикл

   Алгоритм:

   Приклад:

(A):=(A)+#data

C:=X, OV:=X, AC:=X

ADD A, #0D3H

X=0 або 1

;(A)=09H,

;(A)=DCH,

;(C)=0,(OV)=0, (AC)=0

  1.  Команда ADDC A, <байт-джерело>

Ця команда ("складання з перенесенням") одночасно складає вміст байта-джерела, прапорець перенесення і вміст акумулятора А, залишаючи результат в акумуляторі. При цьому прапорці перенесення і додаткового перенесення встановлюються, якщо є перенесення з біта 7 або біта 3, і скидаються в протилежному випадку. При складанні цілих чисел без знака прапорець перенесення вказує на переповнення. Прапорець переповнення (OV) встановлюється якщо є перенесення з біта 6 і немає перенесення з біта 7, або є перенесення з біта 7 і немає з біта 6, у протилежному випадку (OV) скидається. При складанні цілих чисел зі знаком (OV) вказує на від’ємну величину, отриману при додаванні двох додатніх операндів або на додатню суму від двох від’ємних операндів.

Для цієї команди дозволені наступні режими адресації байта-джерела:

1) регістровий;

2) непрямий;

3) прямий;

4) безпосередній.

1) Асемблер:

ADDС A.,Rn

n=0-7

   Код:

0 0 1 1 1 r r r

r r r =000-111

   Час:

1 цикл

   Алгоритм:

   Приклад:

(A):=(A)+(Rn)+(С),

C:=X, OV:=X, AC:=X

ADDС A, R3

n=0-7

X=(0 або 1)

;(A)=B2H,R3=99H,

;(C)=1

;(A)=4CH, (R3)=99H, (AC)=0

;(C)=1, (OV)=1

2) Асемблер

ADDC A, @Ri

i=0,1

   Код:

0 0 1 1 0 1 1 i

i=0,1

   Час:

1 цикл

   Алгоритм:

   Приклад:

(A):=(A)+((Ri))+(C),

C:=X, OV:=X, AC:=X,

ADDC A, @R0

i=0,1

X=0 або 1

;(A)=D5H,(R0)=3AH,

;(ОЗП[3A])=1AH,(C)=1

;(A)=F0H, (ОЗП[3A])=1AH,

;(C)=0, (OV)=0, (AC)=1

3) Асемблер:

ADDC A, <direct>

   Код:

0 0 1 1 0 1 0 1

direct address

   Час:

1 цикл

   Алгоритм:

   Приклад:

(A):=(A)+(direct)+(C)

C:=X, OV:=X, AC:=X

ADDC A, 80H

X=0 або 1

;(A)=11H, (ОЗП[80])=DFH,

;(C)=1,

;(A)=F1H,

;(C)=1, (OV)=0, (AC)=1

4) Асемблер:

ADDC A,<#data>

   Код:

0 0 1 1 0 1 0 0

#data

   Час:

1 цикл

   Алгоритм:

   Приклад:

(A):=(A)+(direct)+(C)

C:=X, OV:=X, AC:=X

ADDC A, #55H

X=0 або 1

;(A)=55H, (C)=1

;(A)=AAH,

;(C)=0, (OV)=1, (AC)=0

  1.  Команда AJMP <addr11>

Команда "абсолютний перехід" передає управління за вказаною адресою, яка отримується при конкатенації п'яти старших біт лічильника команд PC (після збільшення його на два), 7-5 бітів коду операції та другого байта команди. Адреса переходу повинна знаходиться всередині однієї сторінки об'ємом 2 Кбайт пам'яті програми, яка визначається п'ятьма старшими бітами лічильника команд.

Асемблер

AJMP <мітка>

Код

А10 А9 А8   0   0   0    0   1

А7  А6  А5 А4 А3 А2 А1 А0

Час

2 цикли

Приклад:

AJMP MT2

;(PC)=028FH

;Мітці МТ2 відповідає адреса 034АН

;(PC)=034AH

  1.  Команда ANL <байт призначення>, <байт джерело>

Команда "логічне "І" для змінних-байтів" виконує операцію логічного "І" над бітами вказаних змінних і поміщає результат в байт призначення. Ця операція не впливає на стан прапорців.

Два операнди забезпечують наступні комбінації шести режимів адресації:

  •  байтом призначення є акумулятор (А):

1) регістровий;

2) прямий;

3) непрямий;

4) безпосередній;

  •  байтом призначення є пряма адреса (Direct):

5) прямий акумуляторний;

6) безпосередній (байт-джерело дорівнює константі).

1) Асемблер:

ANL   A,Rn

де n=0-7

Код

01011 rrr

де rrr=000-111

Час

1 цикл

Приклад

ANL   A,R2

;(A)=FEH,(R2)=C5H

;(A)=C4H,(R2)=C5H

2) Асемблер:

ANL   A,<direct>

Код

01010101 direct adres

Час

1 цикл

Приклад

ANL   A,PSW

;(A)=A3H,(PSW)=86H

;(A)=82H,(PSW)=86H

3) Асемблер

ANL A,@Ri

де i=0,1

Код

01010111

де i=0,1

Час

1 Цикл

Приклад

ANL A,@R0

;(A)=BCH, (ОЗП[35])=47H,

;(R0)=35H,

;(A)=04H, (ОЗП[35])=47H

4) Асемблер

ANL A,#data

Код

01010100 #data8

Час

1 цикл

Приклад

ANL  A,#0DDH

;(A)=36H

;(A)=14H

5) Асемблер

ANL <direct>,A

Код

0 1 0 1 0 0 1 0

direct address

Час

1 цикл

Приклад

AN P2,A

;(A)=55H,(P2)=AAh

;(P2)=00h, A=55h

6) Асемблер

ANL <direct>,#data

Код

0 1 0 1 0 0 1 1

direct address #data8

Час

2 цикли

Приклад

ANL P1,#73h

;(P1)=FFh

;(P1)=73h

Примітка. Якщо команда ANL застосовується для зміни вмісту порту, то значення, що використовується в якості даних порту, буде зчитуватися з "защіпки" порту, а не з виходів БІС.

  1.  Команда ANL C, <біт джерела>

Команда "логічне "І" для змінних-бітів" виконує операцію логічного "І" над зазначеними бітами. Якщо біт-джерело дорівнює "0", то відбувається скидання прапорця перенесення, у протилежному випадку  прапорець перенесення не змінює поточного значення. "/" перед операндом у мові асемблера вказує на те, що в якості значення використовується логічне заперечення адресованого біта, проте сам біт джерела при цьому не змінюється. На інші прапорці ця команда не впливає.

Для операнда-джерела дозволена тільки пряма адресація до бітів.

1) Асемблер:

ANL  C, <bit>

   Код:

10000010

bit address

   Час:

2 цикли

   Приклад:

ANL  C, P1.0

;(С)=1, P1[0]=0

;(C)=0, P1[0]=0

2) Асемблер:

ANL  C, </bit>

   Код:

10110000

bit address

   Час:

2 цикли

   Приклад:

ANL  C, /AC

;(С)=1, (AC)=0

;(С)=1, (AC)=0

  1.  Команда CJNE <байт призначення>, <байт джерело>, <зміщення>

Команда "порівняння і перехід, якщо не дорівнює" порівнює значення перших двох операндів і виконує розгалуження, якщо операнди не рівні. Адреса переходу (розгалуження) обчислюється за допомогою складання значення (зі знаком), зазначеного в останньому байті команди, з вмістом лічильника команд після збільшення його на три.

Прапорець перенесення "С" встановлюється в "1", якщо значення цілого без знака <байта призначення> менше, ніж значення цілого без знака <байта джерела>, в протилежному випадку перенесення скидається (якщо значення операндів рівні, прапорець перенесення скидається). Ця команда не впливає на операнди.

Операнди, що стоять в команді, забезпечують комбінації чотирьох режимів адресації:

  •  якщо байтом призначення є акумулятор:

1) прямий,

2) безпосередній;

  •  якщо байтом призначення є комірка ОЗП з непрямою адресацією:

3) безпосередній до регістрового,

4) безпосередній до непрямого;

1) Асемблер:

CJNE A, <direct>, мітка>

   Код:

10110101

direct address                 rel8

   Час:

2 цикли

   Приклад:

CJNE A, P2, MT3

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

MT3: CLR  A

;(A)=97h, (P2)=F0h, (C)=0

;(A)=97h, (P2)=F0h, (C)=1

;Адреса, що відповідає мітці МТ3 обчислюється, як

;(PC):=(PC)+3+(rel8)

2) Асемблер:

CJNE A, #data, <мітка>

   Код:

10110100

#data8                             rel8

   Час:

2 цикли

   Приклад:

CJNE A, #0BFh, MT4

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

MT4: INC A

;(A)=FCh, C=1

;(A)=FDh, C=0

;(PC):=(PC)+3+(rel8)

3) Асемблер:

CJNE Rn, #data, <мітка>

де n=0–7

   Код:

10111   rrr

#data8                             rel8

   Час:

2 цикли

   Приклад:

CJNE A, #81h, MT5

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

MT5: NOP

;(R7)=80H, (C)=0

;(R7)=80H,(C)=1,

;(PC):=(PC)+3+(rel8)

4) Асемблер:

CJNE @Ri,#data,<мітка>

де i=0,1

   Код:

1011011i

#data8                            rel8

   Час:

2 цикли

   Приклад:

CJNE @R0,#29,MT6

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

MT6: DEC R0

;(R0)=41h, (C)=1, (ОЗП[41])=57H

;(ОЗП[41])=57H, (C)=0

; (PC):=(PC)+3+(rel8)

  1.  Команда CLR A

Команда "скидання акумулятора" скидає (обнуляє) вміст акумулятора А. На прапорці команда не впливає.

Асемблер:

CLR A

Код:

11100100

Час:

1 цикл

Приклад:

CLR A

;(А)=6Dh, (C)=0, (AC)=1

;(А)=00h, (C)=0, (AC)=1

  1.  Команда CLR <bit>

Команда "скидання біта" скидає вказаний біт в нуль. Ця команда працює з прапорцем перенесення "С" або будь-яким бітом з прямою адресацією.

1) Асемблер:

CLR C

   Код:

11000011

   Час:

1 цикл

   Приклад:

CLR C

;(C)=1

;(C)=0

2) Асемблер:

СLR <bit>

   Код:

11000010

bit address

   Час:

1 цикл

   Приклад:

CLR P1.3

;(P1)=5EH(01011110B)

;(P1)=56H(01010110B)

  1.  Команда CPL A

Команда "інверсія акумулятора" кожен біт акумулятора інвертує (змінює на протилежний). Біти, які містили "одиниці", після цієї команди будуть містити "нулі", і навпаки. На прапорці ця операція не впливає.

Асемблер:

CPL A

Код:

11110100

Час:

1 цикл

Приклад:

CPL A

;(А)=65H(01100101B)

;(A)=9AH(10011010B)

  1.  Команда CPL <bit>

Команда "інверсія біта" інвертує (змінює на протилежне значення) вказаний біт. Біт, який був "одиницею", змінюється в "нуль" і навпаки. Команда CPL може працювати з прапорцем перенесення або з будь-яким бітом, який адресується прямо. На інші прапорці команда не впливає.

1) Асемблер:

CPL  <bit>

   Код:

10110010

bit address

   Час:

1 цикл

   Приклад:

CPL P1.1

CPL P1.3

;(P1)=39H(00111001B)

;(P1)=33H(00110011B)

2) Асемблер:

СPL C

   Код:

10110011

   Час:

1 цикл

   Приклад:

CPL C

;(C)=0, (AC)=1, (OV)=0

;(C)=1,(AC)=1,(OV)=0

Примітка. Якщо ця команда використовується для зміни інформації на виході порту, значення, яке використовується як вихідні дані, зчитується з "защіпки" порту, а не з виводів ВІС.

  1.  Команда DA A

Команда "десяткова корекція акумулятора для складання" впорядковує 8-бітову величину в акумуляторі після виконаної раніше команди складання двох змінних (кожна в упакованому двійково-десятковому форматі). Для виконання складання може використовуватись будь-яка з типів команд ADD або ADDC. Якщо значення бітів 3-0 акумулятора (А) перевищує 9 (ХХХХ 1010-ХХХХ 1111) або, якщо прапорець АС дорівнює "1", то до вмісту (А) додається 06, при цьому отримується відповідна двійково-десяткова цифра в молодшому півбайті. Внутрішнє побітове складання встановлює прапорець перенесення, якщо перенесення з поля молодших чотирьох біт поширюється через всі старші біти, а в протилежному випадку  не змінює прапорець перенесення. Якщо після цього прапорець перенесення дорівнює "1", або якщо значення чотирьох старших біт (7-4) перевищує 9 (1010 ХХХХ - 1111 ХХХХ), значення цих старших біт збільшується на 6, створюючи відповідну двійково-десяткову цифру у старшому півбайті. І знову при цьому прапорець перенесення встановлюється, якщо перенесення виходить із старших бітів, але не змінюється в протилежному випадку. Таким чином, прапорець перенесення вказує на те, що сума двох вихідних двійково-десяткових змінних більша, ніж 100. Ця команда виконує десяткове перетворення за допомогою додавання 06, 60, 66 з вмістом акумулятора в залежності від початкового стану акумулятора і слова стану програми (PSW).

Асемблер:

DA    A

Код:

11010100

Час:

1 цикл

Приклади:

а) ADDC  A,R3

   DA  A

б) ADD  A,#99H

   DA  A

;(А)=56H,(R3)=67H,(C)=1

;(A)=24H, (R3)=67H, (C)=1

;(A)=30H,(C)=0

;(A)=29,(C)=1

Примітка. Команда DA  A не може просто перетворити шістнадцяткове значення в акумуляторі в двійково-десяткове представлення, і не застосовується, наприклад, для десяткового віднімання.

  1.  Команда DEC <байт>

Команда "декремент" виконує віднімання "1" із зазначеного операнда. Початкове значення 00H перейде в 0FFH. Команда DEC не впливає на прапорці. Цією командою допускається чотири режими адресації операнда:

1) до акумулятора

2) регістровий

3) прямий

4) непрямий

1) Асемблер

DEC  А

Код

00010100

Час

1 цикл

Приклад

DEC  A

;(А)=11H, (C)=1, (AC)=1

;(A)=10H, (C)=1,(AC)=1

2) Асемблер

DEC  Rn

де n = 0-7

Код

00011 r r r

де r r r = 000-111

Час

1 цикл

Приклад

DEC @R1

DEC R1

DEC @R1

;(R1)=7FH

;(ОЗП[7F])=40H, (ОЗП[7F])=00H

;(R1)=7EH,

;(ОЗП[7F])=3FH, (ОЗП[7FH])=FFH

3) Асемблер

DEC <direct>

Код

00010101

direct address

Час

1 цикл

Приклад

DEC SCON

;(SCON)=A0H, (C)=1, (AC)=1

;(SCON)=9FH, (C)=1,  (AC)=1

4) Асемблер

DEC @Ri

де i=0, 1

Код

0001011i

Час

1 цикл

Приклад

DEC @R1

DEC R1

DEC @R1

;(R1)=7FH,

;(ОЗП[7F])=40H, (ОЗП[7F])=00H

;(R1)=7EH,

;(ОЗП[7F])=3FH, (ОЗП[7F])=FFH

Примітка. Якщо ця команда використовується для зміни інформації на виході порту, значення, яке використовується як вихідні дані, зчитується з "защіпки" порту, а не з виводів ВІС.

  1.  Команда DIV AB

Команда "ділення" ділить 8-бітове ціле без знаку з акумулятора А на 8-бітове ціле без знаку в регістрі В. Акумулятору присвоюється ціла частина частки (старші розряди), а регістру В - залишок. Прапорці перенесення (С) та переповнення (OV) скидаються. Якщо (А)<(В), то прапорець додаткового перенесення (АС) не скидається. Прапорець перенесення скидається в будь-якому випадку.

Асемблер

DIV AB

Код

10000100

Час

4 цикли

Приклад

Нехай акумулятор містить число 251 (0FBH или 11111011В),

а регістр В - число 18 (12H или 00010010В),

Після виконання команди

DIV AB

в акумуляторі буде число 13 (0DH або 00001101В),

а в регістрі В - число 17 (11H або 00010001В),

оскільки 251=(13*18)+17.

Прапорці С і OV будуть скинуті.

Примітка. Якщо В містить 00, то після команди DIV вміст акумулятора А і регістру В будуть не визначені. Прапорець перенесення скидається, а прапорець переповнення встановлюється в "1".

  1.  Команда DJNZ <байт>, <зміщення>

Команда "декремент і перехід, якщо дорівнює нулю" виконує віднімання "1" з вказаної комірки і здійснює розгалуження за обчислюваною адресою, якщо результат не дорівнює нулю. Початкове значення 00H перейде в 0FFH. Адреса переходу (розгалуження) обчислюється складанням значення зміщення (зі знаком), зазначеного в останньому байті команди, з вмістом лічильника команд, збільшеним на довжину команди DJNZ. На прапорці ця команда не впливає і допускає такі режими адресації:

1) регістровий;

2) прямий.

1) Асемблер:

DJNZ  Rn,<мітка>

де n=0-7

   Код:

11011rrr

re18

   Час:

2 цикли

   Приклад:

LAB4:    CPL  P1.7

              DJNZ R2, LAB4

;(R2)=08h, (P1)=FFH (11111111B)

;(R2)={07-00}

;ця послідовність команд

;переключає Р1.7 ;вісім разів

;і призводить до виникнення

;чотирьох імпульсів на виводі ВІС,

;який відповідає біту Р1.7

2) Асемблер:

DJNZ  <direct>, <мітка>

   Код:

11010101

direct addres     re18

   Час:

2 цикли

   Приклад:

DJNZ  40H, LAB1

DJNZ  50H, LAB2

DJNZ  60H, LAB3

    ...

LAB1: CLR  A

     ...

LAB2: DEC  R1

;(ОЗП[40])=01H, (OЗУ[50])=80H,

;(ОЗП[60])=25H

;(ОЗП[40]):=00H

;(ОЗП[50]):=7FH

;(ОЗП[60]):=25H

;здійснюється перехід на мітку LAB2

Примітка. Якщо команда DJNZ використовується для зміни виходу порту, значення, яке використовується як операнд, зчитується з "защіпки" порту, а не з виводів ВІС.

  1.  Команда INC <байт>

Команда "інкремент" виконує додавання "1" до зазначеної змінної і не впливає на прапорці. Початкове значення 0FFH перейде в 00H. Ця команда допускає 4 режими адресації:

1) до акумулятора;

2) регістровий;

3) прямий;

4) непрямий;

1) Асемблер :

INC  A

   Код:

00000100

   Час:

1 цикл

   Приклад:

INC  A

;(A)=1FH, (AC)=0

;(A)=20H, (AC)=0

2) Асемблер :

INC  Rn

   Код:

00001rrr

де rrr=000-111

   Час:

1 цикл

   Приклад:

INC   R4

;(R4)=FFH, (C)=0, (AC)=0

;(R4)=00H, (C)=0, (AC)=0

3) Асемблер :

INC  <direct>

   Код:

00000101

[direct address]

   Час:

1 цикл

   Приклад:

INC  43H

;(ОЗП[43])=22H

;(ОЗП[43])=23H

4) Асемблер :

INC  @Ri

де i=0,1

   Код:

0000011i

де i=0,1

   Час:

1 цикл

   Приклад:

INC  @R1

;(R1)=41H, (ОЗП[41])=4FH, (AC)=0

;(R1)=41H, (ОЗП[41])=50H, (AC)=0

Примітка. При використанні команди INC для зміни вмісту порту, величина, використовувана як операнд, зчитується з "защіпки" порту, а не з виводів ВІС.

  1.  Команда INC DPTR

Команда "інкремент покажчика даних" виконує інкремент (додавання "1") вмісту 16-бітового покажчика даних (DPTR). Додавання "1" здійснюється до 16 бітів, причому переповнення молодшого байта покажчика даних (DPL) з FFH в 00H призводить до інкременту старшого байта покажчика даних (DPH). На прапорці ця команда не впливає.

Асемблер :

INC  DPTR

Код:

10100011

Час:

2 цикли

Приклад:

INC   DPTR

INC   DPTR

INC   DPTR

;(DPH)=12H, (DPL)=FEH

;(DPH)=13H, (DPL)=01H

  1.  Команда JB <bit>, <rel8>

Команда "перехід, якщо біт встановлений" виконує перехід за адресою розгалуження, якщо зазначений біт дорівнює "1", в протилежному випадку виконується наступна команда. Адреса розгалуження обчислюється за допомогою додавання відносного зміщення зі знаком у третьому байті команди (rel8) до вмісту лічильника команд після додавання до нього 3. Біт, який перевіряється, не змінюється. Ця команда на прапорці не впливає.

Асемблер :

JB (bit), <мітка>

Код:

00100000

bit address     rel8

Час:

2 цикли

Приклад:

               JB ACC.2, LAB5

                    . . .

LAB5:     INC A

;(A)=96H  (10010110B)

  1.  Команда JBC <bit>, <rel8>

Команда "перехід, якщо біт встановлений і скидання цього біта", виконує розгалуження за обчислюваною адресою, якщо біт дорівнює "1". В протилежному випадку виконується наступна за JBC команда. У будь-якому випадку вказаний біт скидається. Адреса переходу обчислюється складанням відносного зміщення зі знаком у третьому байті команди (rel8) і вмісту лічильника команд після додавання до нього 3. Ця команда не впливає на прапорці.

Асемблер:

JBC <bit>,<мітка>

Код:

00010000

bit address     rel8

Час:

2 цикли

Приклад:

JBC ACC.3,LAB6

JBC ACC.2,LAB7

;(A)=76h (0111 0110b)

;Переходу на LAB6 немає, тому що (A[3])=0

;(A)=72h (01110010b) і перехід на адресу, ;яка відповідає мітці LAB7

Примітка. Якщо ця команда використовується для перевірки біт порту, то значення, що використовується як операнд, зчитується з "защіпки" порту, а не з виводів ВІС.

  1.  Команда JC <rel8>

Команда "перехід, якщо перенесення встановлене" виконує розгалуження за адресою, якщо прапорець перенесення дорівнює "1", в протилежному випадку виконується наступна команда. Адреса розгалуження обчислюється за допомогою додавання відносного зміщення зі знаком у другому байті команди (rel8) і вмісту лічильника команд, після додавання до нього 2. Ця команда не впливає на прапорці.

Асемблер:

JC  <мітка>

Код:

01000000

rel8

Час:

2 цикли

Приклад:

           JC LAB8

           CPL C

LAB8: JC LAB9

               ......

LAB9: NOP

;(C)=0

;немає переходу на мітку LAB8

;(C):=1

;перехід на мітку LAB9, бо (C)=1

  1.  Команда JMP @ + DPTR

Команда "непрямий перехід" складає восьмибітовий вміст акумулятора без знаку з 16-бітовим покажчиком даних (DPTR) і завантажує отриманий результат лічильник команд, вміст якого є адресою для вибірки наступної команди. 16-бітове складання виконується за модулем 216, перенесення з молодших восьми біт поширюється на старші біти програмного лічильника. Вміст акумулятора і покажчика даних не змінюється.

Асемблер:

JMP  @A+DPTR

Код:

01110011

Час:

2 цикли

Приклад:

JMP  @A+DPTR

;(PC)=034Eh,

;(A)=86h,

;(DPTR)=0329h

;(PC)=03AFh,

;(A)=86h,

;(DPTR)=0329h

  1.  Команда JNB <bit>, <rel8>

Команда "перехід, якщо біт не встановлений" виконує розгалуження за адресою, якщо зазначений біт дорівнює "0", в протилежному випадку виконується наступна команда. Адреса розгалуження обчислюється за допомогою складання відносного зміщення зі знаком у третьому байті команди (rel8) і вмісту лічильника команд, після додавання до нього 3. Біт, який перевіряється, не змінюється. Ця команда не впливає на прапорці.

Асемблер:

JNB <bit>,<мітка>

Код:

00110000

bit address rel8

Час:

2 цикли

Приклад:

             JNB P1.3, LAB10

             JNB ACC.3, LAB11

                  .......

LAB11: INC A

;(P2)=CAH

;(11001010b),

;(A)=56h (0101 0110b)

;немає переходу на LAB10

;перехід на мітку LAB11

  1.  Команда JNC <rel8>

Команда "перехід, якщо перенесення не встановлено" виконує розгалуження за адресою, якщо прапорець перенесення дорівнює "0", в протилежному випадку виконується наступна команда. Адреса розгалуження обчислюється за допомогою відносного зміщення зі знаком у другому байті команди (rel8) і вмісту лічильника команд, після додавання до нього 2. Біт, який перевіряється, не змінюється. Ця команда не впливає на прапорці.

Асемблер:

JNC <мітка>

Код:

01010000

rel8

Час:

2 цикли

Приклад:

              JNC  LAB12

              CPL  C

LAB12:  JNC  LAB13

;C=1

;немає переходу на LAB12

;перехід на  мітку LAB13

  1.  Команда JNZ <rel8>

Команда "перехід, якщо вміст акумулятора не дорівнює нулю" виконує розгалуження за адресою, якщо хоча б один біт акумулятора дорівнює "1", в протилежному випадку виконується наступна команда. Адреса розгалуження обчислюється складанням відносного зміщення зі знаком у другому байті команди (rel8) і вмісту лічильника команд (PC) після додавання до нього 2. Вміст акумулятора не змінюється. Ця команда на прапорці не впливає.

Асемблер:

JNZ <мітка>

Код:

01110000

rel8

Час:

2 цикли

Приклад:

             JNC LAB14

             INC A

LAB14: JNZ LAB15

                ......

LAB15: NOP

;немає переходу на LAB14

;перехід  на мітку LAB15

  1.  Команда JZ <rel8>

Команда "перехід, якщо вміст акумулятора дорівнює "0" виконує розгалуження за адресою, якщо всі біти акумулятора рівні "0", в протилежному випадку виконується наступна команда. Адреса розгалуження обчислюється складанням відносного зміщення зі знаком у другому байті команди (rel8) і вмістом лічильника команд після додавання до нього 2. Вміст акумулятора не змінюється. Ця команда на прапорці не впливає.

Асемблер:

JZ <мітка>

Код:

01100000

rel8

Час:

2 цикли

Приклад:

             JZ LAB16

             DEC A

LAB16: JZ LAB17

                ......

LAB17: CLR A

;немає переходу на LAB16

;перехід  на мітку LAB17

  1.  Команда LCALL <addr16>

Команда "довгий виклик" викликає підпрограму, що знаходиться за вказаною адресою. За командою LCALL до лічильника команд (PC) додається 3 для отримання адреси наступної команди і після цього отриманий 16-бітовий результат поміщається в СТЕК (спочатку йде молодший байт, а потім  старший), а вміст покажчика стека (SP) збільшується на 2. Потім старший і молодший байти лічильника команд завантажуються відповідно другим і третім байтами команди LCALL. Виконання програми продовжується командою, яка знаходиться за отриманою адресою. Підпрограма, таким чином, може починатися в будь-якому місці адресного простору пам'яті програм обсягом до 64 Кбайт. Ця команда на прапорці не впливає.

Асемблер:

LCALL <мітка>

Код:

00010010

addr[15-8]   addr[7-0]

Час:

2 цикли

Приклад:

LCALL PRN

;мітці по PRN відповідає адреса 1234H

;за адресою 0126H

;знаходиться команда LCALL

;(SP)=09H, (PC)=1234H,

;(ОЗП[08])=26H, (ОЗП[09])=01H

  1.  Команда LJMP <addr16>

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

Асемблер:

LJMP <мітка>

Код:

00000010

addr[15-8]   addr[7-0]

Час:

2 цикли

  1.  Команда MOV <байт призначення>, <байт джерела>

Команда "переслати змінну-байт" пересилає змінну-байт, зазначену в другому операнді в іншу комірку, вказану в першому операнді. Ця команда на прапорці та інші регістри не впливає. Вміст байта-джерела не змінюється. Ця команда допускає 15 комбінацій адресації байта-джерела і байта призначення.

1) Асемблер

MOV A,Rn

n=0-7

   Код:

11101rrr

rrr=000-111

   Час:

1 цикл

   Алгоритм:

(A):=(Rn)

   Приклад:

MOV A,R4

;(A)=FAh, (R4)=93h

;(A)=FAh, (R4)=93h

2) Асемблер

MOV A,<direct>

   Код:

11100101

direct address

   Час:

1 цикл

   Алгоритм:

(A):=(direct)

   Приклад:

MOV A, R4

;(A)=93h, (RAM[40])=10h, R0=40h

;(A)=93h, (RAM[40])=10h, R0=40h

3) Асемблер

MOV A,@Ri

i=0,1

   Код:

1110010i

   Час:

1 цикл

   Алгоритм:

(A):=((Ri))

   Приклад:

MOV A,@R0

;(A)=10h, (RAM[41])=CAh, R0=41h

;(A)=CAh, (RAM[41])=CAh, R0=41h

4) Асемблер

MOV A,#data

i=0,1

   Код:

11100100

#data8

   Час:

1 цикл

   Алгоритм:

(A):=<#data8>

   Приклад:

MOV A,#37h

;(A)=c9h

;(A)=37h

5) Асемблер

MOV Rn,A

n=0-7

   Код:

11111rrr

rrr=0-7

   Час:

1 цикл

   Алгоритм:

(Rn):=(A)

   Приклад:

MOV R0, A

;(A)=38h, (R0)=42h

;(A)=38h, (R0)=42h

6) Асемблер

MOV Rn,<direct>

n=0-7

   Код:

10101rrr

rrr=0-7

   Час:

2 цикл

   Алгоритм:

(Rn):=<direct>

   Приклад:

MOV R0,P2

;(R0)=38h, (P2)=0F2h

;(R0)=0F2h

7) Асемблер

MOV Rn,#data

n=0-7

   Код:

01111rrr

rrr=0-7

   Час:

1 цикл

   Алгоритм:

(Rn):=#data

   Приклад:

MOV R0,#AAh

;(R0)=38h

;(R0)=0AAh

8) Асемблер

MOV <direct>,A

   Код:

11110101

, direct address

   Час:

1 цикл

   Алгоритм:

(direct):=(A)

   Приклад:

MOV P0,A

;(P0)=38h, (A) = 10h

;(P0)=10h

9) Асемблер

MOV <direct>,Rn

   Код:

10001rrr

   Час:

2 цикл

   Алгоритм:

(direct):=(Rn)

   Приклад:

MOV P0,A

;(P0)=38h, (A) = 10h

;(P0)=10h

10) Асемблер

MOV <direct>,<direct>

     Код:

10000101

direct address, direct address

     Час:

2 цикл

     Алгоритм:

(direct):=(direct)

     Приклад:

MOV 48h,45h

;(RAM[45])=33h, (RAM[48]) = 10h

;(RAM[48])=33h

11) Асемблер

MOV <direct>,@Ri

i=0,1

     Код:

1000011i

direct address

     Час:

2 цикл

     Алгоритм:

(direct):=((Ri))

     Приклад:

MOV 51h,@R1

;(R1)=49h, (RAM[49]) = 10h

;(RAM[51])=49h

12) Асемблер

MOV <direct>,#data

     Код:

10000101

direct address, direct address

     Час:

2 цикл

     Алгоритм:

(direct):=(direct)

     Приклад:

MOV 48,45

;(RAM[45])=33h; (RAM[48]) = 10h

;(RAM[48])=33h

13) Асемблер

MOV <direct>,#data

     Код:

01110101

direct address, data

     Час:

2 циклa

     Алгоритм:

(direct):=#data

     Приклад:

MOV 45h,#10h

;(RAM[45h])=33h

;(RAM[45h])=10h

14) Асемблер

MOV @Ri,<direct>

     Код:

1010011i

direct address

     Час:

1 циклa

     Алгоритм:

((Ri)):=(direct)

     Приклад:

MOV @R0,<direct>

;(R0)=51h, (RAM[51h])=10, (P0)=5

;(RAM[51h])=5h

15) Асемблер

MOV @Ri,#data

     Код:

0111011i

data

     Час:

1 циклa

     Алгоритм:

((Ri)):=#data

     Приклад:

MOV @R0,#37

;(R0)=51h, (RAM[51h])=10

;(RAM[51h])=37

  1.  Команда MOV <біт призначення>, <біт джерела>

Команда "переслати біт даних" бітову змінну, зазначену в другому байті, копіює в розряд, який вказаний в першому операнді. Одним з операндів має бути прапорець перенесення С, а іншим може бути будь-який біт, до якого можлива пряма адресація.

1) Асемблер:

   Код:

   Час:

   Алгоритм:

   Приклад:

MOV  C, <bit>

10100010

1 цикл

(С):=(bit)

MOV  C, Р3.0

MOV  C, P3.3

MOV  C, P3.7

bit address

;(C)=0, (P3)=D5h (11010101b)

;C:=1

;C:=0

;C:=1

2) Асемблер:

   Код:

   Час:

   Алгоритм:

   Приклад:

MOV  <bit>, C

10010010

2 цикли

MOV  P0.1, C

MOV  P0.2, C

MOV  P0.3, С

bit address

;(C)=1, (P0)=20h (00100000b)

;(C)=1, (P0)=2Eh (00101110b)

  1.  Команда MOV DPTR, # data16

Команда "завантажити покажчик даних 16-бітовою константою" завантажує покажчик даних DPTR 16-бітової константою, зазначеною у другому і третьому байтах команди. Другий байт команди завантажується в старший байт покажчика даних (DPH), а третій байт - в молодший байт покажчика даних (DPL). Ця команда на прапорці не впливає і є єдиною командою, яка одночасно завантажує 16 біт даних.

Асемблер:

Код:

Час:

Алгоритм:

Приклад:

MOV  DPTR, #<data16>

10010000

2 цикли

(DPTR):= #data [15-8], причому

DPH:= #data [15-8],

DPL:=  #data [7-0]

MOV DPTR, #1234h

#data [15-8]  #data [7-0]

;(DPTR)=01FDh

;(DPTR)=1234h

;(DPH)=12h

;(DPL)=34h

  1.  Команда MOVC A, @ A + (<R16>)

<R16> - 16-розрядний регістр.

Команда "переслати байт з пам'яті програм" завантажує акумулятор байтом коду або константою з пам'яті програми. Адреса зчитуваного байта обчислюється як сума 8-бітового вихідного вмісту акумулятора без знака та вмісту 16-бітового регістра. У якості 16-бітового регістра може бути:

1) покажчик даних DPTR,

2) лічильник команд PC.

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

1) Асемблер:

   Код:

   Час:

   Алгоритм:

   Приклад:

MOVС  A,@A+DPTR

10010011

2 цикли

(A):=((A)+ (DPTR))

MOVС  A,@A+DPTR

;(A)=1BH, (DPTR)=1020H

;(ПЗУ[103B])=48H

;(A)=48H, (DPTR)=1020H

2) Асемблер:

   Код:

   Час:

   Алгоритм:

   Приклад:

MOVС  A,@A+PC

10000011

2 цикли

(A):=((A)+ (PC))

MOVС  A,@A+DPTR

;(A)=FAH, (PC)=0289H

;(ПЗУ[0384])=9BH

;(A)=9BH, (PC)=028AH

  1.  Команда MOVX <байт приймача>, <байт джерела>

Команда "переслати в зовнішню пам'ять (із зовнішньої пам'яті) даних" пересилає дані між акумулятором та байтом зовнішньої пам'яті даних. Є два типи команд, які відрізняються тим, що забезпечують 8бітову або 16-бітову непряму адресу до зовнішнього ОЗП даних.

У першому випадку вміст R0 або R1 в поточному банку регістрів забезпечує 8-бітову адресу, яка мультиплексує з даними порту Р0. Для розширення дешифрування введення/виведення або адресації невеликого масиву ОЗП досить восьми біт адресації. Якщо застосовуються ОЗП, трохи більше ніж 256 байт, то для фіксації старших бітів адреси можна використовувати будь-які інші виходи портів, які переключаються командою, яка стоїть перед командою MOVX.

У другому випадку, при виконанні команди MOVX покажчик даних DPTR генерує 16-бітову адресу. Порт Р2 виводить старші 8 біт адреси (DPH), а порт Р0 мультиплексує молодші 8 біт адреси (DPL) з даними.

Ця форма є ефективною при доступі до великих масивів даних (до 64К), оскільки для встановлення портів виводу не потрібно додаткових команд.

1) Асемблер:

   Код:

   Час:

   Алгоритм:

   Приклад:

MOVX A,@Ri

1110001i

2 цикли

(A):=((Ri))

MOVX A,@R0

де i=0,1

;(A)=32H, (R0)=83H,

;комірка зовнішньої ОЗП

;за адресою 83H містить B6H

;(ПЗУ[103B])=48H

;(A)=B6H, (R0)=83H

2) Асемблер:

   Код:

   Час:

   Алгоритм:

   Приклад:

MOVX A,@DPTR

11100000

2 цикли

(A):=((DPTR))

;(A)=5CH

;(DPTR)=1ABEH

;комірка ОЗП за адресою 1ABEH містить 72H

  1.  Команда ORL <байт призначення>, <байт джерела>

Команда "логічне "АБО" для змінних-байтів" виконує операцію логічного "АБО" над бітами вказаних змінних, записуючи результат в байт призначення. Ця команда на прапорці не впливає. Допускається 6 комбінацій режимів адресації:

  •  якщо байтом призначення є акумулятор:

1) регістровий;

2) прямий;

3) непрямий;

4) безпосередній;

  •  якщо байтом призначення є пряма адреса:

5) до акумулятора;

6) до константи;

1) Асемблер:

ORL A, Rn

де n=0-7

   Код:

01001 rrr

де rrr=000-111

   Час:

1 цикл

   Приклад:

ORL A,R5

;(A)=15H, (R5)=6CH

;(A)=7DH, (R5)=6CH

2) Асемблер:

ORL A, <direct>

   Код:

01000101

direct adress

   Час:

1 цикл

   Приклад:

ORL A,PSW

;(A)=84H, (PSW)=C2H

;(A)=C6H, (PSW)=C2H

3) Асемблер:

ORL A, @Ri

де i=0,1

   Код:

0100011i

   Час:

1 цикл

   Приклад:

ORL A,@R0

;(A)=52H, (R0)=6DH, (ОЗП[6D])=49H

;(A)=5BH, (ОЗП[6D])=49H

4) Асемблер:

ORL A, #<data>

   Код:

01000100

#data8

   Час:

1 цикл

   Приклад:

ORL A,#0AH

;(A)=F0H

;(A)=FAH

5) Асемблер:

ORL (direct),A

   Код:

01000010

direct adress

   Час:

1 цикл

   Приклад:

ORL IP,A

;(A)=34H, (IP)=23H

;(IP)=37H, (A)=34H

6) Асемблер:

ORL (direct), #<data>

   Код:

01000011

direct adress  #data8

   Час:

2 цикли

   Приклад:

ORL P1,#0C4H

;(P1)=00H

;(P1)=11000100B (C4H)

Примітка. Якщо команда використовується для роботи з портом, величина, використовувана в якості вихідних даних порту, зчитується з "защіпки" порту, а не з виводів ВІС.

  1.  Команда ORL C, <біт джерела>

Команда "логічне "АБО" для змінних-бітів" встановлює прапорець перенесення С, якщо булева величина дорівнює логічній "1", у протилежному випадку встановлює прапорець С в "0". Косий дріб ("/") перед операндом на мові асемблера вказує на те, що в якості операнда використовується логічне заперечення значення біта, що адресується, але сам біт джерела не змінюється. Ця команда на інші прапорці не впливає.

1) Асемблер:

ORL C, <bit>

   Код:

01110010

bit adress

   Час:

2 цикли

   Приклад:

ORL C,P1.4

;(C)=00H, (P1)=53H (01010011B)

;(C)=01H, (P1)=53H (01010011B)

2) Асемблер:

ORL C, /<bit>

   Код:

10100000

bit adress

   Час:

2 цикли

   Приклад:

ORL C,/2A

;(C)=00H, (ОЗП[25])=39H (00111001B)

;(C)=01H, (ОЗП[25])=39H (00111001B)

  1.  Команда POP <direct>

Команда "читання зі стека" зчитує вміст комірки, яка адресується за допомогою покажчика стека, в комірку ОЗП, яка адресується прямо, при цьому покажчик стека зменшується на одиницю. Ця команда не впливає на прапорці і часто використовується для читання зі стека проміжних даних.

Асемблер:

POP <direct>

Код:

11010000

direct adress

Час:

2 цикли

Приклад:

POP DPH

POP DPL

POP SP

;(SP)=32H, (DPH)=01H, (DPL)=ABH

;(ОЗП[32])=12H, (ОЗП[31])=56H

;(ОЗП[30])=20H

;(SP)=30H, (DPH)=12H, (DPL)=56H

;(ОЗУ[32])=12H, (ОЗУ[31])=56H

;(SP)=20H, (ОЗУ[30])=20H

  1.  Команда PUSH <direct>

Команда "запис у стек" збільшує покажчик стека на одиницю і після цього вміст зазначеної змінної, що адресується прямо, копіюється в комірку внутрішнього ОЗП, що адресується за допомогою покажчика стека. На прапорці ця команда не впливає і використовується для запису проміжних даних у стек.

Асемблер:

PUSH <direct>

Код:

11000000

direct adress

Час:

2 цикли

Приклад:

PUSH DPL

PUSH DPH

;(SP)=09H, (DPTR)=1279H

;(SP)=0BH, (DPTR)=1279H

;(ОЗП[0A])=79H, (ОЗП[OB])=12H

  1.  Команда RET

Команда "повернення з підпрограми" послідовно вивантажує старший і молодший байти лічильника команд зі стека, зменшуючи покажчик стека на 2. Виконання основної програми зазвичай триває за адресою команди, наступної за ACALL або LCALL. На прапорці ця команда не впливає.

Асемблер:

RET

Код:

00100010

Час:

2 цикли

Приклад:

RET

; (SP)=0DH,

;(ОЗП[0C]=93H, (ОЗП[0D])=02H

;(SP)=0BH, (PC)=0293H

  1.  Команда RETI

Команда "повернення з переривання" вивантажує старший і молодший байти лічильника команд зі стека і встановлює "логіку переривань", дозволяючи прийом інших переривань з рівнем пріоритету, рівним рівню пріоритету щойно відпрацьованого переривання. Покажчик стека зменшується на 2. Слово стан програми (PSW) не відновлюється автоматично. Виконання основної програми триває з команди, наступної за командою, на якій відбувся перехід до виявлення запиту на переривання. Якщо при виконанні команди RETI виявлено переривання з таким самим або меншим рівнем пріоритету, то одна команда основної програми встигає виконатися до обробки такого переривання.

Асемблер:

RETI

Код:

00110010

Час:

2 цикли

Приклад:

RETI

;(SP)=0BH,

;(ОЗП[0A])=2AH, (ОЗП[0B]=03H

;(PC)=УУУУH, де У=0-FH

;(SP)=09H, (PC)=032AH

  1.  Команда RL A

Команда "зсув вмісту акумулятора вліво", зсуває 8 біт акумулятора на 1 біт вліво, біт 7 засилається на місце біта 0. На прапорці ця команда не впливає.

Асемблер:

RL A

Код:

00100011

Час:

1 цикл

Приклад:

RL A

;(A)=05H (11010101B), (C)=0

;(A)=0ABH (10101011B), (C)=0

  1.  Команда RLC A

Команда "зсув вмісту акумулятора вліво через прапорець перенесення", зсуває 8 біт акумулятора і прапорець перенесення на 1 біт вліво. Вміст прапорця перенесення поміщається на місце біта 0 акумулятора, а вміст біта 7 акумулятора переписується в прапорець перенесення. На інші прапорці ця команда не впливає.

Асемблер:

RLС A

Код:

00110011

Час:

1 цикл

Приклад:

RLС A

;(A)=56H (01010110B), (C)=1

;(A)=0ADH (10101101B), (C)=0

  1.  Команда RR A

Команда "зсув вмісту акумулятора вправо" зсуває вправо на 1 біт всі 8 біт акумулятора. Вміст біта 0 поміщається на місце біта 7. На прапорці ця команда не впливає.

Асемблер

RR A

Код:

00000011

Час:

1

Приклад:

RR A

;(A)=0D6h (11010110), (C)=1

;(A)=6Bh (01101011), (C)=1

  1.  Команда RRC A

Команда "зсув вмісту акумулятора вправо через прапорець перенесення" зсуває 8 біт акумулятора вправо і прапорець перенесення теж. Біт 0 переміщається в прапорець перенесення, а початковий вміст прапорця перенесення поміщається в біт 7. На інші прапорці ця команда не впливає.

Асемблер

RRС A

Код:

00010011

Час:

1

Приклад:

RR A

;(A)=0D6h (11010110), (C)=1

;(A)=6Bh (11101011), (C)=0

  1.  Команда SETB

Команда "встановити біт" встановлює вказаний біт в 1. Адресується:

1) до прапорця перенесення (С);

2) до біту з прямою адресацією.

1) Асемблер

SETB C

   Код:

11010011

   Час:

1

   Приклад:

SETB C

;(C)=0

;(C)=1

2) Асемблер

SETB (bit)

   Код:

11010010

bit adress

   Час:

1

   Приклад:

SETB P2.0

SETB P2.7

;(P2)=38h (00111000)

;(P2) = B9h (10111001)

  1.  Команда SJMP <мітка>

Команда "короткий перехід" виконує безумовне розгалуження в програмі за вказаною адресою. Адреса розгалуження обчислюється складанням зміщення зі знаком у другому байті команди з вмістом лічильника команд після додавання до нього 2. Таким чином, адреса переходу може перебувати в діапазоні від 128 байт, які передують команді, до 127 байт, наступних за нею.

Асемблер

SJMP <мітка>

Код:

10000000 <REL8>

Час:

2

Приклад:

SJMP MET1

;(PC) = 0418h, MET1 = 039Ah

;(PC)=039Ah, (REL8) = 80h

  1.  Команда SUBB A, <байт джерело>

Команда "віднімання з заємом" віднімає зазначену змінну із прапорцем перенесення від вмісту акумулятора, засилаючи результат в акумулятор. Ця команда встановлює прапорець перенесення (позичання) якщо при відніманні для біта 7 необхідне позичання, в протилежному випадку прапорець перенесення скидається. Якщо прапорець перенесення встановлено, то позичання необхідне при відніманні зі збільшеною точністю на попередньому кроці, тому прапорець перенесення віднімається від вмісту акумулятора разом з операндом джерела. (АС) встановлюється, якщо позичання необхідне для біта 3 і скидається в протилежному випадку. Прапорець переповнення (OV) встановлюється, якщо позичання необхідне для біта 6, але його немає для біта 7, або є для біта 7, але немає для біта 6.

При відніманні цілих чисел зі знаком (ОV) вказує на від'ємне число, яке отримується при відніманні від’ємної величини від додатньої, або додатнє число, яке отримується при відніманні додатнього числа від від’ємного.

Операнд джерела допускає 4 режими адресації:

1) регістровий;

2) прямий;

3) непрямий;

4) безпосередній (до константи);

1) Асемблер

SUBB A, Rn

де n=0..7

   Код:

10011rrr

r=000..111

   Час:

1

   Приклад:

SUBB A, 2

;(A) = 0C9h, (R2) = 54h, (C) = 1

;(A) = 74h, (R2) = 54h, (C) = 0,

;(AC) = 0, (OV) = 1

2) Асемблер

SUBB A, <direct>

   Код:

10010101

direct adress

   Час:

1

   Приклад:

SUBB A, B

;(A) = 97h, (B) = 25h, (C) = 0

;(A) = 72h, (B) = 25h, (C) = 0,

;(AC) = 0, (OV) = 1

3) Асемблер

SUBB A, @Ri

i = 0,1

   Код:

1001011i

   Час:

1

   Приклад:

SUBB A, @R0

;(A) = 49h, (33h) = 25h, (C) = 1

;(RAM[33h]) = 68h

;(A) = E0h, (C) = 1

;(AC) = 0, (OV) = 0

4) Асемблер

SUBB A, #data

   Код:

10010100

#data8

   Час:

1

   Приклад:

SUBB A, #3fh

;(A) = 0BEh, (C) = 0

;(A) = 7fh, (C) = 0

;(AC) = 1, (OV) = 1

  1.  Команда Swap A

Команда "обмін тетрадами всередині акумулятора" здійснює обмін між молодшими і старшими чотирма бітами акумулятора (між старшою та молодшою тетрадами).

Ця команда може розглядатися так само, як команда чотирьохбітового циклічного зсуву. На прапорці ця команда не впливає.

1) Асемблер

SWAP A

   Код:

11000100

   Час:

1

   Приклад:

SWAP A

;(A) = 0D7h, (11010111b)

;(A) = 7Dh, (01111101b)

  1.  Команда XCH A, <byte>

Команда "обмін вмісту акумулятора зі змінною-байтом" виконує обмін вмісту акумулятора з вмістом джерела, вказаного в команді. Операнд джерела може використовувати наступні режими адерсації:

1) регістрова;

2) пряма;

3) непряма.

1) Асемблер

XCH A, Rn

n = 0-7

   Код:

11001rrr

rrr=000-111

   Час:

1

   Приклад:

XCH A, R4

;(A) = 03Ch, (R4) = 15h

;(А) = 15h, (R4) = 3Ch,

2) Асемблер

XCH A, <direct>

   Код:

11000101

direct address

   Час:

1

   Приклад:

XCH A, P3

;(A) = 0FEh, (P3) = 0DAh

;(А) = 0DAh, (P3) = FEh

3) Асемблер

XCH A, @Ri

i = 0,1

   Код:

1100011i

   Час:

1

   Приклад:

XCH A, @R1

;(A) = 0BCh, (R1) = 39h,

;RAM[39] = 44h

;RAM[39] = 0BCh

;(А) = 44h

PAGE   \* MERGEFORMAT 5


 

А также другие работы, которые могут Вас заинтересовать

47465. СТРАТЕГІЧНЕ УПРАВЛІННЯ. НАВЧАЛЬНИЙ ПОСІБНИК 1.01 MB
  Розглянуто основні питання стратегічного управління: сучасна концепція стратегічного управління; види стратегій підприємства; формування стратегічного набору; форми та методи забезпечення стратегічного управління. 2004 ВСТУП Ринкова економіка формує нові вимоги до підприємства що обумовлюються не тільки наявністю конкуренції та високими вимогами до якості товарів але й необхідністю гнучко реагувати на зміни ринкової ситуації яка не завжди сприяє процвітанню підприємства. Успіх підприємства залежить від здатності передбачати й змінювати...
47466. Питання для іспиту «Митне право україни» 641.5 KB
  Керівництво збиранням прикордонного мита: евеки вивізне та інфуки ввізне мито за часи Богдана Хмельницького покладалося на Державний скарб як тоді називалася фінансовобанківська служба України. Верховна Рада прийняла Закон України Про митну справу в Україні який проголосив що Україна як суверенна держава самостійно створює власну митну систему і здійснює митну справу. Верховна Рада України прийняла Постанову про створення Державного митного комітету України як центрального митного органу України та перший Митний кодекс України.
47467. ПОЛІТЕКОНОМІЯ 2.54 MB
  Ця наука вивчає ринкову поведінку людей при використанні обмежених ресурсів виробництва що породжує за умов приватної власності економічну конкуренцію між ними. Другий факт: економічні ресурси засоби для виробництва благ обмежені. Задоволення їх обмежено рідкістю ресурсів для виробництва засобів їх задоволення. Непрямі інструментні чи виробничі використовуються для виробництва прямого блага.
47468. СТРАХОВІ ПОСЛУГИ. ПІДРУЧНИК 55.64 MB
  У підручнику розкриваються основи теорії страхових послуг та особливості різних видів страхування що реалізуються на страховому ринку України. Зміст підручника відповідає типовій програмі навчальної дисципліни Страхові послуги що дозволяє сформувати у студентів сучасні знання щодо сутності страхової послуги як специфічного товару страхового ринку умов та правил здійснення основоположних класичних і сучасних видів страхування. Порядок укладання та ведення страхової угоди 33 Сутність договору...
47469. Політологія. Конспект лекцій 243 KB
  Життя Поняття і функції політичної влади Політична та державна влади Умови ефективного функціонування політичної влади Основні концепції влади Проблема формування і функції влади в Україні. Легітимність влади криза легітимності та засоби її вирішення Демократія форма пол. Загальне визначення предмета політології можна було б запропонувати таке: політологія у більш вузькому розумінні загальна теорія політики вивчає специфічну групу закономірностей відносин соціальних суб'єктів з приводу влади. поперше спеціально досліджує політику як...
47470. ФІНАНСОВА ДІЯЛЬНІСТЬ СУБ'ЄКТІВ ПІДПРИЄМНИЦТВА 6.79 MB
  У посібнику розглянуті актуальні питання розвитку фінансової діяльності суб'єктів підприємництва в Україні організація фінансової діяльності суб'єктів підприємництва фінансування управління власним і позичковим капіталом фінансовими інвестиціями оцінка вартості підприємства фінансовий контролінг. ФОРМУВАННЯ ВЛАСНОГО КАПІТАЛУПІДПРИЄМСТВА 124 3. Власний капітал підприємства: функції складові таоцінка 124 З Формування статутного капіталу акціонерних товариств 130 Статутний капітал товариств з...
47471. Стратегічне управління 243 KB
  підприєствах Виділення стратегічних зон господарювання Зони стратегічних ресурсів Групи стратегічного впливу Класифікація методів аналізу стратегічних альтернатив Механізм ринкової конкуренції сутність характерні риси сучасного конкурентного середовища аналіз конкуренції в галузі детермінанти конкурентної переваги країни Національний ромб Аналіз конкурентного становища підприємства стратегічна сегментація зовнішнього середовища підприємства вибір позиції в конкуренції діагностика стану підприємства в конкурентному середовищі...
47473. Економіка підприемства 1.78 MB
  У пропонованому навчальному посібнику розглядаються діяльність сучасного підприємства як субєкта ринкових відносин, його ресурсне забезпечення, інфраструктура та організація виробничого процесу, а також основні фінансово-економічні результати діяльності в контексті сучасного законодавства щодо структурної перебудови, сучасної інноваційної та інвестиційної політики, державного регулювання економіки.