Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПТ.doc
Скачиваний:
63
Добавлен:
03.11.2018
Размер:
20.52 Mб
Скачать

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

Команди даної групи (таблиця 8.17) оперують з однобайтовими операндами. Ними можуть бути окремі біти деяких регістрів спеціальних функцій (РСФ) і портів, а також 128 програмованих індикаторів користувача з адресами від 00 до 7F РПД.

Існують команди обнуління (CLR), установки (SET B), інверсії (CPL) бітів, а також операції І та АБО біта і індикатора переносу С. Сюди приєднуються також команди пересилок з бітовими операндами. Для адресування біта використовується пряма восьмирозрядна адреса (bit). Опосередкована адресація бітів неможлива.

Таблиця 8.17

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

Мнемокод

КОП

Т

Б

Ц

Операція

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

CLR C

11000011

1

1

1

(C)0

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

CLR bit

11000010

4

2

1

(b)0

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

SETB C

11010011

1

1

1

(C)1

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

SETB bit

11010010

4

2

1

(b)1

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

CPL C

10110011

1

1

1

(C)

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

CPL bit

10110010

4

2

1

(b)

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

ANL C, bit

10000010

4

2

2

(C)

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

ANL C,/ bit

10110000

4

2

2

(C)

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

ORL C, bit

01110010

4

2

2

(C)

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

ORL C,/ bit

10100000

4

2

2

(C)

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

MOVC, bit

10100010

4

2

1

(C)(b)

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

MOV bit ,C

10010010

4

2

2

(b)(C)

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

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

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

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

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

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

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

Мнемокод

КОП

Т

В

Ц

Операція

Довгий перехід в повному об’ємі пам’яті

LJMP ad 16

00000010

12

3

2

(PC)ad 16

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

AJMP ad 11

a10a9a800001

6

2

2

(PC)(PC)+2

(PC0-10)ad 11

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

SJMP rel

10000000

5

2

2

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

Непрямий відносний перехід

JMP @A+ +DPTR

01110011

1

1

2

(PC)(A)+ +(DPTR)

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

JZ rel

01100000

5

2

2

(PC) (PC)+2, якщо (А)=0 то (PC) (PC)+rel

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

JNZ rel

01110000

5

2

2

(PC) (PC)+2, якщо (А)0 то (PC) (PC)+rel

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

JC rel

01000000

5

2

2

(PC) (PC)+2, якщо (C)=1 то (PC) (PC)+rel

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

JNC rel

01010000

5

2

2

(PC) (PC)+2, якщо (C)=0 то (PC) (PC)+rel

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

JB bit,rel

00100000

11

3

2

(PC) (PC)+3, якщо (b)=1 то (PC) (PC)+rel

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

JNB bit,rel

00110000

11

3

2

(PC) (PC)+2, якщо (b)=0 то (PC) (PC)+rel

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

JBC bit,rel

00010000

11

3

2

(PC) (PC)+2, якщо (b) то (b)0, (PC) (PC)+rel

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

Мнемокод

КОП

Т

В

Ц

Операція

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

DJNZ Rn,rel

11011rrr

5

2

2

(PC)(PC)+2, (Rn)(Rn)-1, якщо (Rn)0, то (PC)(PC)+rel

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

DJNZ ad,rel

11010101

8

3

2

(PC)(PC)+2,

(ad)(ad)-1, якщо (ad)0, то (PC)(PC)+rel

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

CJNE A,ad, rel

10110101

8

3

2

(PC) (PC)+3, якщо (А)ad то (PC)(PC)+rel,

якщо (А)<ad то (C)1

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

CJNE A,#d, rel

10110100

10

3

2

(PC) (PC)+3, якщо (А)#d то (PC)(PC)+rel,

якщо (А)<#d то (C)1,

інакше (C)0

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

CJNE Rn, #d,rel

10111rrr

10

3

2

(PC) (PC)+3, якщо (Rn)#d то (PC)(PC)+rel,

якщо (Rn)<#d то (C)1,

інакше (C)0

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

CJNE @Ri, #d,rel

1011011i

10

3

2

(PC) (PC)+3, якщо ((Ri))#d то (PC)(PC)+rel,

якщо ((Ri))<#d то (C)1,

інакше (C)0

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

Мнемокод

КОП

Т

В

Ц

Операція

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

LCALL ad 16

00010010

12

3

2

(PC)(PC)+3, (SP)(SP)-1, ((SP))(PC0-7), (SP)(SP)+1, ((SP))(PC8-15),

(PC)ad 16

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

ACALL ad 11

a10a9a810001

6

2

2

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

((SP))(PC0-7),

(SP)(SP)+1,

((SP))(PC8-15), (PC0-10)

ad 11

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

RET

00100010

1

1

2

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

((SP))(PC0-7),

(SP)(SP)+1,

((SP))(PC8-15), (PC0-10)ad 11

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

RETI

00110010

1

1

2

(PC8-15)((SP)), (SP)(SP)-1,

(PC0-7)((SP)),

(SP)(SP)-1

Порожня команда

NOP

00000000

1

1

1

(PC)(PC)+1

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

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

Умовні переходи. МК51 має розвинуту систему умовних переходів, що дозволяє вести розгалуження програм за такими умовами: акумулятор містить нуль (JZ); вміст акумулятора не рівний нулю (JNZ); перенос рівний одиниці (JC); перенос рівний нулю (JNC);адресований біт рівний одиниці (JB); адресований біт рівний нулю (JNB). Крім аналізу індикаторів регістру PSW та бітів внутрішнього ОЗП в командах умовних переходів може здійснюватись попереднє декрементування (буква D у мнемоніці команди) або порівняння (буква С у мнемоніці команди) операндів.

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

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

WAIT: CJNE A,P0,WAIT

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

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