background image

 

 

Procesory sygnałowe

Wykład 4 

Asembler procesora 

ADSP-21065L (operacje ALU, 

mnożarki i przesuwnika 

bitowego)

Dr inż. Robert 
Wielgat

background image

 

 

Grupy instrukcji procesora 

ADSP – 21065L 

Językiem asemblera dla procesora ADSP-21065L jest język 

easm21k

 przeznaczony dla procesorów ADSP-21x6x typu 

SHARC. W języku asemblera easm21k można wyróżnić 
następujące grupy instrukcji:

 instrukcje arytmetyczne i zapisujące
 instrukcje sterujące
 instrukcje pośredniego zapisywania (ang. Immediate 
move)

 pozostałe instrukcje

Każdy rozkaz asemblera należy zkończyć znakiem 

‘;’ 

(średnik)

Komentarze zaczynają się od znaków 

‘//’ (podwójny 

ukośnik)

Rozróżniane są duże i małe litery

background image

 

 

Oznaczenia rejestrów 

Typ rejestru

Oznaczenie 

rejestru

Funkcja rejestru

Plik 

rejestrów

R0 – R15

Rejestry z pliku rejestrów. operacje 

stałoprzecinkowe

F0 – F15

Rejestry z pliku rejestrów. operacje 

zmiennoprzecinkowe

Sekwenter

Programow

y

PC

Licznik programu (tylko do odczytu)

PCSTK

Szczyt stosu PC (licznika programu)

PCSTKP

Wskaźnik stosu PC

FADDR

Pobieranie adresu (tylko do odczytu)

DADDR

Dekodowanie adresu (tylko do 

odczytu)

LADDR

Adres zakończenia pętli (szczyt stosu 

adresów pętli)

CURLCNTR

Licznik bieżącej pętli: szczyt stosu 

licznika pętli

LCNTR

Liczba pętli dla następnej 

zagnieżdżonej pętli kontrolowanej 

przez licznik

background image

 

 

Oznaczenia rejestrów 

Typ 

rejestru

Oznaczenie 

rejestru

Funkcja rejestru

Rejestry 

generatoró

w adresów 

danych

I0-I7

Rejestry indeksowe DAG1

M0 – M7

Rejestry modyfikujące DAG1

L0 – L7

Rejestry długości (length) DAG1

B0 – B7

Rejestry bazowe DAG1

I8 – I15

Rejestry indeksowe DAG2

M8 – M15

Rejestry modyfikujące DAG2

L8 – L15

Rejestry długości DAG2

B8 – B15

Rejestry bazowe DAG2

Rejestry 

wymiany 

danych

PX1

Wymiana danych między PMD a DMD

(16 bitów)

PX2

Wymiana danych między PMD a DMD

(32 bity)

PX

48-bitowe połączenie PX1 oraz PX2

background image

 

 

Operacje stałoprzecinkowe na 

ALU – dodawanie i odejmowanie 

Rn = Rx + Ry 

np. R1 = R2 + 

R3

Rn = Rx - Ry 

Rn = Rx + Ry + CI

(

dodawanie z 

przeniesieniem

)

Rn = Rx - Ry + CI -1

 

(

odejmowanie z pożyczką

)

32-bitowy wynik jest zapisywany w stałoprzecinkowym polu 40-
bitowego rejestru Rn.

Powyższe operacje ustawiają następujące flagi w rejestrze 
ASTAT: 
AZ jeżeli wynik jest zerowy, AN jeżeli najbardziej znaczący bit 
jest jedynką, AV jeżeli wystąpi przepełnienie, AC jeżeli wystąpi 
przeniesienie (pożyczka), pozostałe flagi (AU, AS, AI) są 
zerowane.

background image

 

 

Przykład dodawania i 

odejmowania 

// Realizowana operacja dodawania:

// a = b + c – (d + e)

R2 = 67;

// b=67

R3 = 12;

// c=12

R4 = 31;

// d=31

R5 = 8;

// e = 8

R1 = R2 + R3; 

// R1 = b + c

R6 = R4 + R5; 

// R6 = d + e

R1 = R1 – R6;

// nowa zawartość R1 = stara 

zawartość 

// R1 – zawartość R6: a 

= b + c - (d + e)

background image

 

 

Operacje stałoprzecinkowe na 

ALU 

Rn = (Rx + Ry)/2

COMP(Rx, Ry)

(

operacja porównania

)

Tryb zaokrąglania może być zaokrąglaniem ku najbliższemu 
(toward nearest) lub zaokrąglaniem przez obcięcie (truncation)

Powyższa operacja ustawia następujące flagi w rejestrze ASTAT: 
AZ jeżeli wynik jest zerowy, AN jeżeli najbardziej znaczący bit 
jest jedynką, AC jeżeli wystąpi przeniesienie (pożyczka), 
pozostałe flagi (AV, AU, AS, AI) są zerowane.

Powyższe operacje ustawiają następujące flagi w rejestrze 
ASTAT: 
AZ jeżeli operand Rx jest równy operandowi Ry,wynik jest 
zerowy, AN jeżeli operand Rx jest mniejszy niż operand Ry, 
pozostałe flagi (AV, AC, AU, AS, AI, ) są zerowane.

Rejestr 

ASTAT

 przechowuje wyniki 

8 ostatnich wyników

 

porównań na bitach 24:31 (CACC0:CACC7).

background image

 

 

Operacje stałoprzecinkowe na 

ALU 

Rn = Rx + CI

(

dodawanie przeniesienia

)

Rn = Rx + CI - 1 

(

dodawanie pożyczki

)

Rn = Rx + 1

(

inkrementacja

)

Rn = Rx – 1

(

dekrementacja

)

32-bitowy wynik jest zapisywany w stałoprzecinkowym polu 40-
bitowego rejestru Rn.

Powyższe operacje ustawiają następujące flagi w rejestrze 
ASTAT: 
AZ jeżeli wynik jest zerowy, AN jeżeli najbardziej znaczący bit 
jest jedynką, AV jeżeli wystąpi przepełnienie, AC jeżeli wystąpi 
przeniesienie (pożyczka), pozostałe flagi (AU, AS, AI) są 
zerowane.

Rn = - Rx

background image

 

 

Operacje stałoprzecinkowe na 

ALU 

Rn = ABS Rx

(

wartość bezwzględna

)

Rn = PASS Rx

Powyższa operacja ustawia następujące flagi w rejestrze ASTAT: 
AZ i AN jak w poprzednim rozkazie, AV jeżeli wystąpi 
przepełnienie, AC jeżeli wystąpi przeniesienie (pożyczka), AS 
jeżeli Rx jest ujemne, flagi AU, AI są zerowane.

Powyższa operacja 

przenosi

 operand 

Rx

 za pomocą ALU 

do 

rejestru Rn

.

Operacja ustawia następujące flagi w rejestrze ASTAT: AZ i AN jak 
w poprzednim rozkazie, flagi AU, AV, AC, AS, AI są zerowane.

background image

 

 

Operacje stałoprzecinkowe na 

ALU 

Rn = Rx AND Ry 

Rn = Rx OR Ry 

Rn = Rx XOR Ry 

Rn = NOT Rx

Powyższe operacje stanowią grupę 

operacji logicznych

 z 

wykorzystaniem ALU. Operacje logiczne wykonywane są na 
każdej parze 

odpowiadających sobie bitów

 operandów Rx 

oraz Ry, a w przypadku instrukcji NOT na każdym bicie 
operandu Rx.

Powyższe operacje ustawiają następujące flagi w rejestrze 
ASTAT: 
AZ, AN, AV, AC, AU, AS, AI jak w poprzednim rozkazie.

background image

 

 

Operacje stałoprzecinkowe na 

ALU 

Rn = MIN(Rx,Ry) 

Rn = MAX(Rx,Ry) 

Rn = CLIP Rx BY Ry 

Powyższe operacje zwracają 

mniejszy

 albo 

większy

 z 

operandów Rx, Ry.

Powyższe operacje ustawiają następujące flagi w rejestrze ASTAT: 

AZ, AN, AV, AC, AU, AS, AI jak w poprzednim rozkazie.

Powyższa operacja zwraca operand 

Rx

 jeżeli 

wartość 

bezwzględna

 operandu 

Rx

 jest 

mniejsza niż

 

wartość 

bezwzględna

 operandu 

Ry

. W przeciwnym przypadku zwraca 

|

Ry|

 jeżeli 

Rx 

jest 

dodatnie

 oraz 

-|Ry|

 jeżeli 

Rx

 jest 

ujemne

.

Powyższe operacje ustawiają następujące flagi w rejestrze ASTAT: 

 AZ, AN, AV, AC, AU, AS, AI jak w poprzednim rozkazie.

background image

 

 

Operacje zmiennoprzecinkowe 

na ALU 

Fn = Fx + Fy 

np. F1 = 

F2 + F3

Fn = Fx - Fy 

W powyższych operacjach jest wykonywane 

dodawanie

 

(

odejmowanie

liczb zmiennoprzecinkowych

 oraz 

średnia

 

dwóch liczb

. Znormalizowany wynik jest umieszczany w 

rejestrze Fn. W operacjach wykorzystywane są dwa tryby 
zaokrągleń: zaokrąglenie ku najbliższemu (toward nearest) lub 
zaokrąglenie przez obcięcie do zakresu 32 lub 40 bitowego. 

Powyższe operacje ustawiają następujące flagi w rejestrze ASTAT: 
AZ jeżeli zaokrąglony wynik jest niestandardowy (wykładnik 
potęgi 
e < -126) lub zerowy, AU jeżeli zaokrąglony wynik jest 
niestandardowy, AN jeżeli wynik jest ujemny, AV jeżeli wystąpi 
przepełnienie zaokrąglonego wyniku (wykładnik potęgi e > +127)

 

, AI jeżeli obydwa wejściowe operandy nie są liczbami (NaN) lub 
mają wartości nieskończoność o przeciwnych znakach, flagi AC, 
AS są zerowane. 

Fn = (Fx + 
Fy)/2

background image

 

 

Operacje zmiennoprzecinkowe 

na ALU 

Fn = ABS(Fx + Fy)
Fn = ABS(Fx – Fy) 

W powyższych operacjach jest obliczana 

wartość 

bezwzględna sumy

 (

różnicy

) dwóch liczb 

zmiennoprzecinkowych: 

Fx

 oraz 

Fy

. Znormalizowany wynik jest 

umieszczany w rejestrze Fn. W operacjach wykorzystywane są 
dwa tryby zaokrągleń: zaokrąglenie ku najbliższemu (toward 
nearest) lub zaokrąglenie przez obcięcie do zakresu 32 lub 40 
bitowego. 

Powyższe operacje ustawiają następujące flagi w rejestrze 
ASTAT: 
AZ jeżeli zaokrąglony wynik jest niestandardowy (wykładnik 
potęgi 
e < -126) lub zerowy, AU jeżeli zaokrąglony wynik jest 
niestandardowy, AV jeżeli wystąpi przepełnienie zaokrąglonego 
wyniku (wykładnik potęgi e > +127)

 

, AI jeżeli obydwa 

wejściowe operandy nie są liczbami (NaN) lub mają wartości 
nieskończoność o przeciwnych znakach, flagi AN, AC, AS są 
zerowane. 

background image

 

 

Operacje zmiennoprzecinkowe na ALU 

COMP(Fx, Fy)

(

operacja porównania

)

Operacja porównania liczb zmiennoprzecinkowych działa 
analogicznie jak operacja porównania liczb stałoprzecinkowych. 
Jedyna różnica polega na ustawianiu flagi AI jeżeli którykolwiek 
z operandów jest typu NaN w przypadku porównania liczb 
zmiennoprzecinkowych. W przeciwnym przypadku flaga AI jest 
zerowana.

Fn = - Fx

Operacja 

zmienia znak

 operandu na przeciwny.

Powyższe operacje ustawiają następujące flagi w rejestrze 
ASTAT: 
AZ jeżeli wynik jest zerowy, AN jeżeli wynik operacji jest ujemny, 
AI jeżeli wynik operacji jes typu NaN, flagi AV, AC, AU, AS są 
zerowane.

background image

 

 

Operacje zmiennoprzecinkowe na ALU 

Fn=ABS Fx

Operacja zwraca 

wartość bezwzględną

 operandu w rejestrze 

Fx przez ustawienie bitu znaku  operandu na zero.

Powyższe operacje ustawiają następujące flagi w rejestrze 
ASTAT: 
AZ jeżeli wynik jest równy +zero., AS jeżeli operand wejściowy 
jest ujemny, AI jeżeli wynik operacji jes typu NaN, flagi AV, AC, 
AU, AS są zerowane.

Fn = PASS Fx

Operacja 

przenosi 

zmiennoprzecinkowy operand 

Fx

 przez ALU 

do

 zmiennoprzecinkowego pola w rejestrze 

Fn

.

Powyższe operacje ustawiają następujące flagi w rejestrze 
ASTAT: 
AZ jeżeli wynik jest +/- zero, AN jeżeli wynik operacji jest 
ujemny, AI jeżeli wynik operacji jes typu NaN, flagi AV, AC, AU, 
AS są zerowane.

background image

 

 

Operacje zmiennoprzecinkowe na ALU 

Fn=RND Fx

Operacja 

zaokrągla 

zmiennoprzecinkowy operand w rejestrze 

Fx do zakresu 32 bitów. Zaokrąglanie może być w kierunku zera 
lub ku najbliższemu zgodnie z ustawieniem bitu zaokrągleń w 
rejestrze MODE1.

Fn = SCALB Fx BY Ry

Skaluje 

wykładnik operandu w rejestrze Fx poprzez dodanie do 

niego stałoprzecinkowej liczby w kodzie uzupełnień do dwóch z 
rejestru Ry.

Rn = MANT Fx

Operacja 

zwraca mantysę

 (część ułamkową z 

jawnym 

bitem 

ukrytym z pominięciem bitu znaku zmiennoprzecinkowego 
operandu w Fx. Mantysa jest zapisywana w formacie 1.31 w 
stałoprzecinkowym polu w rejestrze Rn

Rn = LOGB Fx

Przekształca wykładnik zmiennoprzecinkowego operandu w Fx 
w stałoprzecinkową liczbę bez znaku w kodzie uzupełnień do 
dwóch. 

background image

 

 

Operacje zmiennoprzecinkowe na ALU 

Rn = FIX Fx

Rn = TRUNC Fx

Operacja przekształca zmiennoprzecinkowy operand z rejestru Fx 
na 32-bitową liczbę całkowitą w kodzie uzupełnień do dwóch. 
Jeżeli bit TRUNC w rejestrze MODE1 jest ustawiony na 1 operacja 
FIX obcina mantysę w kierunku  -nieskończoność, jeżeli 
natomiast bit TRUNC w rejestrze MODE1 jest ustawiony na 0 
operacja FIX zaokrągla mantysę do najbliższej liczby całkowitej. 
Operacja TRUNC zawsze obcina mantysę w kierunku zera 
niezależnie od ustawienia bitu TRUNC.

Rn = FIX Fx BY Ry

Rn = TRUNC Fx BY Ry

W powyższych operacjach przed konwersją do wykładnika 
potęgi operandu w rejestrze Fx jest dodawany całkowity 
stałoprzecinkowy czynnik skalujący w kodzie uzupełnień do 
dwóch zapisany w Ry. Wynik operacji jest zapisywany w 
stałoprzecinkowym polu rejestru Rn w formacie 32.0

background image

 

 

Operacje zmiennoprzecinkowe na ALU 

Fn = FLOAT Rx

Operacja przekształca stałoprzecinkowy operand z rejestru Rx na 
liczbę zmiennoprzecinkową. 

W powyższej operacji przed konwersją do wykładnika potęgi 
operandu w rejestrze Rx jest dodawany całkowity 
stałoprzecinkowy czynnik skalujący w kodzie uzupełnień do 
dwóch zapisany w Ry.

Fn = FLOAT Rx BY Ry

Fn = RECIPS Fx

Operacja zwraca liczbę stanowiącą podstawę do obliczenia 
odwrotności operandu Fx. Wartości zwracanych liczb są 
stablicowane  w wewnętrznej pamięci ROM. 

Fn = RSQRTS Fx

Operacja zwraca liczbę stanowiącą podstawę do obliczenia 
odwrotności pierwiastka kwadratowego operandu Fx. Wartości 
zwracanych liczb są stablicowane  w wewnętrznej pamięci ROM. 

background image

 

 

Operacje zmiennoprzecinkowe na ALU 

Fn = Fx COPYSIGN Fy

Operacja 

kopiuje znak

 zmiennoprzecinkowego operandu z Fy do 

operandu Fx nie zmieniając jego mantysy i wykładnika. Rezultat jest 
zapisywany do rejestru Fn.

 

Fn = MIN(Fx,Fy)

Fn = MAX(Fx,Fy)

Działanie analogiczne jak w przypadku Rn = MAX(Rx, Ry). Dodatkowo 
jest ustawiana flaga AI w przypadku, gdy przynajmniej jeden z 
operandów jest typu NaN.

 

Fn = CLIP Fx BY Fy

Działanie analogiczne jak w przypadku Rn = MIN(Rx, Ry). Dodatkowo 
jest ustawiana flaga AI w przypadku, gdy przynajmniej jeden z 
operandów jest typu NaN. 

Działanie analogiczne jak w przypadku Rn = CLIP Rx by Ry.

 

Operacja zwraca 

operand Fx jeżeli wartość bezwzględna operandu Fx jest mniejsza niż 
wartość bezwzględna operandu Fy. W przeciwnym przypadku zwraca |Fy| 
jeżeli Fx jest dodatnie oraz -|Fy| jeżeli Fx jest ujemne. Dodatkowo jest 
ustawiana flaga AI w przypadku, gdy przynajmniej jeden z operandów jest 
typu NaN

background image

 

 

Operacje 

mnożarki 

Rn = Rx * Ry 

mod2

MRF = Rx * Ry mod2

MRB = Rx * Ry mod2

Operacja 

oblicza iloczyn operandów

 z rejestrów Rx oraz Ry. Wynik jest 

zapisywany do rejestru Rn lub do jednego z rejestrów akumulacyjnych 
mnożarki MRF oraz MRB. Jeżeli jako rejestr docelowy jest określony rejestr 
Rn wówczas jest zapisywana jedynie 32-bitowa część wyniku. Jeżeli są 
wyspecyfikowane rejestry MRF lub MRB wówczas jest zapisywany cały 80-
bitowy wynik.

Ustawiane flagi: MN jeżeli wynik jest ujemny; MV jeżeli nie wszystkie 
najbardziej znaczące bity wyniku są równe 0 (wynikiem jest liczba ze 
znakiem lub bez znaku) lub 1 (wynikiem jest liczba ze znakiem). Liczba 
najbardziej znaczących bitów wyniku zależy od formatu. 49 bitów (48 
bitów)– liczba całkowita bez znaku (ze znakiem), 33 bity (32 bity)– liczba 
ułamkowa bez znaku (ze znakiem); MU jeżeli 48 najbardziej znaczących 
bitów wyniku ułamkowego jest  równych zero (wynikiem jest liczba ze 
znakiem lub bez znaku)

 

lub jeden (wynikiem jest liczba ze znakiem), a nie 

wszystkie 32 mniej znaczące bity są równe zero. Jest to sytuacja tzw. 
niedomiaru (ang. underflow). W przypadku liczb całkowitych niedomiar nie 
występuje; Flaga MI jest zerowana.

background image

 

 

Operacje MAC mnożarki 

Rn = MRF + Rx * Ry mod2

Rn = MRB + Rx * Ry mod2

MRF = MRF + Rx * Ry mod2

MRB = MRB + Rx * Ry mod2

Operacja 

oblicza iloczyn operandów

 z rejestrów Rx oraz Ry i 

dodaje wynik

 

do wyspecjalizowanego rejestru MR. Wynik jest zapisywany do rejestru Rn 
lub do jednego z rejestrów akumulacyjnych mnożarki MRF oraz MRB. W 
przypadku liczb ułamkowych wynik jest zaokrąglany o ile jest aktywny 
tryb zaokrąglania. Jeżeli jako rejestr docelowy jest określony rejestr Rn 
wówczas jest zapisywana jedynie 32-bitowa część wyniku. Jeżeli są 
wyspecyfikowane rejestry MRF lub MRB wówczas jest zapisywany cały 80-
bitowy wynik.

Ustawiane flagi: tak jak w przypadku operacji mnożenia

background image

 

 

Operacje MAC mnożarki 

(odejmowanie)

Rn = MRF - Rx * Ry mod2

Rn = MRB - Rx * Ry mod2

MRF = MRF - Rx * Ry mod2

MRB = MRB - Rx * Ry mod2

Operacja 

oblicza iloczyn operandów

 z rejestrów Rx oraz Ry i 

odejmuje 

wynik

 od zawartości rejestru MR. Wynik jest zapisywany do rejestru Rn 

lub do jednego z rejestrów akumulacyjnych mnożarki MRF oraz MRB. W 
przypadku liczb ułamkowych wynik jest zaokrąglany o ile jest aktywny 
tryb zaokrąglania. Jeżeli jako rejestr docelowy jest określony rejestr Rn 
wówczas jest zapisywana jedynie 32-bitowa część wyniku. Jeżeli są 
wyspecyfikowane rejestry MRF lub MRB wówczas jest zapisywany cały 80-
bitowy wynik.

Ustawiane flagi: tak jak w przypadku operacji mnożenia

background image

 

 

Operacje mnożarki

Rn = SAT MRF 

mod1

Rn = SAT MRB mod1

MRF = SAT MRF mod1

MRB = SAT MRB mod1

Jeżeli wartość w wyspecyfikowanym rejestrze jest większa niż wartość 
maksymalna wyspecyfikowanego formatu danych wówczas mnożarka 
ustawia wynik operacji na maksimum. W innym przypadku wartość w 
rejestrze MR nie jest zmieniana. Jeżeli jako rejestr docelowy jest określony 
rejestr Rn wówczas jest zapisywana jedynie 32-bitowa część wyniku. Jeżeli 
są wyspecyfikowane rejestry MRF lub MRB wówczas jest zapisywany cały 
80-bitowy wynik.

Ustawiane flagi: MN jeżeli wynik jest ujemny; MV jest zerowana; MU jeżeli 
48 najbardziej znaczących bitów wyniku ułamkowego jest  równych zero 
(wynikiem jest liczba ze znakiem lub bez znaku)

 

lub jeden (wynikiem jest 

liczba ze znakiem), a nie wszystkie 32 mniej znaczące bity są równe zero. 
Jest to sytuacja tzw. niedomiaru (ang. underflow). W przypadku liczb 
całkowitych niedomiar nie występuje; Flaga MI jest zerowana.

background image

 

 

Operacje mnożarki

Rn = RND MRF mod1

Rn = RND MRB mod1

MRF = RND MRF mod1

MRB = RND MRB mod1

Zaokrągla wartość w rejestrze MR ku najbliższemu na pozycji 32 bitu. 
Jeżeli jako rejestr docelowy jest określony rejestr Rn wówczas jest 
zapisywana jedynie 32-bitowa część wyniku. Jeżeli są wyspecyfikowane 
rejestry MRF lub MRB wówczas jest zapisywany cały 80-bitowy wynik.

Ustawiane flagi: tak jak w przypadku operacji mnożenia

MRF = 0

MRB = 0

Zeruje wszystkie bity wyspecyfikowanego rejestru MR.

Ustawiane flagi: Flagi MN, MV, MU, MI są zerowane

background image

 

 

Operacje mnożarki

MR =Rn

Rn = MR

Operacja przenoszenia danych. Przeniesienie danych do rejestru MR 
powoduje wpisanie stałoprzecinkowego pola w rejestrze Rn do 
wyspecyfikowanego rejestru MR. Transfer do rejestru Rn powoduje 
transfer zawartości określonego rejestru MR do stałoprzecinkowego pola w 
rejestrze Rn. MR może przyjmować wartość: MR0F, MR1F, MR2F, MR0B, 
MR1B, MR2B. 

Ustawiane flagi: Flagi MN, MV, MU, MI są zerowane

Fn = Fx * Fy

Mnożenie dwóch zmiennoprzecinkowych operandów Fx oraz Fy. 
Wynik jest umieszczany w rejestrze Fn. 

Ustawiane flagi: MN jest ustawiane, gdy wynik operacji jest ujemny, 
MV jest ustawiane, gdy wykładnik potęgowy wyniku jest większy niż 
127, MU jest ustawiane, gdy wykładnik potęgowy wyniku jest 
mniejszy niż -126, MI jest ustawiane, gdy jeden z operandów 
wejściowych jest typu NaN, lub gdy posiada wartość +/- 
nieskończoność lub +/- zero.

background image

 

 

Operacje przesuwania logicznego

Rn = LSHIFT Rx BY Ry

Rn = LSHIFT Rx BY <data8>

Operacja 

logicznie przesuwa

 zawartość Rx o 32-bitową wartość zawartą 

w rejestrze Ry lub 8-bitową wartość natychmiastową podaną w kodzie 
rozkazu. Wynik jest zapisywany na 32 najstarszych bitach rejestru Rn. 

Dodatnia wartość

 natychmiastowa lub w rejestrze Ry powoduje 

przesuwanie logiczne bitów 

w lewo

 natomiast 

ujemna w prawo

. 8-

bitowa wartość natychmiastowa z zakresu od -128 do 127 pozwala na 
przesuwanie bitów poza 32 bitowe stałoprzecinkowe pole bitowe w lewą 
lub prawą stronę.

 Flaga SZ jest ustawiana jeżeli wynik przesuwania jest równy zero, w 
innym przypadku jest zerowana. Flaga SV jest ustawiana jeżeli wartość w 
rejestrze Rx jest przesuwana więcej niż 0, w przeciwnym przypadku jest 
zerowana. Flaga SS jest zerowana

Rn = Rn OR LSHIFT Rx BY Ry

Rn = Rn OR LSHIFT Rx BY <data8>

Działanie operacji jak wyżej. Dodatkowo jest dokonywana suma logiczna 
wyniku przesunięcia z polem stałoprzecinkowym rejestru Rn. Bity od 0 do 
7 rejestru Rn są zerowane.

background image

 

 

Operacje przesuwania 

arytmetycznego

Rn = ASHIFT Rx BY Ry

Rn = ASHIFT Rx BY <data8>

Operacja 

arytmetycznie przesuwa 

stałoprzecinkową zawartość Rx o 32-

bitową wartość zawartą w rejestrze Ry lub 8-bitową wartość 
natychmiastową podaną w kodzie rozkazu. Wynik jest zapisywany na 32 
najstarszych bitach rejestru Rn. Dodatnia wartość natychmiastowa lub w 
rejestrze Ry powoduje przesuwanie arytmetyczne bitów w lewo natomiast 
ujemna w prawo. 8-bitowa wartość natychmiastowa z zakresu od -128 do 
127 pozwala na przesuwanie bitów poza 32 bitowe stałoprzecinkowe pole 
bitowe w lewą lub prawą stronę.

 Flaga SZ jest ustawiana, jeżeli wynik przesuwania jest równy zero, w 
innym przypadku jest zerowana. Flaga SV jest ustawiana jeżeli wartość w 
rejestrze Rx jest przesuwana więcej niż 0, w przeciwnym przypadku jest 
zerowana. Flaga SS jest zerowana

Rn = Rn OR ASHIFT Rx BY Ry

Rn = Rn OR ASHIFT Rx BY <data8>

Działanie operacji jak wyżej.

 Dodatkowo 

jest dokonywana 

suma 

logiczna

 wyniku przesunięcia z polem stałoprzecinkowym rejestru Rn. 

Bity od 0 do 7 rejestru Rn są zerowane.

background image

 

 

Operacje przesuwnika bitowego – 

rotacja bitów

Rn = ROT Rx BY Ry

Rn = ROT Rx BY <data8>

Operacja dokonuje 

rotacji

 stałoprzecinkowego operandu w rejestrze Rx. 

Liczbę rotacji określa stałoprzecinkowa zawartość rejestru Ry lub 8-bitowa 
wartość natychmiastowa podana w kodzie rozkazu. Wynik rotacji jest 
zapisywany w stałoprzecinkowym polu rejestru Rn. Bity od 7 do 0 rejestru 
Rn są zerowane. Liczba rotacji może być liczbą dodatnią, wtedy rotacja 
bitów odbywa się w lewo lub liczbą ujemną, wtedy rotacja bitów odbywa 
się w prawo. 8-bitowa wartość natychmiastowa z zakresu od -128 do 127 
pozwala na uzyskanie pełnego „zawinięcia” bitów 32 bitowego argumentu 
w lewo lub w prawo.

 Flaga SZ jest ustawiana, jeżeli wynik rotacji jest równy zero, w innym 
przypadku jest zerowana. Flagi SV oraz SS są zerowane.

background image

 

 

Operacje przesuwnika bitowego – 

zerowanie bitów

Rn = BCLR Rx BY Ry

Rn = BCLR Rx BY <data8>

Operacja 

zeruje podany bit

 w stałoprzecinkowym polu w rejetrze Rx. 

Pozycję bitu określa 32-bitowa wartość w rejestrze Ry lub 8-bitowa 
wartość natychmiastowa podana w kodzie rozkazu. Może ona przybierać 
wartości z zakresu od 0 do 31 włącznie i pozwala wyzerować dowolny bit 
w 32 bitowym operandzie. Gdy wartość jest większa od 31 lub mniejsza od 
0 żaden bit nie jest zerowany. Wynik operacji jest umieszczany w 
stałoprzecinkowym polu rejestru Rn. Bity od 0 do 7 rejestru Rn w 
przypadku danych 40 bitowych są zerowane.

Flaga SZ jest ustawiana, jeżeli operand wyjściowy jest równy zero, w 
innym przypadku jest zerowana. Flaga SV jest ustawiana jeżeli pozycja 
bitu jest większa niż 31, w innym przypadku jest zerowana. Flaga SS jest 
zerowana.

UWAGA: Rozkazu nie należy mylić z instrukcją BIT CLR, która może 
zerować jeden lub więcej bitów w grupie rejestrów systemowych (rejestry: 
ASTAT, IRPTL, IMASK, IMASKP, MODE1, MODE2, STKY, USTAT1, USTAT2)

background image

 

 

Operacje przesuwnika bitowego – 

ustawianie bitów

Rn = BSET Rx BY Ry

Rn = BSET Rx BY <data8>

Operacja 

ustawia podany bit

 w stałoprzecinkowym polu w rejetrze Rx. 

Pozycję bitu określa 32-bitowa wartość w rejestrze Ry lub 8-bitowa 
wartość natychmiastowa podana w kodzie rozkazu. Może ona przybierać 
wartości z zakresu od 0 do 31 włącznie i pozwala ustawić dowolny bit w 32 
bitowym operandzie. Gdy wartość jest większa od 31 lub mniejsza od 0 
żaden bit nie jest ustawiany. Wynik operacji jest umieszczany w 
stałoprzecinkowym polu rejestru Rn. Bity od 0 do 7 rejestru Rn w 
przypadku danych 40-bitowych są zerowane.

Flaga SZ jest ustawiana, jeżeli operand wyjściowy jest równy zero, w 
innym przypadku jest zerowana. Flaga SV jest ustawiana jeżeli pozycja 
bitu jest większa niż 31, w innym przypadku jest zerowana. Flaga SS jest 
zerowana.

UWAGA: Rozkazu nie należy mylić z instrukcją BIT SET, która może 
ustawiać jeden lub więcej bitów w grupie rejestrów systemowych (rejestry: 
ASTAT, IRPTL, IMASK, IMASKP, MODE1, MODE2, STKY, USTAT1, USTAT2)

background image

 

 

Operacje przesuwnika bitowego – 

negowanie bitów

Rn = BTGL Rx BY Ry

Rn = BTGL Rx BY <data8>

Operacja 

neguje podany bit

 w stałoprzecinkowym polu w rejetrze Rx. 

Pozycję bitu określa 32-bitowa wartość w rejestrze Ry lub 8-bitowa 
wartość natychmiastowa podana w kodzie rozkazu. Może ona przybierać 
wartości z zakresu od 0 do 31 włącznie i pozwala zanegować dowolny bit 
w 32 bitowym operandzie. Gdy wartość jest większa od 31 lub mniejsza od 
0 żaden bit nie jest negowany. Wynik operacji jest umieszczany w 
stałoprzecinkowym polu rejestru Rn. Bity od 0 do 7 rejestru Rn w 
przypadku danych 40-bitowych są zerowane.

Flaga SZ jest ustawiana, jeżeli operand wyjściowy jest równy zero, w 
innym przypadku jest zerowana. Flaga SV jest ustawiana jeżeli pozycja 
bitu jest większa niż 31, w innym przypadku jest zerowana. Flaga SS jest 
zerowana.

UWAGA: Rozkazu nie należy mylić z instrukcją BIT TGL, która może 
zanegować jeden lub więcej bitów w grupie rejestrów systemowych 
(rejestry: ASTAT, IRPTL, IMASK, IMASKP, MODE1, MODE2, STKY, USTAT1, 
USTAT2)

background image

 

 

Operacje przesuwnika bitowego – 

testowanie bitów

Rn = BTST Rx BY Ry

Rn = BTST Rx BY <data8>

Operacja 

testuje wartość

 podanego bitu w stałoprzecinkowym polu w 

rejetrze Rx. Pozycję bitu określa 32-bitowa wartość w rejestrze Ry lub 8-
bitowa wartość natychmiastowa podana w kodzie rozkazu. Może ona 
przybierać wartości z zakresu od 0 do 31 włącznie i pozwala zanegować 
dowolny bit w 32 bitowym operandzie. Gdy wartość jest większa od 31 lub 
mniejsza od 0 żaden bit nie jest negowany. 

Flaga SZ jest zerowana, jeżeli testowany bit jest równy 1, natomiast jest 
ustawiana jeżeli testowany bit jest równy zero lub pozycja bitowa jest 
większa niż 31. Flaga SV jest ustawiana jeżeli pozycja bitu jest większa niż 
31, w innym przypadku jest zerowana. Flaga SS jest zerowana.

UWAGA: Rozkazu nie należy mylić z instrukcją BIT TST, która testuje  jeden 
lub więcej bitów w grupie rejestrów systemowych (rejestry: ASTAT, IRPTL, 
IMASK, IMASKP, MODE1, MODE2, STKY, USTAT1, USTAT2). Instrukcja BIT 
TST ustawia flagę BTF, gdy wszystkie wyspecyfikowane bity są 
przetestowane.

background image

 

 

Wstawianie pola bitowego

Rn = FDEP Rx BY Ry

Rn = FDEP Rx BY <bit6>:<len6>

Rozkaz 

wstawia pole bitowe

 z rejestru Rx do Rejestru Rn. Pole bitowe 

jest wyrównane do prawej wewnątrz stałoprzecinkowego pola w rejestrze 
Rx. Jego długość jest określona przez 6 bitową liczbę zapisaną na bitach 
od 14 do 19 w rejestrze Ry lub jako wartość natychmiastowa 

len6

 w 

kodzie rozkazu. 

Pole bitowe jest odkładane w stałoprzecinkowym polu rejestru Rn 
rozpoczynającym się od bitu określonego przez 6 bitową liczbę zapisaną w 
Ry na bitach od 8 do 13 lub przez wartość natychmiastową 

bit6

 w kodzie 

rozkazu.

Bity po lewej i prawej stronie odłożonego w rejestrze Rn pola bitowego  są 
zerowane, dotyczy to również pola zmiennoprzecinkowego w rejestrach 40 
bitowych (bity od 0 do 7).

Wartości 

bit6

 oraz 

len6

 mogą przyjmować wartości od 0 do 63 włącznie 

pozwalając na odkładanie pól o długościach od 0 do 32 bitów 
zaczynających się na dowolnej pozycji po lewej od punktu odniesienia, 
czyli od 0 w rejestrach 32-bitowych i od 8 bitu w rejestrach 40-bitowych.

Flaga SZ jest ustawiana, gdy operand wyjściowy jest równy 0, flaga SV 
jest ustawiana jeżeli jakieś bity są odkładane na lewo od 32 bitowego 
docelowego pola stałoprzecinkowego (tzn. bit6 + len6 > 32), flaga SS jest 
zerowana.

background image

 

 

Wstawianie pola bitowego c.d.

Rn = Rn OR FDEP Rx BY Ry

Rn = Rn OR FDEP Rx BY <bit6>:<len6>

Podstawowy opis oraz ustawienia flag takie jak w podstawowej wersji 
rozkazu FDEP. 

Dodatkowo

, wstawiane pole bitowe jest poddawane 

sumie 

logicznej

 z oryginalną zawartością Rn i następnie zapisywane do rejestru 

Rn.

Rn = FDEP Rx BY Ry (SE)

Rn = FDEP Rx BY <bit6>:<len6> (SE)

Podstawowy opis oraz ustawienia flag takie jak w podstawowej wersji 
rozkazu FDEP. 

Dodatkowo

, najbardziej znaczące bity rejestru Rn są 

wypełniane najstarszym bitem

 wstawianego pola bitowego – bitem 

znaku (o ile nie znajdzie się on poza obszarem rejestru Rn).

Rn = Rn OR FDEP Rx BY Ry (SE)

Rn = Rn OR FDEP Rx BY <bit6>:<len6> (SE)

Podstawowy opis oraz ustawienia flag takie jak w rozkazie FDEP z 
modyfikatorem (SE). Dodatkowo, wstawiane pole bitowe jest 
poddawane sumie logicznej z oryginalną zawartością Rn i następnie 
zapisywane do rejestru Rn.

background image

 

 

„Pakowanie” liczb

Przykładem wykorzystania rozkazu FDEP jest pakowanie wartości 
liczbowych w pola o możliwie małej szerokości bitowej. Poniższy 
przykład pokazuje kodowanie trzech wartości liczbowych [11, -12, 
10] odpowiednio za pomocą pól bitowych o następujących 
szerokościach: [6 bitów w naturalnym kodzie binarnym, 5 bitów 
U2, 6 bitów U2]. Pierwsza liczba rozpozczyna się na pozycji 23 bitu 
w słowie i zajmuje bity 23÷28. Następne liczby należy zakodować 
na kolejnych polach bitowych.

r5 = 11;

r6 = -12;

r7 = 10;

r0 = r0 OR FDEP r5 by 23:6;

// umieść pierwszą liczbę

r0 = r0 OR FDEP r6 by29:3;

// umieść trzy młodsze bity drugiej 

liczby

r6 = ASHIFT r6 by -3;

// przesuń bity w prawo

r1 = FDEP r6 by 0:2;

// umieść dwa starsze bity drugiej 

liczby

r1 = r1 OR FDEP r7 by 2:6;

// umieść trzecią liczbę

background image

 

 

Ekstrakcja pola bitowego

Rn = FEXT Rx BY Ry

Rn = FEXT Rx BY <bit6>:<len6>

Rozkaz dokonuje 

ekstrakcji pola bitowego

 z rejestru Rx, gdzie 

parametry ekstrakcji są zawarte w rejestrze Ry lub stałych 
natychmiastowych bit6 oraz len6. Długość ekstrahowanego pola bitowego 
określa 6-bitowa wartość zapisana na bitach od 14 do 19 w rejestrze Ry 
lub stała natychmiastowa len6. Bit startowy, od którego zaczyna się 
ekstrakcja pola bitowego z rejestru Rx określa 6-bitowa wartość zapisana 
na bitach od 8 do 13 w rejestrze Ry lub  stała natychmiastowa bit6. 

Bity po obydwu stronach ekstrahowanego pola w rejestrze Rn są 
zerowane. Dotyczy to również zmiennoprzecinkowego pola w rejestrach 
40-bitowych. Wartości len6 oraz bit6 zawierają się w zakresie od 0 do 63 i 
pozwalają na ekstrahowanie pól bitowych o długościach od 0 do 32 bitów 
oraz od pozycji startowej od 0 aż do całkowitego wysunięcia z lewej strony 
poza 32-bitowe pole rejestru Rx.

Ustawiane flagi: SZ – jest ustawiana, jeżeli operand wyjściowy jest równy 
zero, SV – jest ustawiana, jeżeli jakieś bity są ekstrahowane z lewej strony 
32-bitowego wejściowego pola stałoprzecinkowego (tzn. jeżeli wartość 
len6 + bit6 > 32), SS – jest zerowana.

background image

 

 

Ekstrakcja pola bitowego c.d. i 

inne operacje przesuwnika 

bitowego

Rn = FEXT Rx BY Ry (SE)

Rn = FEXT Rx BY <bit6>:<len6> (SE)

Zasadniczy opis działania rozkazu oraz ustawienia flag tak jak w 
przypadku podstawowej wersji rozkazu FEXT. Dodatkowo bity znajdujące 
się po lewej stronie ekstrahowanego pola w Rn przyjmują wartość bitu 
znaku. Nie dotyczy to sytuacji, gdy pole ekstrahowane jest spoza skali.

Rn = EXP Rx

Rozkaz 

oblicza exponentę (wykładnik)

 stałoprzecinkowego operandu 

zawartego w rejestrze Rx. Exponenta jest obliczana jako liczba w kodzie 
uzupełnienia do dwóch (U2) z pomniejszonej o jeden liczby bitów znaku w 
rejestrze Rx . Eksponenta jest zapisywana w polu 

shf8

 w rejestrze Rn (bity 

od 8 do 15).

background image

 

 

„Rozpakowywanie” 

liczb

W poniższym przykładzie ze spakowanych w poprzednim 
przykładzie danych są odzyskiwane trzy wartości liczbowe [11, 
-12, 10] o szerokości 32 bitowej. Dane początkowe, w których są 
zawarte wartości liczbowe do rozpakowania znajdują się w 
rejestrach R0 i R1.

r0 = 0x85C3C742;

// dane początkowe

r1 = 0x39BF1E2A;

// dane początkowe

r5 = FEXT r0 by 23:6;

// rozpakowanie pierwszej 

// liczby (0..001011B NBC)

r6 = FEXT r0 by 29:3;

// rozpakowanie trzech 

młodszych bitów 

// drugiej liczby 

(100B)

r7 = FEXT r1 by 0:2;

// rozpakowanie dwóch starszych 

bitów 

// drugiej liczby (10B)

r6 = r6 OR FDEP r7 by 3:2 (SE);

// złączenie części i 

rozszerzenie o bit znaku 

// (1..10100B U2)

r7 = FEXT r1 by 2:6 (SE);

// rozpakowanie trzeciej liczby 

(0..01010B U2) 

background image

 

 

Inne operacje przesuwnika 

bitowego

Rn = EXP Rx (EX)

Rozkaz 

oblicza exponentę

 (wykładnik) stałoprzecinkowego operandu 

zawartego w rejestrze Rx z uwzględnieniem bitu AV (operand może być 
wynikiem poprzedniej operacji ALU). Eksponenta  jest zapisywana w polu 
shf8 w rejestrze Rn.

Jeżeli bit AV jest równy zero, eksponentę oblicza się jako dopełnienie do 
dwóch (U2) z pomniejszonej o jeden liczby bitów znaku w rejestrze Rx. 
Jeżeli bit AV jest równy 1 zwracana jest wartość 0x0000 0001.

Rn = LEFTZ Rx

Rozkaz 

oblicza liczbę wiodących zer

 stałoprzecinkowego argumentu 

zawartego w rejestrze Rx. Wynik jest umieszczany w polu bit6 w rejestrze 
Rn (bity od 8 do 13).

Ustawiane flagi: SZ - Ustawiana jeżeli MSB rejestru Rx jest równa 1, SV – 
ustawiana jeżeli wynik jest równy 32, SS – zerowana.

Rn = LEFTO Rx

Rozkaz 

oblicza liczbę wiodących jedynek

 stałoprzecinkowego 

argumentu zawartego w rejestrze Rx. Wynik jest umieszczany w polu bit6 
w rejestrze Rn (bity od 8 do 13). Ustawiane flagi: SZ - Ustawiana jeżeli 
MSB rejestru Rx jest równa 1, SV – ustawiana jeżeli wynik jest równy 32, 
SS – zerowana.

background image

 

 

Konwersja formatów danych za 

pomocą przesuwnika bitowego

Rn = FPACK Fx

Rozkaz konwertuje wartość w rejestrze Fx z 32-bitowego formatu  
zmiennoprzecinkowe-go IEEE 754 do formatu zmiennoprzecinkowego o 
precyzji 16-bitowej. Wynik jest umieszczany na szesnastu młodszych bitach 
rejestru Rn. Format krótki posiada 11-bitową mantysę, 4-bitową eksponentę 
oraz bit znaku. Gdy konwertowana wartość powoduje niedomiar, eksponenta 
jest ustawiana na zero (0), a mantysa (zawierająca ukryty bit) jest 
przesuwana w prawo o odpowiednią liczbę pozycji. Spakowana liczba 16-
bitowa jest w tym przypadku zdenormalizowana. Bit znaku nie zmienia się.

Warunek

Opis

exp > 135

Wartość maksymalna

120 < exp ≤ 

135

Eksponenta docelowa składa się z najstarszego bitu 

eksponenty źródłowej połączonego z trzema 

najmłodszymi bitami eksponenty źródłowej. Spakowana 

mantysa jest zaokrąglana do 11 bitów mantysy 

źródłowej.

109 < exp ≤ 

120

Eksponenta docelowa jest równa zero. Mantysa (wraz z 

ukrytym bitem) jest przesuwana w prawo o odpowiednią 

liczbę pozycji i zaokrąglana do 11-bitów

exp ≤ 109 

Format spakowany zawiera same zera.

Exp – spolaryzowana eksponenta argumentu źródłowego.

background image

 

 

Konwersja formatów danych za 

pomocą przesuwnika bitowego

Fn = FUNPACK Rx

Rozkaz konwertuje wartość w rejestrze Rn z 16-bitowego spakowanego 
formatu  zmiennoprzecinkowego do formatu 32-bitowego IEEE 754. Wynik 
jest zapisywany do rejestru Fn.

Warunek

Opis

0 < exp ≤ 15

Rozpakowana eksponenta składa się z trzech 

najmłodszych bitów eksponenty źródłowej rozszerzonej o 

jej najstarszy bit. Rozpakowana mantysa jest mantysą 

źródłową uzupełnioną zerami z prawej strony.

exp = 0

Wartość rozpakowanej eksponenty wynosi (120-N), gdzie 

N jest liczbą wiodących zer w źródłowej mantysie. 
Rozpakowana mantysa jest przesuniętą w lewo 

(unormowaną) mantysą źródłową, uzupełnioną 

odpowiednią liczbą zer z prawej strony. Ukryty bit jest 

usuwany.

Exp – spolaryzowana eksponenta argumentu 
źródłowego.

Bit znaku pozostaje niezmieniony we wszystkich 
przypadkach.

background image

 

 

Literatura

1)  Analog Devices, ADSP-21065L SHARC® 

DSP. Technical Reference,

2)  Analog Devices, ADSP-21065L SHARC® 

DSP. User’s Manual, USA, 2003.

3) 

Jacek Augustyn, „Asemblery μC51, 

ADSP-21065L 

SHARC”, Wydawnictwa 

Naukowo-Dydaktyczne 

PWSZ w 

Tarnowie, Wyd. IGSMiE PAN, Kraków 2006, 
str. 337 - 359

background image

 

 

Opcje modyfikatora 

mod2

Oznaczenia w tabeli:

S – operand wejściowy ze znakiem (ang. 
signed)

U – operand wejściowy bez znaku (ang. 
unsigned)

I – operandy wejściowe całkowite (ang. 
integer)

F – operandy wejściowe ułamkowe (ang. 
fractional)

R – wynik zaokrąglony ku najbliższemu  (ang. 
rounded-to-nearest) opcja stosowana przy 
zapisywaniu wyniku do Rn

background image

 

 

Opcje modyfikatora 

mod1

Oznaczenia w tabeli:

S – operand wejściowy ze znakiem (ang. signed)

U – operand wejściowy bez znaku (ang. unsigned)

I – operandy wejściowe całkowite (ang. integer)

F – operandy wejściowe ułamkowe (ang. fractional)

background image

 

 

Akumulacyjny rejestr porównań

0
0
0
0

1

0
0
0

1
0
1
1
0
0
1
1

COMP(R2, R3)    R2>R3

COMP(R8, R4)    R8<R4

COMP(R15, R5)  R15>R5
COMP(R6, R5)    R6>R5

COMP(R7, R10)  R7=R10

COMP(R0, R14)  R0<R14

COMP(R5, R7)    R5>R7
COMP(R1, R15)  R1>R15

0

1

0
0
0

1

0
0

  AZ   AN   

ASTAT 

CACC7
CACC6
CACC5
CACC4
CACC3
CACC2
CACC1
CACC0

24

31

background image

 

 

Akumulacyjny rejestr porównań

1

0
0
0
0

1

0
0

0
1
0
1
1
0
0
1

COMP(R1, R3)    
R2=R3

COMP(R2, R3)    
R2>R3

COMP(R8, R4)    
R8<R4

COMP(R15, R5)  
R15>R5
COMP(R6, R5)    
R6>R5

COMP(R7, R10)  
R7=R10

COMP(R0, R14)  
R0<R14

COMP(R5, R7)    
R5>R7

0
0

1

0
0
0

1

0

  AZ   AN   

ASTAT 

CACC7
CACC6
CACC5
CACC4
CACC3
CACC2
CACC1
CACC0

24

31

background image

 

 

Akumulacyjny rejestr porównań

0

1

0
0
0
0

1

0

1
0
1
0
1
1
0
0

COMP(R4, R5)    
R4>R5

COMP(R1, R3)    
R2=R3

COMP(R2, R3)    
R2>R3

COMP(R8, R4)    
R8<R4

COMP(R15, R5)  
R15>R5
COMP(R6, R5)    
R6>R5

COMP(R7, R10)  
R7=R10

COMP(R0, R14)  
R0<R14

0
0
0

1

0
0
0

1

  AZ   AN   

ASTAT 

CACC7
CACC6
CACC5
CACC4
CACC3
CACC2
CACC1
CACC0

24

31

background image

 

 

Akumulacyjny rejestr porównań

0
0

1

0
0
0
0

1

1
1
0
1
0
1
1
0

COMP(R11, R2)  
R11>R2
COMP(R4, R5)    
R4>R5

COMP(R1, R3)    
R2=R3

COMP(R2, R3)    
R2>R3

COMP(R8, R4)    
R8<R4

COMP(R15, R5)  
R15>R5
COMP(R6, R5)    
R6>R5

COMP(R7, R10)  
R7=R10

0
0
0
0

1

0
0
0

  AZ   AN   

ASTAT 

CACC7
CACC6
CACC5
CACC4
CACC3
CACC2
CACC1
CACC0

24

31


Document Outline