Untitled54

Untitled54



100 10. Arytmetyka mikrokontrolerów!

Jeżeli operacje dzielenia dotyczą potęgi 2 (np. 2k), to można je zastąpić' rozkazami k-krotnego przesunięcia logicznego w prawo. Należy przy tymi przeanalizować, która metoda da krótszy kod wynikowy lub która będzie j szybsza. Równie ważnym zagadnieniem jest przy operacjach przesuwania logicznego odtworzenie znaku przesuwanej liczby. Bit najbardziej znaczący (MSB) jest znakiem liczby w kodzie uzupełnienia do 2 , np:

MOV C,ACC.7 RRC A


;C <- ACC.7, odtworzenie znaku liczby ;    MSB = ACC.7

;przesunięcie akumulatora A w prawo


W przykładzie wykorzystano instrukcję RRC A, która ma (podobnie jak instrukcja przesuwania w lewo RLC A) skróconą wersję przesuwania w prawo RR A. Różnica między obu rozkazami polega na tym, że rozkaz RR C przesuwa tylko zawartość akumulatora A, a rozkaz RRC A przesuwa zawartość akumulatora A z uwzględnieniem dodatkowego 9 bitu, którym jest znacznik przeniesienia C:

RR A


c


a7


■£HT|

10.7 Korekcja dziesiętna

Ostatnią rozważaną instrukcją arytmetyczną jest instrukcja korekcji dziesiętnej DA A. Stosowana jest w operacjach dodawania liczb zapisanych w kodzie BCD, po instrukcji ADD lub ADDC. Jeśli w wyniku dodawania:

•    wartość 4 mniej znaczących bitów akumulatora A? 0 > 9 lub znacznik przeniesienia połówkowego AC = 1 to:

-> A = A + 6, do akumulatora A następuje dodanie wartości Dodawanie może ustawić znacznik przeniesienia C (C=l) ale n*może go wyzerować, tzn. C=0,

•    wartość 4 bardziej znaczących bitów akumulatora A7 4 > 9 lub znaczni przeniesienia C = 1 to:

-> A - A + 60h, do akumulatora A następuje dodanie wartości 60h

dodawanie może ustawić znacznik przeniesienia C (C=l) ale może go wyzerować, tzn. C=0.

Instrukcja DA A nic może być stosowana do bezpośredniej zamiany liczby zapisanej w kodzie binarnym na liczbę zapisaną w kodzie BCD.

Taka zamiana może być tylko wynikiem odpowiednio przygotowanego programu, który przedstawiony jest w |3j.

Sposób wykorzystania instrukcji korekcji dziesiętnej przedstawia poniższy przykład, w którym występuje dodawanie dwóch zmiennych 2-bajtowych zapisanych w kodzie BCD i zawartych w wewnętrznej pamięci RAM:

pierwsza zmienna w komórce wewnętrznej pamięci RAM:

Adres_Dana .1 - adres bajtu mniej znaczącego,

Adres_Dana_l+l - adres bajtu bardziej znaczącego,

295 BCD - wartość dziesiętna zmiennej zapisanej w kodzie BCD,

druga zmienna w komórce wewnętrznej pamięci RAM:

Adres_Dana_2 - adres bajtu mniej znaczącego,

Adres Dana_2+l - adres bajtu bardziej znaczącego,

685 BCD - wartość dziesiętna zmiennej zapisanej w kodzie BCD,

Suma BCD: MOV

R0,#Adres Dana_l

;R0 adresuje pierwszą zmienną

MOV

Rl,#Adres Dana 2

;R1 adresuje drugą zmienną i wynik

MOV

R2,#2

;R2 jest licznikiem dodawanych bajtów

CLR

C

Pla: MOV

A,@R0

;pobranie pierwszego argumentu

ADDC

A,@R1

;dodawanie z drugim argumentem

DA

A

;korekcja dziesiętna

MOV

@R1,A

;przesłanie wyniku dodawania

INC

R0

przygotowanie do dodawania

INC

R1

;kolejnych bajtów obu zmiennych

DJNZ

R2,Pla

powtórzenie pętli dodawania

Dalej:

;dalsza część programu użytkownika

Wartości poszczególnych rejestrów w trakcie wykonywania programu są

Ustępujące:

C = 0

(Adres Dana 1) = 95h = 1001 OlOlb dodawanie mniej znaczących

---(Adres Dana_2) = 85h = 1000 OlOlb bajtów

Suma: A = 1 Ah = 0001 lOlOb C = 1, A7 4 < 9, AC = 0,AjO>9

jeśli Aj () > 9 lub AC=1 to dodanie 6

.^J^rekcja dziesiętna A, 0 : 0000 01 lOb

Suma: A = 20h = 0010 OOOOb nie zmienia C, C=1 !

jeśli: A7 4 > 9 lub C=1 to dodanie 60h


Wyszukiwarka

Podobne podstrony:
Untitled48 88 10. Arytmetyka mikrokontrolerów Z przytoczonych form zapisów liczb można wysnuć następ
Untitled49 90 10 Arytmetyka mikrokontrolerem Jeśli wykonane zostanie dodawanie dwóch zmiennych 1-baj
Untitled51 94 10. Arytmetyka mikrokontrolcrói 94 10. Arytmetyka
Untitled52 96 10. Arytmetyka mikrokontrolerów różnić się więcej niż o -128 .. +127 w stosunku do adr
Untitled50 92 10. Arytmetyka mikrokontrolen Znacznik C jest przeniesieniem między kolejnymi bajtami.
Untitled55 102 10. Arytmetyka mikrokontrolerów Korekcja dziesiętna A7 Ą : 0110 OOOOb Suma: A = 80h =
Untitled53 98 10. Arytmetyka mikrokontrolerów rozpoczynającego się od etykiety Duży jeśli A > 2Eh
Jeżeli wysokość punktu A jest znana (np. jest to wysokość reperu lub wysokość dowolna przyjęta) to
larsen1304 1304 III Anestezjologia specjalistyczna Pod koniec operacji dzieci są najczęs ciej wybudz
49738 skanuj0025 język nowych mediów > operacje > jak stworzyć przekonujące obrazy, ale to, ja
Untitled20(2) 100 Dzień 3 (25 marca 1998 r.) miast możliwa dyskryminacyjna eksploatacja mierzona w k
Untitled64 120 12. Port szeregowy Jeżeli w mikrokontrolerach 8xC52 jako generator zostanie użyty lic
a= 10; cout« a; b = 20; return b; Operacje arytmetyczne Operacje arytmetyczne wykonuje się
Untitled64 120 12. Port szeregowy Jeżeli w mikrokontrolerach 8xC52 jako generator zostanie użyty lic
Untitled 5 (10) Zestaw 33 1.    Metody operacyjnego leczenia raka krtani 2.  &nb
Untitled53 98 10. Ary tmetyka mikrokontrolerów rozpoczynającego się od etykiety Duży jeśli A > 2E
83772 p1030059 (2) Operacje arytmetyczne •    Dodawanie, odejmowanie, mnożenie, 

więcej podobnych podstron