Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metod_prakt-Mikroprocesori-2008-ukr.doc
Скачиваний:
13
Добавлен:
13.04.2015
Размер:
1.16 Mб
Скачать

3 Програмна модель ядра мікроконтролера з cisc архітектурою

3.1 Мета занять

Вивчення і закріплення теоретичного матеріалу того, що включає програмно доступні ресурси мікроконтролерів з регістр-акумуляторної архітектури, систему команд, алгоритми і програми обробки інформації з використанням різних методів адресації.

3.2 Заняття 1. Програмно доступні регістри, розподіл пам'яті, способи адресації

3.2.1 Мета заняття

Вивчити і дослідити регістри спеціальних функцій, регістри загального призначення, розподіл пам'яті, основні способи адресації, використовувані в системі команд МК MCS 251.

3.2.2 Методичні вказівки з організації самостійної роботи студентів

Під час підготовки до занять необхідно ознайомитися з лекційним матеріалом з даної теми і матеріалом, викладеним [1,2,3 ].

Мікроконтролер (МК) або однокристальна мікро-ЕОМ (ОМЕВМ) – це однокристальна МПС, орієнтована на виконання функцій обробки, логічного аналізу і управління різними пристроями. ОМЕВМ сімейства МК 51 має: 32 РЗП; 28 визначених користувачем програмно-керованих прапорців; 21 восьми-розрядних регістрів спеціальних функцій [3]. До трьох регістрів можна адресуватися як до 16-розрядних.

Основним функціональним компонентом ядра мікроконтролера є арифметико-логічний блок (АЛБ), що забезпечує виконання арифметичних і логічних операцій.

АЛБ| складається з 8-розрядного АЛП| (суматора), регістра акумулятора (А), двох буферних регістрів (БРАЛУ, БРА), додаткового регістра (В), регістра стану програми (PSW), ПЗП-констант. Програмно доступними регістрами є регістр А, PSW, В.

Регістр А – є 8-розрядним регістром, призначеним для прийняття і зберігання результату, що отримується під час виконання арифметичних і логічних операцій, а також операцій пересилання.

Регістр PSW призначений для зберігання інформації про стан АЛБ під час виконання програми.

Регістр В – 8-розрядний регістр, використовуваний під час операцій множення і ділення. Для інших команд він може розглядатися як додатковий регістр загального призначення.

Рисунок 3.1 – Формат регістра PSW

На рис. 3.1 прийняті позначення розрядів регістра стану програми (PSW) визначають: P – ознака паритету парності; VO– ознака прапорця переповнювання; RS0, RS1 – вибір банку РЗП; F0 – прапорець користувача; AC – ознака додаткового перенесення; CY – ознака перенесення; PSW.1 – резервний містить тригер доступний за записом («0» і «1») і читанням, який може використовувати програміст.

У мікроконтролері сімейства МК| 51 є пам'ять програм і пам'ять даних.

Пам'ять програм – призначена для зберігання програм і має окремий від пам'яті даних адресний простір об'ємом 64 Кбайт, причому для деяких ОМЕВМ КР1816ВЕ51, КР1830ВЕ51 і КМ1816ВЕ751 частина пам'яті з адресами 0000 – 0FFF розташована на кристалі ОМЕВМ. Пам'ять програм доступна тільки за читанням і має байтову організацію об'ємом до 64 Кбайт.

Пам'ять даних – призначена для прийняття, зберігання і видачі інформації, використовуваної в процесі виконання програми. Структура пам'яті даних та її розподіл подано [3,7,8].

Важливим регістром, який використовується під час виконання ряду команд, є регістр покажчик стека (SP). Він є 8-розрядним регістром, призначеним для прийняття і зберігання адреси осередку стека, до якого було останнє звертання. Під час виконання, наприклад команд LCALL, ACALL вміст покажчика стека збільшується на 2 (SP=SP+2), а під час виконання команд RET, RETI вміст покажчика стека зменшується на 2 (SP=SP-2).

Основна функція мікроконтролера (МК) – обробка інформації, логічний аналіз і управління. Обробка інформації проводиться МК згідно з програмою, яка є сукупністю (послідовністю) команд, що скерувують роботу пристрою управління.

Під командою розуміють сукупність відомостей, необхідних процесорному елементу для виконання певної дії під час реалізації програми. Безліч інструкцій, що реалізовуються в конкретному мікроконтролері, утворює його систему команд, яка і служить базою для написання програм. Команда, як правило, складається з двох частин: коду операції і адреси. Код операції – повідомляє МП, що робити, а адреса – вказує місце положення даних тих, що беруть участь в операції. Точний формат команди залежить від конкретної операції, яку необхідно виконати (рис. 3.2). Наприклад, команда

MOV A,R2

КОП

Ад

0

1

D

D

D

S

S

S

Рисунок 3.2 – Структура формату команди MOV A,R2

На рис. 3.2 SSS – джерело, DD – приймач інформації.

Синтаксис більшості команд асемблерної мови ОМЕВМ складається з мнемонічного позначення функції, слідом за яким йдуть операнди, вказуючи методи адресації і типи даних. Хоча мнемокоди однакових команд часто різні для різних МП| і МК|, конструкція запису команд асемблера однакова для всіх мов асемблерного рівня.

Мовою Асемблера кожна команда записується на одному рядку і має чотири поля: 1 поле мітки; 2 поле коду операції; 3 поле операнда; 4 поле коментаря. З усіх полів у кожному рядку тільки поле коду має бути непорожнім.

MOV A,Rо ; A:=(Ro)

SJMP DEL

......

DEL: SETB 3FH ; [3FH]:=1

Команди виконуються за один, два або чотири (множення і ділення) машинні цикли. При частоті тактового генератора, рівній 12 Мгц, одноциклові команди виконуються за 1 мкс, двоциклові — за 2 мкс і т.д.

У командах можуть бути різні способи адресації операндів-джерел.

Регістрова адресація використовується для звертання до восьми робочих регістрів вибраного банку робочих регістрів (ці самі регістри можуть бути вибрані за допомогою прямої адресації і побічно-регістрової адресації як звичайні осередки внутрішнього ОЗУ даних).

Приклад: MOV A,Rn ; де n=0-7; (A):=(Rn).

Регістрова адресація використовується також для звертання до регістрів А, В, АВ (здвоєному регістру), DPTR і до прапорця перенесення С. Використання регістрової адресації дозволяє одержувати двобайтовий еквівалент трибайтових команд прямої адресації.

Пряма адресація використовується для звертання до елементів внутрішньої пам'яті (ОЗУ) даних (0—127) і до регістрів спеціального призначення.

Приклад: MOV A,40H; (A):=[40H].

Пряма побітова адресація також використовується для звертання до 128 біт, що окремо адресуються, розташованих в осередках з адресами 20Н—2FH і до біт регістрів спеціального призначення, що окремо адресуються.

Приклад: CLR 7FH ; [7FH]:=0.

Побічно-регістрова адресація використовується для звертання до осередків внутрішнього ОЗУ даних. Як регістри-покажчики використовується регістри R0, R1 вибраного банку регістрів.

Приклад: MOV A,@Ro; (A):=[(Ro)]].

У командах PUSH і POP використовується вміст покажчика стека (SP).

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

Приклад: MOVX A,@Ri ; (A):=((Ri)), де i=0,1

MOVX A,@DPTR, : (A):=[(DPTR)].

Безпосередня адресація дозволяє вибрати з адресного простору пам'яті програм константи, зазначені в команді.

Приклад: MOV A,#data; (A):=<data8>.

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

Приклад: MOVC A,@A+DPTR; : (A):=[(A)+(DPTR)].

3.2.3 Контрольні запитання і завдання

1. Який організований регістровий файл?

2. Обчисліть пряму адресу регістра R5, розташованого в Банку 3.

3. Обчисліть пряму адресу регістра R3, розташованого в Банку 2.

4. Який регістр розташований за адресою 1BH?

5. Які регістри мікроконтролера MSC 51 належать до регістрів спеціальних функцій?

6. Які регістри мікроконтролера MSC 51 є програмно доступними?

7. Які з перерахованих регістрів мікроконтролера MSC 51 допускають побітову адресацію?

8. Який об'єм пам'яті даних в однокристальній мікро ЕОМ I80751?

9. Які прапорці в регістрі PSW мікроконтролера MSC 51 є арифметичними?

10.В якому адресному просторі пам'яті даних розташований Б2 РЗП?

11.В якому адресному просторі розташована область прапорців, які прямо адресуються?

12. В якому адресному просторі розташовані регістри спеціальних функцій (SFR)?

13. В якому адресному просторі знаходиться регістр PSW і регістр В?

14. В яких елементах пам'яті даних знаходяться прапорці, що прямо адресуються, з адресами 28Н, 47Н?

15. В яких елементах пам'яті даних знаходяться прапорці 31D, 110D, що прямо адресуються?

16. Яка адреса прапорця паритету парності і додаткового перенесення при бітовій адресації?

17. Який спосіб адресації використовується при звертанні до РЗП і регістрів спеціальних функцій?

18. Який спосіб адресації використовується при звертанні до внутрішнього ОЗУ?

19. Який спосіб адресації використовується при звертанні до зовнішньої пам'яті даних і програм?

3.2.4 Приклади аудиторних і домашніх завдань

Приклад 3.1. Реалізувати програмно функцію y=x1+x2, де x1-РЗП Банк 2 x2-M, В-РЗП. Тут М-Memory (використовується побічно-регістрова адресація).x1,x2-двобайтові числа.

Алгоритм розв’язання

START

1. Початкове встановлення адрес і змінних.

2. Визначити поточний банк робочих регістрів.

3. Привласнити R1 значення адреси рівного 31H, де зберігається молодший байт змінної х2.

4. Записати в А молодший байт змінної х2, що міститься в осередку ОЗУ.

5. Виконати підсумовування молодших байтів х1 і х2 A:= (A)+([R1])

6. Вміст акумулятора зберегти в РЗП|.

7. Привласнити R1 значення адреси рівного 30H, де зберігається старший байт змінної х2. R1:= (R1-1)

8. Записати в А старший байт змінної х2, що міститься в осередку ОЗУ.

9. Виконати підсумовування старших байтів х1 і х2 з урахуванням перенесення A:= (A)+([R1]) +CY

10. Вміст акумулятора зберегти в РЗП|.

11. Вміст CY зберегти в РЗП|.

STOP

Програма мовою асемблер

;SUM 0030H

;(R2,R3):=х1

;[0031H],[0030H]:=х2

;(R5,R6,R76):= Y

ORG 0030H ; початкова адреса програми

SUM: CLR C ; скидання прапорця перенесення

SETB RS1 ; задання банка робочих регістрів 2

CLR RS0 ;

MOV R1,#31H ; запис адреси осередку 31Н в R1

MOV A,,@R1 ;запис у А молодшого байта змінної х2

ADDC A,R2 ; складання А і R2

MOV R5,A ; перенесення результату складання в R5

DEC R1 ; перехід до адреси 30Н

MOV A @R1H ; запис в А старшого байта х2

ADDC A R3 ;сума А і старшого байта х1 з урахуванням

;прапорця С

MOV R6,A ; запис результату складання з А в R6

CLR A ; запис прапорця

ADDC A,#0 ; перенесення в

MOV R7,A ; РЗП (R7:=CY)

END

Приклад 3.2. Реалізувати програмно функцію y=x1 «і» x2, де: x1-ОЗУ; x2-ОЗУ; В-ОЗУ. Використовувати пряму адресацію даних. х1, х2-однобайтові числа. Y передати в послідовній формі через Р1.3.

Алгоритм розвязання

START

1. Початкове встановлення адрес і змінних.

2. Передати вміст комірки ОЗУ в регістр А.

3. Виконати логічне складання А і елемента пам'яті.

4. Зберегти вміст акумулятора в ОЗУ.

5. Встановити лічильник біт N рівним 08.

6. Настроїти порт Р1на вивід.

7. Виконати зрушення вмісту А вправо на один біт через перенесення.

8. Передати вміст прапорця в порт Р1.3.

9. Затримка 3 такти.

10. Зменшити лічильник на 1, якщо N не = 0, виконати пункт 6.

STOP

Програма мовою асемблер

; ANL 0070H

; х1-ОЗУ 0031Н

; х2-ОЗУ 0030Н

; R5:=N

ORG 0070H ; розміщення програми в пам'яті

ANL: CLR C ; скидання прапорця перенесення

MOV А,31H ; передати х1 в акумулятор

ANL A,30H ; логічне «І» вмісту А і х2

MOV R5,#08 ; встановлення лічильника N=8

P2: RRC A ; зрушення вмісту А через перенесення MOV P1,#0 ; ініціалізація порту 1

MOV P1.3,C ; передати біт в порт через P1.3

NOP ; затримка

NOP ; три

NOP ; такту

DJNZ R6,P2 ; N-1, якщо N не рівне 0, виконувати Р2

END

Приклад 3.3. Реалізувати програмно функцію y=x1 "ВИКЛ АБО" x2, де x1-М, x2-M, В-РЗП Банк 2. Тут М-Memory (використовується побічно-регістрова адресація). х1, х2-однобайтовые числа.

Алгоритм розвязання

START

1. Початкове встановлення адрес і змінних.

2. Передати х1 в акумулятор.

3. Виконати логічну операцію х1"викл.або"х2.

4. Передати результат операції в РЗП.

STOP

Програма мовою асемблер

; ВИКЛ| АБО 0090Н

;[ 40Н ]:= x1

;[ 50H ];= x2

;Банк 1 R1:= у

ORG 0050H ; початкова адреса програми

SETB RS1 ;задання 1 банку

CLR RS0 ; робочих регістрів

MOV R1,#40H ;(R1):= адреса х1

MOV R0,#50H ;(R2):= адреса х2

MOV A,@R1 ;A:= х1

XRL A,@R0 ;A:= A «викл.або»х2

MOV R1,A ; R1=y

END

3.3 Заняття 2,3. Групи команд

3.3.1 Мета занять

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

3.3.2 Методичні вказівки з організації самостійної роботи студентів

Під час підготовки до занять необхідно ознайомитися з лекційним матеріалом з даної теми і матеріалом, викладеним [1,7,8].

Систему команд ОМЕВМ умовно можна розбити на п'ять груп: команди передачі даних; арифметичні команди; логічні команди з байтовими змінними; команди розгалуження програм і передачі управління ОМЕВМ; команди бітового процесора.

Команди передачі даних. Таблиці символів (кодів), зашиті в ПЗП програми можуть бути вибрані за допомогою команд передачі даних з використанням непрямої адресації. Байт константи може бути переданий в акумулятор з елемента пам'яті програм, сумою базового регістра (PC або DPTR) та індексного регістра, що адресується (вмісту А). Це забезпечує, наприклад, зручний засіб реалізації алгоритму перетворення коду ASCII у семисегментний код.

Будь-який осередок 256-байтового блока зовнішнього ОЗУ даних може бути вибраний з використанням побічно-регістрової адресації через регістри покажчики R0 або R1 (вибраного банку робочих регістрів).

Осередок усередині адресного простору 64 Кбайт зовнішнього ОЗУ також може бути вибраний з використанням побічно-регістрової адресації через регістр-покажчик даних DPTR.

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

У логічному процесорі будь-який біт, що прямо адресується, може бути поміщений в біт перенесення і навпаки.

Вміст акумулятора може бути обмінений з вмістом робочих регістрів (вибраного банку) і з вмістом осередків внутрішнього ОЗУ, що адресуються за допомогою побічно-регістрової адресації, а також із вмістом осередків внутрішнього ОЗУ, що прямо адресуються, і з вмістом регістрів спеціального призначення.

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

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

MOV A,Rn ; де n=0-7; (A):=(Rn)

Приклад: ;(A)=FAH, (R4)=93H

MOV A,R4 ;(A)=93H, (R4)=93H

MOV A,<direct>; (A):=(direct)

Приклад: ; (A)=93H, (R0)=40H, (ОЗУ[40])=10H

Команда MOVC A,@A+(<R16>), де <R16>- 16-розрядний регістр.

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

Як 16-бітовий регістр може бути:

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

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

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

MOVC A,@A+DPTR; : (A):=((A)+(DPTR))

Приклад: ;(A)=1BH, (DPTR)=1020H

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

MOVC A,@A+DPTR ;(A)=48H, (DPTR)=1020H

MOVC A,@A+PC, : (A):=((A)+(PC))

Приклад: ;(A)=FAH, (PC)=0289H

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

MOVC A,@A+DPTR ;(A)=9BH, (PC)=0282H

Арифметичні команди. У наборі команд ОМЕВМ є такі арифметичні операції: складання, складання з урахуванням прапорця перенесення, віднімання із позичанням, інкрементування, декрементування, порівняння, десяткова корекція, множення і ділення. Деякі операції впливають на прапорці: переповнювання, перенесення, проміжного перенесення і прапорці парності в слові стану процесора (PSW). Операції інкрементування та декрементування на прапорці не впливають. Операції порівняння не впливають ні на операнд призначення, ні на операнд джерела, але вони впливають на прапорці перенесення.

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

Приклади виконання деяких арифметичних команд.

ADD A,<байт-джерела>

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

Режими адресації байта-джерела в командах арифметичних операцій: регістровий; побічно регістровий; прямою; безпосередній.

Команда ADD A,Rn ;(A):=(A)+(Rn), де n=0-7

Приклад: ;(A)=C3H, (R6)=AAH

ADD A,R6 ;(A)=6DH, (R6)=AAH

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

Команда ADD A,@Ri ; (A):=(A)+((Ri)), де i=0,1

Приклад: ;(A)=95H, (R1)=31H, (ОЗУ [31])=4CH

ADD A,@R1 ;(A)=E1H, (ОЗУ [31])=4CH

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

ADDC A,<байт-джерела>

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

Команда ADDC A,Rn ; (A):=(A)+(Rn)+(C), де n=0-7

Приклад: ;(A)=B2H, (R3)=99H,

;(C)=1

ADDC A,R3 ;(A)=4CH, (R3)=99H

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

Команда ADDC A,@Ri ; (A):=(A)+((Ri))+(C), де i=0,1

Приклад: ;(A)=D5H, (R0)=3AH,

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

ADDC A,@R0 ;(A)=F0H, (ОЗУ[3A])=1AH

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

SUBB A,<байт джерела>

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

Команда SUBB A,@Ri ; (A):=(A)-(C) -((Ri)),где i=0,1

Приклад: ;(A)=49H, (R0)=33H, (C)=1, (ОЗУ[33])=68H

SUBB A,@R0 ;(A)=E0H, (C)=1

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

Команда SUBB A,#data ; (A):=(A)-(C) -(#data8);

Приклад: ;(A)=BEH, (C)=0,

SUBB A,#3FH ;(A)=7FH, (C)=0

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

Команда DA A

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

MUL AB

Команда перемножує 8-бітові цілі числа без знака з акумулятора і регістра В. Старший байт добутку поміщається в регістр В, а молодший – в A. Якщо результат добутку більший за FFH, то встановлюється прапорець переповнювання OV, інакше він скидається. Прапорець перенесення завжди скидається.

Приклад: ;(A)=50H (50H=80), (C)=1,

;(B)=A0H (A0H=160), (OV)=0

MUL AB ;(A)=00H, (C)=0, (B)=32H, (OV)=1

Команда DIV AB

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

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

ANL <байт призначения>,<байт-джерела>

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

– якщо байтом призначення є акумулятор, то регістровий, побічно-регістровий. Прямий і безпосередній;

– якщо байтом призначення є пряма адреса (direct), то безпосередній (байт-джерело дорівнює константі) і регістровий (тільки А).

Команда ANL A,Rn ; (A):=(A) AND (Rn), де n=0-7

Приклад: ;(A)=FEH, (R2)=C5H

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

Команда ANL (direct),A ; (direct)=(direct) AND (A)

Приклад: ;(A)=55H, (P2)=AAH

ANL P2,A ;(P2)=00H, (A)=55H

ORL <байт призначення>,<байт джерела>

XRL <байт призначення >,<байт джерела>

Команда ORL "логічне АБО" і команда XRL що "логічне ВИКЛЮЧАЄ АБО" для змінних-байтів виконує операції над бітами вказаних змінних, записуючи результат в байт призначення. Передбачає такі режими адресації: якщо байтом призначення є акумулятор, то регістровий, побічно-регістровий, прямий і безпосередній; якщо байтом призначення є пряма адреса (direct), то безпосередній (байт-джерело дорівнює константі) і регістровий (тільки А).

Команда XRL <direct>,A ; (direct):=(direct) XOR A

Приклад: ;(A)=31H, (P1)=82H

XRL P1,A ;(A)=31H, (P1)=B3H

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

Команди 16-розрядних переходів і викликів підпрограм дозволяють здійснювати перехід до будь-якої точки адресного простору пам'яті програм об'ємом 64 Кбайт.

Команди 11-розрядних переходів і викликів підпрограм забезпечують переходи усередині програмного модуля місткістю 2 Кбайт.

У системі команд є команди умовних і безумовних переходів щодо початкової адреси наступної команди в межах від (РС)-128 до (РС)+127.

Команди перевірки окремих розрядів дозволяють здійснювати умовні переходи за станом "0" або "1" бітів, що прямо адресуються.

Команди перевірки вмісту акумулятора (на нуль / не нуль) дозволяють здійснювати умовні переходи за вмістом А.

Побічно-регістрові переходи в системі команд ОМЕВМ забезпечують розгалудження щодо базового регістра (вмісту DPTR або PC) із зсувом, що знаходиться в акумуляторі А.

SJMP <мітка>

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

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

SJMP <мітка> ; : (PC):=(PC)+2, (PC):=(PC)+(rel8)

Приклад: ;(PC)=0418H,

;мітка MET1 відповідає адресі 039AH

SJMP MET1 ;(PC)=039AH, де (rel8)=80H=-128 DEC

SJMP MET2 ;(PC)=041AH, де мітка MET2

; відповідає адресі 041AH

;(rel8)=7DH=+125 DEC

AJMP <addr11>

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

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

AJMP <мітка>; (PC[15-0]):=(PC[15-0])+2, (PC[10-0]):=<addr11>

Приклад: ;(PC)=028FH

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

AJMP MT2 ;(PC)=034AH

LJMP<мітка>

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

JMP @A+DPTR

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

JMP @A+DPTR, (PC):=(A)[7-0]+(DPTR)[15-0]

Приклад: ;(PC)=034EH, (A)=86H, (DPTR)=0329H

JMP @A+DPTR ;(PC)=03AFH, (A)=86H, (DPTR)=0329H

ACALL <adr 11>

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

ACALL <метка> ;(PC):=(PC)+2

;(SP):=(SP)+1

;((SP)):=(PC[7-0])

;(SP):=(SP)+1

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

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

Приклад: ;ДО ВИКОНАННЯ ACALL

;(SP)=07H

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

;тобто (PC)=0345H

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

;(PC)=028DH

;ПІСЛЯ ВИКОНАННЯ ACALL

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

ОЗУ[08]=8FH,ОЗУ[09]=02H.

LCALL <addr16>

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

Команда LCALL <мітка> ;(PC):=(PC)+3,

;(SP):=(SP)+1

;((SP)):=(PC[7-0])

;(SP):=(SP)+1

;((SP)):=(PC[15-8])

;(PC):=<addr[15-0]>

RET

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

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

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

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

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

CJNE A,<direct>,<мітка> ; (PC):=(PC)+3

; якщо (direct)<(A), то (PC):=(PC)+<rel8>,

;(C):=0

; якщо (direct)>(A), то (PC):=(PC)+<rel8>

; (C):=1

Приклад: ;(A)=97H, P2=F0H, (C)=0

CJNE A,P2,MT3 ;(A)=97H, P2=F0H, (C)=1

; Адреса, відповідна мітці МТ3 ;обчислюється, ; як (PC):=(PC)+3+(rel8)

MT3: CLR A ;(A):=00H, P2=F0H, (C)=1

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

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

Команда DJNZ Rn,<метка> ;(PC):=(PC)+2, (Rn):=(Rn)-1,

;якщо ((Rn)>0 або (Rn)<0), то

;(PC):=(PC)+<rel8>

;де n=0-7

Приклад: ;(R2)=08H, P1=FFH (11111111B)

LAB4: CPL P1.7 ;послідовність команд переключає

DJNZ R2,LAB4 ;R2=07 ; P1.7 вісім разів і приводить до

;появи чотирьох імпульсів на вихід

;P1.7

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

Команди, що оперують з бітами, забезпечують пряму адресацію 128 бітів (0—127) в шістнадцяти осередках внутрішнього ОЗУ (осередки з адресами 20Н—2FH) і пряму побітову адресацію регістрів спеціального призначення, адреси яких кратні восьми: Р0(80Н), TCON(88H), Р1(90Н), SCON(98H), Р2(А0Н), IЕ(А8Н), РЗ|(В0Н), (В8Н), PSW(D0H), А(Е0Н), B(F0H).

3.3.3 Контрольні запитання і завдання

1. Які вимоги визначають вибір способу адресації?

2. Який спосіб адресації доцільно використовувати під час роботи з таблицями символів (кодів), зашитих в ПЗП програми?

3. Який спосіб адресації використовується в командах передачі байта константи в акумулятор з елемента пам'яті програм?

4. Які регістри дозволяють виконати вибірку будь-якого осередку 256-байтового блока зовнішнього ОЗУ даних?

5. Який регістр використовується для вибірки осередків усередині адресного простору 64 Кбайт зовнішнього ОЗУ?

6. Яка адресація використовується для звертання до регістрів спеціальних функцій?

7. Яку адресацію можна використовувати при звертанні до внутрішнього ОЗУ даних?

8. :Які команди використовують пряму адресацію?

MOV A,28

PUSH 4FH

ANL C,2BH

MOV R0,A

MOV A,#data

XCH A,@R2

9. Які команди використовують безпосередню адресацію?

MOV direct,#data

ANL A,#25H

POP direct

ORL A,45

10. Які команди використовують побічно-регістрову адресацію?

XRL 3Fh,#7Fh

MOV @R0, #110

ADDC A, 250

MOV @P1, 3Fh

11. Які способи адресації використовуються в командах: MOVC A,@0DPTR; MOV X,@0PC; DJNZ R4,adr; ORL C,2BH?

12. Яка команда виконає настроюваня банку 3?

MOV D0H,#FFH

MOV PSW,18H

MOV PSW,#0FH

SETB PSW.4

13. Якою командою можливе скидання прапорця перенесення?

CLR D7H

MOV PSW,#03H

XRL A,direct

CPL C

CLR PSW.6

CLR PSW.0

14. Якому з поточних банків РЗП настроюється командами MOV PSW,#B7h; MOV D0,24?

3.3.4 Приклади аудиторних і домашніх завдань

Приклад 3.1 Реалізувати команду MOV A,@Ri ; i=0,1; (A):=(direct) за умови (A)=10H, (R0)=41H, (ОЗУ[41])=0CAH

Розв’язок: MOV A,@R0; (A)=CAH, (R0)=40H, (ОЗУ[41])=0CAH

Приклад 3.2 Реалізувати команду MOV A,#data; (A):=<data8> за умови

(A)=C9H (11001001B).

Розв’язок: MOV A,#37H; (A)=37H (00110111B)

Приклад 3.3 Реалізувати команду MOV Rn,<direct>;n=0-7, (Rn):=(direct) за умови (R0)=39H, (P2)=F2H

Розв’язок: MOV R0,P ; (R0)=F2H

Приклад 3.4 Реалізувати команду MOV <direct>,<direct>; (direct):=(direct) за умови (ОЗУ[45])=33H, (ОЗУ[48])=DEH

Розв’язок: MOV 48H,45H; (ОЗУ[45])=33H, (ОЗУ[48])=33H

Приклад 3.5 Реалізувати команду MOV DPTR,#data16 за умови (DPTR)=01FDH

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

MOV DPTR,#<data16>;(DPTR):=#data[15-9], причому (DPH):=#data[15-8], (DPL):=#data[7-0]

MOV DPTR,#1234H ;(DPTR)=1234H, (DPH)=12H, (DPL)=34H

Приклад 3.6 Реалізувати команду ADD A,<direct ; (A):=(A)+(direct) за умови (A)=77H, (ОЗУ [90])=FFH.

Розв’язок:ADD A,90H ;(A)=76H, (ОЗУ [90])=FFH

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

Приклад 3.7 Реалізувати команду ADD A,<#data> ; (A):=(A)+#data за умови (A)=09H.

Розв’язок: ADD A,#0D3H;(A)=DCH

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

Приклад 3.8 Реалізувати команду ADDC A,<direct>;(A):=(A)+(direct)+(C) за умови (A)=11H, (ОЗУ[80])=DFH,(C)=1

Розв’язок: ADDC A,80H ;(A)=F1H

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

Приклад 3.9 Реалізувати команду SUBB A,Rn ; (A):=(A)-(C) -(Rn), де n=0-7 за умови (A)=C9H, (R2)=54H, (C)=1

Розв’язок: SUBB A,R2 ;(A)=74H, (R2)=54H, (C)=0

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

Приклад 3.10. Реалізувати команду множення А на В за умови (A)=2AH, (C)=1,(B)=06H, (OV)=1

Розв’язок:MUL AB ;(A)=D8H, (C)=0, (B)=00H, (OV)=0

Приклад 3.11. Реалізувати команду ділення А на В за умови, що акумулятор містить число 251 (0FBH або 11111011B), а регістр В – число 18 (12H або 00010010B).

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

Після виконання команди DIV AB в акумуляторі буде число 13, а у В – 17, оскільки 251=(13*18)+17, CY і OV – скинуті.

Приклад 3.12. Реалізувати команду логічного «І» ANL A,@Ri ;(A):=(A) AND ((Ri)), де i=0,1 за умови (A)=BCH, (ОЗУ[35])=47H, (R0)=35H

Розв’язок:ANL A,@R0 ;(A)=04H, (ОЗУ[35])=47H

Приклад 3.13. Реалізувати команду логічного «І» ANL <direct>,#data ; : (direct);=(direct) AND #data за умови (P1)=FFH.

Розв’язок:ANL P1,#73H ;(P1)=73H

Приклад 3.14 Реалізувати команду DJNZ <direct>,<мітка>;(PC):=(PC)+3, (direct):=(direct)-1, ;якщо ((direct)>0 або (direct)<0), то (PC):=(PC)+<rel8> за умови (ОЗУ[40])=01H, (ОЗУ[50])=80H, (ОЗУ[60])=25H.

Розв’язок:DJNZ 40H,LAB1 ;(ОЗУ[40])=00H

DJNZ 50H,LAB2 ;(ОЗУ[50])=7FH

DJNZ 60H,LAB3 ;(ОЗУ[60])=24H

...

LAB1: CLR A

...

LAB2: DEC R1