Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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




До даної групи відносяться 24 команди, короткий опис яких наведено в табл. 3. З неї випливає, що мікроконтролери сімейства MCS-51 виконують достатньо широкий набір команд для організації обробки даних цілого типу, включаючи команди множення та ділення. В табл. 3 також приведені типи команд (Т) у відповідності з табл. 1, їх довжина в байтах (Б) та час виконання в машинних циклах (Ц).

Табл. 3. Арифметичні операції

Назва команди Мнемокод КОП Т Б Ц Операция
Додавання вмістимого аккумулятора з регістром Rn, (n=0÷7) ADD A, Rn 00l01rrr       (A) (A) + (Rn)
Додавання вмістимого аккумулятора з адресом, що прямо адресується ADD A, ad         (A) (A) + (ad)
Додавання вмістимого аккумулятора з байтом з РПД @Ri, (i=0,1) ADD A, @Ri 0010011i       (A) (A) + ((Ri))
Додавання аккумулятора з константою ADD A, #d         (A) (A) + #d
Додавання аккумулятора з регістром та переносом ADDC A, Rn 00111rrr       (A) (A) + (Rn) + (C)
Додавання аккумулятора з адресом, що прямо адресується та переносом ADDC A, ad         (A) (A) + (ad) + (C)
Додавання аккумулятора з байтом з РПД та переносом ADDC A, @Ri 0011011i       (A) (A) + ((Ri)) + (C)
Додавання аккумулятора з константою та переносом ADDC A, #d         (A) (A) + # d + (C)
Десяткова корекція аккумулятора DA A         Якщо (А0…3)>9 або ((AC)=1), то (А0…3) (А0…З) + 6. Якщо (А4…7) >9 або ((С)=1), то (А4…7) (А4…7) + 6
Віднімання від вмістимого аккумулятора регістру та позички SUBB A, Rn 10011rrr       (A) (A) - (C) - (Rn)
Віднімання від вмістимого аккумулятора адресу, що прямо адресується, та позички SUBB A, ad         (A) (A) - (C) - ((ad))
Віднімання від вмістимого аккумулятора байту, що прямо адресується, та позички SUBB А, @Ri 1001011i       (A) (A) - (C) - ((Ri))
Віднімання від вмістимого аккумулятора константи та позички SUBB А, d         (A) (A) - (C) - #d
Інкремент аккумулятора INC А         (A) (A) + 1
Інкремент регістру INC Rn 00001rrr       (Rn) (Rn) +1
Інкремент байту, що прямо адресується INC ad         (ad) (ad) + 1
Інкремент байту в РПД INC @Ri 0000011i       ((Ri)) ((Ri)) + 1
Інкремент вказівника даних INC DPTR         (DPTR)(DPTR) + 1
Декремент аккумулятора DEC A         (A) (A) – 1
Декремент регістру DEC Rn 00011rrr       (Rn) (Rn) – 1
Декремент байту, що прямо адресується DEC ad         (ad) (ad) – 1
Декремент байту в РПД DEC @Ri 0001011i       ((Ri)) ((Ri)) – 1
Множення вмістимого аккумулятора на вмістиме регістру В MUL AB         (B)(A) (A)*(В)
Ділення вмістимого аккумулятора на регістр В DIV AB         (B).(A) (A)/(В)

При виконанні команд ADD, ADDC, SUBB, MUL, DIV встановлюються прапорці регістру PSW. Прапорець С встановлюється при переносі з розряду D7, тобто у випадку, коли результат не вміщується в вісім розрядів. Прапорець АС встановлюється при переносі з розряду D3 в командах додавання та віднімання і використовується при реалізації десяткової арифметики. Цей прапорець використовується командою DA A. Прапорець 0V встановлюється при переносі з розряду D6, тобто, якщо результат не вміщується в сім розрядів і восьмий може бути інтерпретований як знаковий. Цей прапорець використовується при організації обробки чисел зі знаком. Прапорець P встановлюється та скидається апаратно. Якщо число одиничних біт в акумуляторі непарне, то P=1, в іншому випадку P=0.

 

29) ADD A, Rn

Ця команда (“додавання”) додає вмістиме аккумулятора А з вмістимим байта-джерела, залишаючи результат в аккумуляторі. При виникненні переносів з байтів 7 та 3 встановлюються прапорці переносу (С) та додаткового переносу (AC) відповідно. В іншому випадку ці прапорці скидаються. При додаванні цілих чисел без знаку прапорець переносу “С” вказує на появу переповнення. Прапорець переповнення (0V) встановлюється, якщо є перенос з 6-го біту і немає з біту 7, або є перенос з біту 7 та немає з біту 6. В іншому випадку 0V скидається. При додаванні цілих чисел зі знаком 0V вказує на від’ємну величину, одержану при додаванні двох додатних операндів або на додатну суму для двох від’ємних операндів.

(A)=C3H, (R6)=AAH

ADD A, R6

(A)=6DH, (R6)=AAH, (AC)=0, (C)=1, (0V)=1.

 

30) ADD A, @Ri

(A)=95H, (R1)=31H, (31H)=4CH

ADD A, @R1

(A)=E1H, (31H)=4CH, (C)=0, (AC)=1, (0V)=0.

 

31) ADD A, ad

(A)=77H, (90H)=FFH

ADD A, 90H

(A)=76H, (90H)=FFH, (C)=1, (0V)=0, (AC)=1.

 

32) ADD A, #d

(A)=09H

ADD A, #D3H

(A)=DCH, (C)=0, (0V)=0, (AC)=0.

 

33) ADDC A, Rn

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

(A)=B2H, (R3)=99, (C)=1

ADDC A, R3

(A)=4CH, (R3)=99H, (C0=1, (AC)=0, (0V)=1.

 

34) ADDC A, @Ri

(A)=D5H, (R0)=3AH, (3AH)=1AH, (C)=1

ADDC A, @R0

(A)=F0H, (3AH)=1AH, (C)=0, (AC)=1, (0V)=0.

 

35) ADDC A, ad

(A)=11H, (80H)=DFH, (C)=1,

ADDC A, 80H,

(A)=F1H, (C)=0, (AC)=1, (0V)=0.

 

36) ADDC A, #d

(A)=55H, (C)=0

ADDC A, #55H

(A)=AAH, (C)=0, (AC)=0, (0V)=1.

 

37) DA A

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

(A)=56H, (R3)=67H, (C)=1

ADDC A, R3

DA A

(A)=24H, (R3)=67H, (C)=1

 

(A)=30H, (C)=0

ADD A, #99H

DA A

(A)=29H, (C)=1

 

38) SUBB A, Rn

Команда “віднімання з позичкою” віднімає вказану змінну разом з прапорцем переносу від вмістимого аккумулятора, результат заноситься в аккумулятор. Ця команда встановлює прапорець переносу (позички), якщо при відніманні для біту 7 необхідна позичка, в іншому випадку прапорець переносу скидається. Якщо прапорець переносу встановлений перед виконанням цієї команди, то це вказує на те, що позичка потрібна при виконанні з збільшеною точністю на попередньому кроці, - тому прапорець переносу віднімається від вмістимого аккумулятора разом з операндом джерела. Прапорець АС встановлюється, якщо позичка необхідна для біту 3 і скидається в іншому випадку. Прапорець переповнення (0V) встановлюється, якщо позичка необхідна для біту 6, але немає його для біту 7, або є для біту 7, але немає для біту 6. При відніманні цілих зі знаком прапорець 0V вказує на від’ємне число, яке одержується при відніманні від’ємної величини від додатної, або додатне число, яке отримується при відніманні додатного числа від від’ємного. Операнд джерела допускає чотири режими адресації, які розглянемо на прикладах.

(A)=C9H, (R2)=54H, (C)=1,

SUBB A, R2,

(A)=74H, (R2)=54H, (C)=0, (0V)=1.

 

39) SUBB A, @Ri,

(A)=49H, (33H)=68H, (C)=1, (R0)=33H,

SUBB A, @R0,

(A)=E1H, (C)=1, (AC)=0, (0V)=0.

 

40) SUBB A, ad

(A)=97H, (B)=25H, (AC)=0, (0V)=1,

SUBB A, B,

(A)=72H, (B)=25H, (C)=0, (AC)=0, (0V)=1.

 

41) SUBB A, #d

(A)=BEH, (C)=0,

SUBB A, #3FH

(A)=7FH, (C)=0, (0V)=1.

 

42) INC A

Команда “інкремент” виконує додавання “1” до вказаної змінної і не впливає на прапорці. Ця команда допускає чотири режими адресації.

(A)=1FH, (AC)=0,

INC A,

(A)=20H, (AC)=0.

 

43) INC Rn,

(R4)=FFH, (C)=0, (AC)=0.

INC R4,

(R4)=00H, (C)=0, (AC)=0.

 

44) INC ad

(43H)=22H,

INC 43H,

(43H)=23H.

 

45) INC @Ri

(41H)=4FH, (R1)=41H, (AC)=0,

INC @R1,

(R1)=41H, (41H)=50H, (AC)=0.

 

46) INC DPTR

Команда “інкремент вказівника даних” виконує інкремент (додавання “1”) 16-бітного вказівника даних. Додавання “1” здійснюється до 16-ти бітів. Якщо виникає переповнення молодшого байту вказівника даних (DPL) з FFH в 00H, то це приводить до інкременту старшого байту (DPH). На прапорці ця команда не впливає.

(DPH)=12H, (DPL)=FFH,

INC DPTR,

(DPH)=13H, (DPL)=00H.

47) DEC A

Команда “декремент” проводить віднімання “1”від вказаного операнду. Команда DEC не впливає на прапорці. Ця команда допускає чотири режими адресації операнду.

(A)=11H, (C)=1, (AC)=1,

DEC A

(A)=10H, (C)=1, (AC)=1.

 

48) DEC @Ri

(R1)=7FH, (7EH)=40H, (7FH)=00H,

DEC @R1

DEC R1

DEC @R1

(R1)=7FH, (7EH)=3FH, (7FH)=FFH.

 

49) DEC Rn

(R4)=5CH,

DEC R4,

(R4)=5BH.

 

50) DEC ad

(SCON)=A0H, (C)=1, (AC)=1,

DEC SCON,

(SCON)=9FH, (C)=1, (AC)=1.

 

51) MUL AB

Команда ”множення”, множить 8-бітні цілі числа без знаку з аккумулятора та регістру В. Старший байт 16-бітного добутку заноситься в регістр В, а молодший в аккумулятор А. Якщо результат добутку більший ніж FFH (255), то встановлюється прапорець переповнення (0V), в іншому випадку він скидається. Прапорець переносу завжди скидається.

(A)=50H, (B)=A0H, (C)=1, (0V)=0,

MUL AB

(A)=20H, (B)=03H, (C)=0, (0V0=1.

 

52) DIV AB

Команда “ділення” ділить 8-бітне ціле число без знаку з акумулятора А на 8-бітне ціле без знаку з регістру В. В аккумулятор заноситься ціла частина частки, а в регістр В – остача. Прапорці переносу (С) та переповнення (0V) скидаються. Якщо (A)<(B), то прапорець додаткового переносу (AC) не скидається. Прапорець переносу скидається в будь-якому випадку.

(A)=FBH, (B0=12H, (C)=1,

DIV AB

(A)=0DH, (B)=11H, (C)=0.

Якщо регістр В містить 00, то після виконання команди DIV вмістиме аккумулятора А та регістру В будуть невизначені. Прапорець переносу скидається, а прапорець переповнення встановлюється в “1”.

 

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...