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

Типи операндів та способи адресації

МК 51 використовує операнди чотирьох типів: біти, 4-бітові цифри, байти і 16-байтові слова. З карти адрес РПД (рисунок 8.4) видно, МК має 128 програмно-керованих індикаторів користувача, а також є можливість адресації окремих бітів блока регістрів спеціальних функцій. Для адресації бітів використовується пряма 8-бітова адреса (bit), як це показано для команд 4 і 11 (рисунок 8.9). Опосередкована адресація бітів неможлива. Чотирибітові операнди виконуються тільки в операціях обміну SWAP i XCHD (формат типу 1).Восьмибітовим операндом може бути комірка пам’яті програм або даних (резидентної або зовнішньої), константа (безпосередній операнд), регістри спеціальних функцій, а також порти вводу-виводу. Порти і регістри спеціальних функцій адресуються тільки прямим способом. Байти пам’яті можуть адресуватись також і опосередковано через адресні регістри R0 і R1, відповідного банку, а також регістри DPTR і лічильник команд PC.

Таблиця 8.13- Перелік базових типів команд МК 51 в алфавітному порядку.

Мнемокод

Призначення

ACALL

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

ADD

Додавання

ADDC

Додавання з переносом

AJMP

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

ANL

Логічне ”І“

CJNE

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

CLR

Обнуління акумулятора, біта або переносу

CPR

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

DA

Десяткова корекція акумулятора

DEC

Декремент

DIV

Ділення

DJNZ

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

INC

Інкремент

JB

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

JBC

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

JC

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

JMP

Опосередкований відносний перехід

JNB

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

JNZ

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

JZ

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

JCALL

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

LJMP

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

MOV

Пересилання та завантаження даних в межах РПД

MOVC

Пересилання з пам’яті програм

MOVX

Персилання з ЗПД

MUL

Множення

NOP

Неробочій хід

ORL

Логічне ”АБО“

POP

Добування зі стеку

PUSH

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

RET

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

RETI

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

RL

Зсув вліво циклічно

RLC

Зсув вліво через перенос

RR

Зсув вправо циклічно

RRC

Зсув вправо через перенос

SETB

Установка біта

SJMP

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

SUBB

Віднімання з запозиченням

SWAP

Обмін тетрадами в байт

XCH

Взаємообмін акумулятора з регістрами та комірками пам’яті

XCHD

Обмін молодшими тетрадами акумулятора і комірки пам’яті

XRL

Виключаюче ”АБО“

Рисунок 8.9- Формати команд МК 51:

КОП - код операції;

ad - пряма 8-розрядна адреса байта в РПД з такими уточненнями:

add - для джерела;

ads - для приймача;

ad11(a10 . . . a0) - біти прямої 11-розрядної адреси передачі керування в пам’яті програм;

ad16 - пряма 16-розрядна адреса передачі керування в пам’яті програм, де:

ad 16 h - старший, а

ad 16 l - молодший біт адреси;

bit - пряма 8-розрядна адреса біта;

#d - 8-розрядний операнд;

#d 16 16-розрядний операнд, де:

#d 16 h - старший, а

#d 16 l - молодший біт адреси;

rel - 8-розрядна відносна адреса передачі керування в РПД (-127 . . . +127).

Двобайтові операнди - це константи і прямі адреси, для представлення яких використовується другий і третій байт команди (типи 12 і 13).

В системі команд МК 51 передбачені 11 способів адресації операндів (рисунок 8.9).

основні: регістрова (тип 1); безпосередня (типи 2 і 3);

пряма (типи 3...6, 12); неявна (тип 1);

опосередкована (тип 1).

комбіновані: безпосередня з прямою (типи 7 і 10); пряма з

прямою (типи 8, 9, 11); пряма з опосередкованою

(тип 2 і 3); тощо.

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

При використанні асемблера МК51 (ASM51) з метою одержання об’єктних кодів програм допускається при програмуванні вживати символьні імена регістрів символьних функцій, портів і їх окремих бітів. Для адресації окремих бітів РСФ і портів (де це можливо) можна використовувати символьні імена бітів в такому форматі:

<ім’я РСФ або порта>.<номер біта>

Наприклад, символьне ім’я порта Р1, можна записати, як Р1.2, а п’ятого біта акумулятора - АСС.5. Символьні імена регістрів і їх бітів є резервованими словами для ASM 51, тому їх не треба визначати директивами асемблера.

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

Дана група є найбільшою в системі команд МК 51 і містить 4 підгрупи: пересилок, завантаження, обміну даними і стекові команди. Крім того їх можна поділити на команди, які оперують з байтами та команди бітових операцій. Тут будуть розглядатись команди, які оперують з байтами (таблиця 8.14).

Таблиця 8.14- Команди передачі даних

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

Мнемоніка

КОП

Т

В

Ц

Операція

Команди пересилок

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

MOV A,Rn

11101ііі

1

1

1

(A)(Rn)

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

MOV A,ad

11100101

3

2

1

(A)(ad)

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

MOV A,

@Ri

1110011і

1

1

1

(A)((Ri))

Пересилка в регістр з акумулятора

MOVRn,A

11111ііі

1

1

1

(Rn)(A)

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

MOV Rn,ad

10101ііі

3

2

2

(Rn)(ad)

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

MOV ad,A

11110101

3

2

1

(ad)(A)

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

MOV ad,Rn

10001ііі

3

2

2

(ad)(Rn)

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

MOV add,

ads

10000101

9

3

2

(add)(abs)

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

MOV ad,

@Ri

1000011і

3

2

2

(ad)((Ri))

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

MOV @Ri,

A

1111011і

1

1

1

((Ri))(A)

Пересилка в РПД прямоадресованого байта

MOV @Ri,

ad

0110011і

3

2

2

((Ri))(ad)

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

MOVC A,

@A+DPTR

10010011

1

1

2

(A)((A)+

+(DPTR))

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

MOVC A,

@A+PC

10000011

1

1

2

(PC)(PC)+1

(A)((A)+(PC))

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

MOVX A,@Ri

1110001і

1

1

2

(A)((Ri))

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

MOVX A,

@DPTR

11100000

1

1

2

(A)((DPTR))

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

MOVX @Ri,A

1111001і

1

1

2

((Ri))(A)

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

MOVX @DPTR,A

11110000

1

1

2

(DPTR)(A)

Команди завантаження

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

MOV Rn,#d

01111ііі

2

2

1

(Rn) #d

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

MOV A,#d

01110100

2

2

1

(A)#d

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

MOV ad,#d

01110101

7

3

2

(ad)#d

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

MOV @Ri,

#d

0111011і

2

2

1

((Ri))#d

Завантаження вказівника даних

MOV DPTR,

#d16

10010000

13

3

2

(DPTR)#d16

Стекові команди

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

PUSH ad

11000000

3

2

2

(SP)(SP)+1

((SP))(ad)

Вилучення зі стека

POP ad

11010000

3

2

2

(ad)(SP) (SP)(SP)-1

Команди обміну

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

XCH A,Rn

11001ііі

1

1

1

(A)(Rn)

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

Прямоадресованим

Байтом

XCH A,ad

11000101

3

2

1

(A)(ad)

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

XCH A,@Ri

1100011і

1

1

1

(A)((Ri))

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

XCHD A,@Ri

1101011і

1

1

1

(A0-3 )((Ri) 0-3))

Команди пересилки даних мають три модифікації:

MOV - пересилки в межах резидентної пам’яті даних, регістрів, спеціальних функцій та портів;

MOVC - пересилки з пам’яті програм (внутрішньої та зовнішньої) в акумулятор;

MOVX - двонаправлені пересилки із зовнішньої пам’яті даних і акумулятора.

Команда MOV забезпечує двонаправлені пересилки, джерелами та приймачами яких з одного боку є акумулятор, а з другого - регістри оперативного призначення Rn (від R0 до R7 відповідного банку регістрів), комірки внутрішнього ОЗП, адреси яких (операнд ad задається в діапазоні адрес від 00 H до FF H) прямо задається в команді, комірки резидентної пам’яті даних (адреси від 00 Н до 7F H) вказується опосередковано через регістри R0 i R1 відповідного банку. Низка пересилок може виконуватись без участі акумулятора. Зокрема пересилки з однієї комірки внутрішнього ОЗП в іншу, адреса приймача (add) і джерела (ads) задається відповідно в другому і третьому байтах команди MOV, з комірки ОЗП в регістр оперативного призначення і навпаки. Можлива і опосередкована адресація комірки РПД через регістри R0 i R1. Основні способи пересилки з використанням команди MOV показані на таких прикладах:

MOV A,R3

; Пересилка даних з регістра R3 в акумулятор

MOV P1,A

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

MOV @R1,P2

; Пересилка з порту Р2 в комірку РПД, адреса якої в ;регістрі R1

MOV R5,P0

; Пересилка байта з порту Р0 в регістр R5

MOV@R0,SUBF

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

Команди MOVC забезпечують занесення до акумулятора байта з комірок пам’яті програм, адреса яких утворена сумою поточного вмісту акумулятора та вказівника даних (MOVC A,@A+DPTR) або сумою вмісту акумулятора і лічильника команд (MOVC A,@A+PC). Перша команда дозволяє пересилати байти з комірок, що знаходяться в повному адресному просторі зовнішньої пам’яті програм об’ємом 64 Кбайти, а друга - в суміщеному адресному просторі ПП (тобто ЗП складає 64 Кбайтів +256 байтів, що задаються байтом акумулятора). Дані команди зручно використовувати у тому випадку, коли готові результати розв’язку певної задачі написані в ПП (наприклад, таблиця sin x для цілих кутів, квадратів чисел тощо).

В МК51 при використанні команди MOVX @,Ri забезпечується доступ до 256 байтів ЗПД для виконання пересилок, а також є двосторонній обмін байтами між акумулятором і розширеною ЗПД, коли для доступу до комірок пам’яті використовується 16-бітна адреса, що зберігається в регістрі-покажчику даних DPTR. Команда MOVX @DPTR забезпечує доступ до 65536 байтам ЗПД.

Команди арифметичних операцій

Дану групу утворюють 24 команди (таблиця 8.15), які використовують команди віднімання, десяткової корекції, інкременту/декременту байтів а також команди множення та ділення. Основною особливістю основних команд арифметичних операцій є те, що одним із операндів і приймачем результату є акумулятор. Другим операндом є регістри оперативного призначення, комірки внутрішнього ОЗП, безпосередні дані, комірки РПД. Всі безпосередні дані, крім інкременту/декременту байтів діють на індикатори.

Дія команд додавання, віднімання, десяткової корекції, інкременту/декремету співпадає з дією аналогічних команд вже розглянутих в МП (наприклад, КМ 1810 ВМ 86).

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

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

Мнемоніка

КОП

Т

В

Ц

Операція

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

ADD A,Rn

00101iii

1

1

1

(A)(A)+(Rn)

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

ADD A,ad

00100101

3

2

1

(A)(A)+(ad)

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

ADD A,@Ri

0010011i

1

1

1

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

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

ADD A,#d

00100100

2

2

1

(A)(A)+#d

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

ADDC A,Rn

00111iii

1

1

1

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

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

ADDC A,ad

00110101

3

2

1

(A)(A)+(ad)+(C)

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

ADDC A,@Ri

0011011i

1

1

1

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

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

ADDC A,#d

00110100

2

2

1

(A)(A)+#d+(C)

Десяткова корекція акумулятора

DA A

11010100

1

1

1

Якщо (A0-3) >9V ((AC)=1),

то (A0-3)(A0-3)+6 потім,

якщо(A4-7) >9V ((C)=1),

то (A4-7)(A4-7)+6

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

SUBB A,Rn

10011iii

1

1

1

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

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

SUBB A,ad

10010101

3

2

1

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

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

SUBB A,@Ri

1001011i

1

1

1

(A)(A)-(C)-((Ri))

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

SUBB A,#d

10010100

2

2

1

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

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

INC A

00000100

1

1

1

(A)(A)+1

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

INC Rn

00001iii

3

1

1

(Rn)(Rn)+1

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

INC ad

00000101

1

2

1

(ad)(ad)+1

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

INC @Ri

0000011i

1

1

1

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

Інкремент вказівника даних

INC DPTR

10100011

1

1

2

(DPTR)(DPTR)+1

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

DEC A

00010100

1

1

1

(A)(A)-1

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

DEC Rn

00011iii

1

1

1

(Rn)(Rn)

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

DEC ad

00010101

3

2

1

(ad)(ad)-1

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

DEC @Ri

0001011i

1

1

1

((Ri))((Ri))-1

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

MUL AB

10100100

1

1

4

(B)(A)(A)*(B)

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

DIV AB

10000100

1

1

4

(A).(B)(A)/(B)