Untitled53

Untitled53



98 10. Ary tmetyka mikrokontrolerów

rozpoczynającego się od etykiety Duży jeśli A > 2Eh, a jeśli A <, 2Eh to do programu rozpoczynającego się etykietą Mały:

98 10. Ary tmetyka mikrokontrolerów

Tutaj:

Mały:


CJNE

JC

JNZ


A,#2Eh,Tutaj

Mały

Duży


;jeśli A > 2Eh to C=0 ;skok jeśli C=1 ;skok jeśli A * 0


10.5 Mnożenie

Operacja mnożenia MUL AB wykonuje mnożenie dwóch zmienny< 8-bitowych, z których jedna znajduje się w akumulatorze A, a druga w rejesti B. Wynik wykonanej operacji przesyłany jest do rejestru B (8 bardzie znaczących bitów wyniku) i akumulatora A (8 mniej znaczących bitó\ wyniku):

MUL AB    ;BA <— A * B

Znacznik przeniesienia C i nadmiaru OV przyjmują następujące wartości:

C = 0 zawsze

OV = 1 jeśli iloczyn jest liczbą większą od 255, tzn. zawartość rejestru B

jest niezerowa;

OV = 0 jeśli warunek nie jest spełniony.

Obie zmienne traktowane są jako liczby całkowite bez znaku. Instrukc mnożenia należy do najdłużej (wraz z instrukcja dzielenia) wykonywanyc instrukcji. Trwa 4 cykle maszynowe.

Mnożenie dwóch stałych o wartościach 18 i 29 realizowane jest następująco:

Mul. AB:

MOV

MOV

MUL


A, #18d    ;A <-18, dziesiętnie,

B, #29d    ;B <- 29, dziesiętnie

AB    ;BA <- A * B, 18 * 29 = 522 = 20Ah

stan rejestrów:    A = OAh,

B = 2,

i znaczników:    C = 0 (zawsze zerowany),

OV = 1, ponieważ B * 0 P = 0

Jeżeli operacje mnożenia dotyczą potęgi 2 (np. 2k), to można je zastąpi rozkazami k-krotnego przesunięcia logicznego w lewo, np. przy mnożei przez 4 liczby przechowywanej w rejestrze R4:

MOV A,R4


;A <— R4

CLR

C

O

t

o

RLC

A

;przesunięcie akumulatora A w lewo

RLĆ

A

;przesunięcie akumulatora A w lewo

MOV

R4,A

;R4 <- A

yV podanym przykładzie nie jest wykrywane i sygnalizowane przekroczenie zakresu liczby. Jeśli nie jest się pewnym zakresu mnożonej liczby, to bezpieczniejsze jest użycie instrukcji MUL AB.

Podobna w działaniu do rozkazu RLC A jest instrukcjia RL A, która także przesuwa w lewo zawartość akumulatora A ale w obrębie 8-bitów, a nie 9-bitów. Graficzne obie instrukcje przedstawić można w następujący sposób:

RL A


RLC A


10.6 Dzielenie

Instrukcja dzielenia DIV AB wykonuje dzielenie 8-bitowej zmiennej znajdującej się w akumulatorze A przez zmienną 8-bitową znajdującą się w rejestrze B. Część całkowita ilorazu przesyłana jest do akumulatora A, a reszta z dzielenia do rejestru B:

DIV AB    ;A <- Int( A/B), iloraz

;B <- Mod( A/B ), reszta

Znacznik przeniesienia C i nadmiaru OV przyjmują następujące wartości:

C = 0 zawsze

OV = l


OV = 0


w przypadku próby dzielenia przez zero, stan rejestrów A i B

jest nieokreślony,

jeśli dzielenie przebiegło prawidłowo

Obie zmienne traktowane są jako liczby całkowite bez znaku, a instrukcja wykonywana jest w ciągu 4 cykli maszynowych.

Przy zamianie 1-bajtowej liczby zapisanej w kodzie szesnastkowym z Przedziału 0 .. 99 na liczbę zapisaną w kodzie BCD wykonywane są instrukcje:

Hex BCD 99:

MOV

A,#5Fh

;A <- 5Fh, zamieniana liczba w kodzie ; szesnastkowym,

MOV

B,#l()

;B <-10

DIV

AB

;A <- Int(5Fh/10) = 9 jest liczbą dziesiątek, ;B <- Mod(5Fh/10) = 5 jest liczbą jedności



Wyszukiwarka

Podobne podstrony:
Untitled53 98 10. Arytmetyka mikrokontrolerów rozpoczynającego się od etykiety Duży jeśli A > 2Eh
Untitled50 92 10. Ar metyka mikrokontrolerów Znacznik C jest przeniesieniem między kolejnymi bajtami
Untitled 98 Szukanie słowa, które nie zaczyna się taką samą głoską,część 1 Przekreśl w każdym rzędzi
Untitled$ (2) mostkiem, trwający około 3 godzin, który rozpoczął się około 11 godzin temu (pacjent w
65079 Untitled Scanned 10 (9) piszemy wtedy, kiedy wzajemnie się wymieniają, np. odpocząć__
Slajd17 (52) r     Wnioskowanie do tyłu rozpoczyna się od postawienia hipotezy (celu)
skanuj0452 (2) Rozdział 17. ♦ System news Kod rozpoczyna się od wywołania funkcji session_start, doł
Slajd17 (52) r     Wnioskowanie do tyłu rozpoczyna się od postawienia hipotezy (celu)

więcej podobnych podstron