Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Програмне забезпечення лаб роб 2.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.19 Mб
Скачать

Система команд mk51 Структура інформаційних зв'язків

Залежно від способу адресації і місця розташування операнда можна виділити дев'ять типів операндів, між якими можливий інформаційний обмін. Граф можливих операцій передавання даних показаний на рис. А.4. Акумулятор (А) поданий на цьому графові окремою вершиною, оскільки багато команд використовують неявну адресацію.

Рисунок А.4 - Граф шляхів передавання даних в МК51

Передавання даних у МК51 можуть виконуватися без участі акумулятора.

Акумулятор. Звернення до акумулятора може бути виконане в МК51 з використанням неявної і прямої адресації. Залежно від способу адресації акумулятора застосовується одне із символічних імен : A або ACC (пряма адреса). При прямій адресації звернення до акумулятора проводиться як до одного з РСФ, і його адреса зазначається в другому байті команди.

Використання неявної адресації акумулятора прийнятніше, проте не завжди можливо, наприклад, при зверненні до окремих бітів акумулятора.

Звернення до зовнішньої пам'яті даних. Режим непрямої адресації ЗПД. При використанні команд MOVX @Ri забезпечує доступ до 256 байтів зовнішньої пам'яті даних.

Продовження додатка А

Існує також режим звернення до розширеної ЗПД, коли для доступу використовується 16-бітова адреса, що зберігається в регістрі DPTR. Команди MOVX @DPTR забезпечують доступ до 65 536 байтів ЗПД.

Таблиця А.2 - Група команд передавання даних

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

Мнемокод

КОП

Операція

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

MOV A, Rn

11101rrr

((A) = (Rn)

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

MOV A, ad

11100101

((A) = (ad)

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

MOV A, @Ri

1110011i

((A) = ((Ri))

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

MOV A, #d

01110100

((A) = #d

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

MOV Rn, A

11111rrr

((Rn) = (A)

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

MOV Rn, ad

10101rrr

((Rn) = (ad)

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

MOV Rn, #d

001111rrr

((Rn) = #d

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

MOV ad, A

11110101

((ad) = (A)

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

MOV ad, Rn

10001rrr

((ad) = (Rn)

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

MOV add, ads

10000101

((add) = (ads)

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

MOV ad, @Ri

1000011i

((ad) = ((Ri))

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

MOV ad, #d

01110101

((ad) = #d

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

MOV @Ri, A

1111011i

((((Ri)) = (A)

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

MOV @Ri, ad

00110011i

((((Ri)) = (ad)

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

MOV @Ri, #d

00111011i

((((Ri)) = #d

Завантаження покажчика даних

MOV DPTR, #d16

10010000

((DPTR) = #d16

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

MOVC A, @A + DPTR

10010011

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

Продовження табл. А.2

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

MOVC A, @A + PC

10000011

((PC) = (PC) + 1

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

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

MOVX A, @Ri

1110001i

((A) = ((Ri))

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

MOVX A, @DPTR

11100000

((A) = ((DPTR))

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

MOVX @Ri, A

1111001i

((((Ri)) = (A)

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

MOVX @DPTR, A

11110000

((((DPTR)) = (A)

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

PUSH ad

11000000

((SP) = (SP) + 1

((((SP)) = (ad)

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

POP ad

11010000

((ad) = (SP)

((SP) = (SP) - 1

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

XCH A, Rn

11001rrr

((A) <-> (Rn)

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

XCH A, ad

11000101

((A) <-> (ad)

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

XCH A, @Ri

1100011i

((A) <-> ((Ri))

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

XCHD A, @Ri

1101011i

(A0 - 3) <-> ((Ri) 0-3)

  

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

Цю групу утворюють 24 команди.

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

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

Мнемокод

КОП

Операція

Складання акумулятора з регістром (n = 0 - 7)

ADD A, Rn

0000101rrr

((A(Rn)

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

ADD A, ad

00100101

((A(ad)

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

ADD A, @Ri

000010011i

((A((Ri))

Складання акумулятора з константою

ADD A, #d

00100100

((A) = (A) + #d

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

ADDC A, Rn

0000111rrr

((A(C)

Продовження табл. А.3

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

ADDC A, ad

00110101

((A(C)

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

ADDC A, @Ri

000011011i

((A(C)

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

ADDC A, #d

00110100

((A) = (A) + #d + + (C)

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

DA A

11010100

Якщо

(A0 - 3) > 9 \/ ((AC) = 1),

те (A0 - 3) + 6, потім якщо

(A4 - 7) > 9 \/ ((C)= 1),

те (A4 - 7) + 6

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

SUBB A, Rn

10011rrr

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

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

SUBB A, ad

10010101

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

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

SUBB A, @Ri

1001011i

((A) = (A) - (C) - - ((Ri))

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

SUBB A, #d

10010100

((A) = (A) - (C) - - #d

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

INC A

00000100

((A) = (A) + 1

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

INC Rn

000000001rrr

((Rn) = (Rn) + 1

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

INC ad

00000101

((ad) = (ad) + 1

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

INC @Ri

000000000011i

((((Ri)) = ((Ri)) +1

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

INC DPTR

10100011

((DPTR) = (DPTR) + 1

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

DEC A

00010100

((A) = (A) - 1

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

DEC Rn

00000011rrr

((Rn) = (Rn) - 1

Продовження табл. А.3

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

DEC ad

00010101

((ad) = (ad) - 1

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

DEC @Ri

0000001011i

((((Ri)) = ((Ri)) - 1

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

MUL AB

10100100

((B(B)

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

DIV AB

10000100

((A(B)

Команди ADD і ADDC допускають складання акумулятора з великим числом операндів. Аналогічно командам ADDC існують чотири команди SUBB, що дозволяє простіше проводити віднімання байтів і багатобайтових двійкових чисел. У МК51 реалізується розширений список команд інкремента/декремента байтів, введена команда інкремента

16-бітового регістра-покажчика даних.

 

Група команд логічних операцій

Цю групу утворюють 25 команд.

Таблиця А.4 - Група команд логічних операцій

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

Мнемокод

КОП

Операція

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

ANL A, Rn

001011rrr

((A(Rn)

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

ANL A, ad

01010101

((A(ad)

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

ANL A, @Ri

00101011i

((A((Ri))

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

ANL A, #d

01010100

((A) = (A) /\ #d

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

ANL ad, A

01010010

((ad(A)

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

ANL ad, #d

01010011

((ad) = (ad) /\ #d

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

ORL A, Rn

001001rrr

((A(Rn)

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

ORL A, ad

01000101

((A(ad)

Продовження табл. А.4

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

ORL A, @Ri

00100011i

((A((Ri))

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

ORL A, #d

01000100

((A) = (A) \/ #d

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

ORL ad, A

01000010

((ad(A)

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

ORL ad, #d

01000011

((ad) = (ad) \/ #d

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

XRL A, Rn

001101rrr

(A(Rn)

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

XRL A, ad

01100101

(A(ad)

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

XRL A, @Ri

00110011i

(A((Ri))

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

XRL A, #d

01100100

(A) = (A) \/ #d

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

XRL ad, A

01100010

(ad(A)

АБО прямоадресованого байта і константи

XRL ad, #d

01100011

(ad) = (ad) \/ #d

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

CLR A

11100100

((A) = 0

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

CPL A

11110100

(A) = ( ¬A)

Переміщення акумулятора вліво циклічно

RL A

00100011

(An+1) = (An),

n = 0 ? 6(A7)

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

RLC A

00110011

(An+1) = (An),

n = 0 ? 6(C)

(C) = (A7)

Переміщення акумулятора вправо циклічно

RR A

00000011

(A n) = (A n+1),

n = 0 ? 6(A0)

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

RRC A

00010011

(A n) = (A n+1),

n = 0 ? 6(C),

(C) = (A0)

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

SWAP A

11000100

(A0 - 3) <-> (A4 - 7)

Продовження додатка А