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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



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

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

Назва команди Мнемокод КОП Операція
Логічне І акумулятора і регістра ANL A, Rn 001011rrr ((A(Rn)
Логічне І акумулятора і прямоадресованого байта ANL A, ad   ((A(ad)
Логічне І акумулятора і байта з РПД ANL A, @Ri 00101011i ((A((Ri))
Логічне І акумулятора і константи ANL A, #d   ((A) = (A) /\ #d
Логічне І прямоадресованого байта і акумулятора ANL ad, A   ((ad(A)
Логічне І прямоадресованого байта і константи ANL ad, #d   ((ad) = (ad) /\ #d
Логічне АБО акумулятора і регістра ORL A, Rn 001001rrr ((A(Rn)
Логічне АБО акумулятора і прямоадресованого байта ORL A, ad   ((A(ad)

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

Логічне АБО акумулятора і байта з РПД ORL A, @Ri 00100011i ((A((Ri))
Логічне АБО акумулятора і константи ORL A, #d   ((A) = (A) \/ #d
Логічне АБО прямоадресованого байта і акумулятора ORL ad, A   ((ad(A)
Логічне АБО прямоадресованого байта і константи ORL ad, #d   ((ad) = (ad) \/ #d
АБО акумулятора і регістра XRL A, Rn 001101rrr (A(Rn)
АБО акумулятора і прямоадресованого байта XRL A, ad   (A(ad)
АБО акумулятора і байта з РПД XRL A, @Ri 00110011i (A((Ri))
АБО акумулятора і константи XRL A, #d   (A) = (A) \/ #d
АБО прямоадресованого байта і акумулятора XRL ad, A   (ad(A)
АБО прямоадресованого байта і константи XRL ad, #d   (ad) = (ad) \/ #d
Скидання акумулятора CLR A   ((A) = 0
Інверсія акумулятора CPL A   (A) = (A)
Переміщення акумулятора вліво циклічно RL A   (An+1) = (An), n = 0? 6(A7)
Переміщення акумулятора вліво через перенесення RLC A   (An+1) = (An), n = 0? 6(C) (C) = (A7)
Переміщення акумулятора вправо циклічно RR A   (A n) = (A n+1), n = 0? 6(A0)
Переміщення акумулятора вправо через перенесення RRC A   (A n) = (A n+1), n = 0? 6(C), (C) = (A0)
Обмін місцями тетрад в акумуляторі SWAP A   (A0 - 3) <-> (A4 - 7)

 

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

Група команд операцій з бітами

Таблиця А.5 - Група команд операції з бітами

Назва команди Мнемокод КОП Операція
Скидання перенесення CLR C   ((C) = 0
Скидання біта CLR bit   ((b) = 0
Установлення перенесення SETB C   ((C) = 1
Установлення біта SETB bit   ((b) = 1
Інверсія перенесення CPL C   (C) = (C)
Інверсія біта CPL bit   (b) = (b)
Логічне І біта і перенесення ANL C, bit   ((C(b)
Логічне І інверсії біта і перенесення ANL C, /bit   (C(b)
Логічне АБО біта і перенесення ORL C, bit   ((C(b)
Логічне АБО інверсії біта і перенесення ORL C, /bit   (C(b)
Пересилка біта в перенесення MOV C, bit   ((C) = (b)
Пересилка перенесення в біт MOV bit, C   ((b) = (C)

Існують команди скидання (CLR), установлення (SETB) і інверсії (CPL) біт, а також кон'юнкції і диз'юнкції біта і прапорця перенесення. Для адресації біт використовується пряма адреса. Непряма адресація бітів неможлива.

 

Група команд передавання керування

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

Назва команди Мнемокод КОП Т Б Ц Операція
Довгий перехід в повному об'ємі пам'яті в програмі LJMP ad16         ((PC) = ad16
Абсолютний перехід усередині сторінки 2 Кбайта AJMP ad11 a10a9a800001       ((PC) = (PC) + 2 (PC0 - 10) = =ad11
Короткий відносний перехід усередині сторінки 256 байтів SJMP rel         ((PC) = (PC) + 2 ((PC) = (PC) + rel
Непрямий відносний перехід JMP @A+DPTR         ((PC(DPTR)

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

Перехід, якщо акумулятор дорівнює нулю JZ rel         ((PC) = (PC) + 2 якщо (A) = = 0, те (PC) + rel
Перехід, якщо акумулятор не дорівнює нулю JNZ rel         ((PC) = (PC) + 2, якщо (A)? 0, те (PC) + rel
Перехід, якщо перенесення дорівнює одиниці JC rel         ((PC) = (PC) + 2 якщо (C) = =1, те (PC) + rel
Перехід, якщо перенесення дорівнює нулю JNC rel         ((PC) = (PC) + 2 якщо (C) = =0, те (PC) + rel
Перехід, якщо біт дорівнює одиниці JB bit, rel         ((PC) = (PC) + 3 якщо (b) = 1, те (PC) + rel
Перехід, якщо біт дорівнює нулю JNB bit, rel         ((PC) = (PC) + 3 якщо (b) = 0, те(PC) + rel
Перехід, якщо біт встановлений, з подальшими скиданням біта JBC bit, rel         ((PC) = (PC) + 3 якщо (b) = 1, те (b) = 0 і(PC) + rel
Декремент регістра і перехід, якщо не нуль DJNZ Rn, rel 11011rrr       ((PC) = (PC) + 2 ((Rn) = (Rn) - 1, якщо (Rn)? 0, те(PC) + rel

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

Декремент прямоадресованого байта і перехід, якщо не нуль DJNZ ad, rel         ((PC) = (PC) + 2 ((ad) = (ad) - - 1, якщо (ad)? 0, те(PC) + rel
Порівняння акумулятора з прямоадресованим байтом і перехід, якщо не дорівнює ad CJNE A, ad, rel         ((PC) = (PC) + 3 якщо (A)? (ad), те(PC) + rel, якщо (A)< <(ad), те (C) = 1, інакше (C) = =0
Порівняння акумулятора з константою і перехід, якщо не дорівнює d CJNE A, #d, rel         ((PC) = (PC) + 3 якщо (A)? #d, те(PC) + rel, якщо (A)< <#d, те (C) = 1, інакше (C) = =0
Порівняння регістра з константою і перехід, якщо не дорівнює d CJNE Rn, #d, rel 10111rrr       ((PC) = (PC) + 3 якщо (Rn)? #d, те(PC) + rel, якщо (Rn)< <#d, те (C) = 1, інакше (C) = =0

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

Порівняння байта в РПД з константою і перехід, якщо не дорівнює d CJNE @Ri, #d, rel 1011011i       ((PC) = (PC) + 3 якщо ((Ri))? #d, те(PC) + rel, якщо ((Ri))< <#d, те (C) = 1, інакше (C) = =0
Довгий виклик підпрограми LCALL ad16         ((PC) = (PC) + 3, ((SP) = (SP) + 1, ((SP)) = (PC0 - 7), ((SP) = (SP) + 1, ((SP)) = (PC8 - 15), ((PC) = ad16
Абсолютний виклик підпрограми в межах сторінки 2 Кбайта ACALL ad11 a10a9a810001       ((PC) = (PC) + 2 ((SP) = (SP) + 1, ((SP)) = (PC0 - 7) ((SP) = (SP) + 1 ((SP)) = (PC8 - 15), (PC0 - 10) = ad11
Повернення з підпрограми RET         (PC8 - 15) = ((SP)), ((SP) = (SP) - 1, (PC0 - 7) = ((SP)), ((SP) = (SP) - 1

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

Повернення з підпрограми обробки переривання RETI         (PC8 - 15) = ((SP)), ((SP) = (SP) - 1, (PC0 - 7) = ((SP)), ((SP) = (SP) - 1
«Пуста» команда NOP         ((PC) = (PC) + 1
Примітка. Асемблер допускає використання узагальненого імені команд JMP і CALL, які у процесі трансляції замінюються оптимальними за формату командами виклику (ACALL, LCALL) або переходу (AJMP, SJMP, LJMP)

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

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

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

 

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

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

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

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

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

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

WAIT: CJNE A, P0, WAIT

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

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

 



Поделиться:


Последнее изменение этой страницы: 2016-06-07; просмотров: 195; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.14.33.175 (0.011 с.)