Technika Mikroprocesorowa 1

38
Technika Mikroprocesorowa 1 Arytmetyka liczb binarnych

description

Technika Mikroprocesorowa 1. Arytmetyka liczb binarnych. Arytmetyka 2 /38. Arytmetyka binarnych liczb całkowitych Arytmetyka liczb stałopozycyjnych Arytmetyka liczb zmiennopozycyjnych. - PowerPoint PPT Presentation

Transcript of Technika Mikroprocesorowa 1

Page 1: Technika Mikroprocesorowa 1

Technika Mikroprocesorowa 1

Arytmetyka liczb binarnych

Page 2: Technika Mikroprocesorowa 1

Arytmetyka 2/38

Arytmetyka binarnych liczb całkowitych

Arytmetyka liczb stałopozycyjnych

Arytmetyka liczb zmiennopozycyjnych

Page 3: Technika Mikroprocesorowa 1

Arytmetyka - NB 3/38

Dodawanie i odejmowanie liczb w NB

01011100+ 10010011 11101111

5Ch + 93h 0EFh

92 + 147 239

10001000+ 10100000 1 00101000

88h + 0A0h 128h

136+ 160 296=256+40

0 10 01110111- 00101010 01001101

77h - 2Ah 4Dh

119 - 42 77

1 0 10 10 10 10 1 10|1

01010000- 01100100 1 11101100

50h - 64h 0ECh U2 14h

80 - 100 - 20

Przeniesienie (CY) sygnalizuje: nadmiar przy dodawaniu NB pożyczkę przy odejmowaniu w NB

Page 4: Technika Mikroprocesorowa 1

Dodawanie i odejmowanie liczb w U2

Zał. S1, S2, S - znaki argumentów i wyniku (ich najstarsze bity)Nadmiar: przy dodawaniu w U2 występuje gdy S1=S2S przy odejmowaniu w U2 występuje gdy S1S2 i CY=S

01011100+ 00100011 01111111

5Ch + 23h 7Fh

92 + 35 127

01011000+ 10100000 11111000

58h + 0A0h 0F8h

88+ (-96) -8

0 10 01110111- 00101010 01001101

77h - 2Ah 4Dh

119 - 42 77

1 0 10 10 10 10 1 1 01010000- 10000100 1 11001100

50h - 84h 0CCh U2 34h

80 -(-124) 204

! nadmiar !

Arytmetyka – U2 4/38

Page 5: Technika Mikroprocesorowa 1

Dodawanie i odejmowanie liczb w BCD

01010100+ 00110011 10000111

54h + 33h 87h

54 + 33 87

10001000+ 01100001 11101001+ 01100000 1 01001001

88h + 61h 0E9h + 60h 149h

88+ 61 149 korekcja

01010100- 00110011 00100001

54h - 33h 21h

54 - 33 21

01010010- 01100100 00011110- 00000110 0 00011000

52h - 34h 1Eh - 06h 18h

52- 34 18 korekcja

Przeniesienie (CY) po korekcji sygnalizuje: nadmiar przy dodawaniu BCD pożyczkę przy odejmowaniu w BCD

Arytmetyka – BCD 5/38

Page 6: Technika Mikroprocesorowa 1

L1[0]...

L1[m-1]i:=0

CY:=0

Lw[ i ]:=L1[ i ]+L2[ i ]+CYi:=i+1

i < m ?T

N

L2[0]...

L2[m-1]

Lw[0]...

Lw[m-1]

i:=0CY:=0

Lw[ i ]:=L1[ i ]-L2[ i ]-CYi:=i+1

i < m ?T

N

Arytmetyka – długie liczby 6/38

Page 7: Technika Mikroprocesorowa 1

LW: XXX

L1:8002

L2:

88

C200

35

i=X CY=x

i=0 CY=0

88h + 35h + 0 = 0BDh

BDCY=0i=1

80h + C2h + 0 = 142h

CY=1

42

i=202h + 00h + 1 = 03h

03

CY=0i=3 (>= m=3)

Arytmetyka – długie liczby 7/38

Page 8: Technika Mikroprocesorowa 1

L1[0]...

L1[m-1]i:=0

CY:=0

Lw[ i ]:=L1[ i ]+L2[ i ]+CYkorekcja BCD

i:=i+1

i < m ?T

N

L2[0]...

L2[m-1]

Lw[0]...

Lw[m-1]

i:=0CY:=0

Lw[ i ]:=L1[ i ]-L2[ i ]-CYkorekcja BCD

i:=i+1

i < m ?T

N

Arytmetyka – długie liczby 8/38

Page 9: Technika Mikroprocesorowa 1

UWAGA: ilość bitów potrzebnych do reprezentacji iloczynu równa się sumie liczby bitów czynników

złożoność obliczeniowa:L2=0 i L1=x:ZOMIN=2+1=3

L2=255 i L1=x:ZOMAX=2+(1+2+1)*255+1=1023

ZOSR = 513

L1...L2...

LWL

LWH

LW:=0

LW:=LW+L1L2:=L2-1

L2 = 0 ?T

N

[2]

[1]

[2][1]

1. Mnożenie przez wielokrotne dodawanie

Zał: L1,L2 - 1-bajtowe czynniki, LW - 2-bajtowy iloczyn

Arytmetyka – mnożenie bez znaku 9/38

Page 10: Technika Mikroprocesorowa 1

2. Mnożenie restytucyjne

1215 10101 (21) x 204 x 110 (6) 4860 101010 2430 10101 247860 1111110 (126)

złożoność obliczeniowa:L2=0 i L1=x:ZOMIN=2+1+(1+2+1+1)*8=43

L2=11111111b i L1=x:ZOMAX=2+1+(1+2+2+1+1)*8=59

ZOSR = 51

poprzedni algorytm wymaga 51 operacji dlaL2=13 tzn. jest tylkow 4% (statystycznie) przypadkówszybszy od mnożenia restytucyjnego

L1...L2...

LWL

LWH

LW:=0i:=0

LW:=LW+L1

L2i = 0 ?T

N

[2][1]

[1]

[2]

[2][1]

[1]

L1:=SHL(L1)i:=i+1

i < 8 ? T

N

Zał: L1,L2 - 1-bajtowe czynniki, LW - 2-bajtowy iloczyn

Arytmetyka – mnożenie bez znaku 10/38

Page 11: Technika Mikroprocesorowa 1

3. Przykłady mnożenia w asemblerze Z80

3.1. Mnożenie przez wielokrotne dodawanie

tekst programu: czasy wykonania rozkazów [okresy CLK]

; zał: E=L1, B=L2, HL=LW LD HL,0 ;LW:=0 LD D,H ;L1H:=0 INC B JR kon powt: ADD HL,DE ;dodawanie kon: DJNZ powt ;skok gdy L20

[10] [4] [4] [12] [11] [8/13]

złożoność obliczeniowa:

L2=0: ZOMIN=10+4+4+12+8=38 L2=255: ZOMAX=10+4+4+12+(13+11)*255+8=6158 ZO=38+24*L2 ZOSR=3098

Arytmetyka – mnożenie bez znaku 11/38

Page 12: Technika Mikroprocesorowa 1

3.2. Mnożenie restytucyjne I

tekst programu 1: czasy wykonania rozkazów[okresy CLK]

; zał: E=L1, C=L2, HL=LW LD B,8 ;licznik petli LD HL,0 ;LW:=0 LD D,H ;L1H:=0spraw: BIT 0,C ;test bitu L2 JR Z,niedod ADD HL,DEniedod:EX DE,HL ADD HL,HL ;SHL(L1) EX DE,HL RR C ;nast. bit L2 DJNZ spraw

[7] [10] [4] [8] [7/12] [11] [4] [11] [4] [8] [8/13]

złożonośćobliczeniowa:

L2=0: ZOMIN=7+10+4+(8+12+4+11+4+8)*8+13*7+8=496L2=255: ZOMAX=7+10+4+(8+7+11+4+11+4+8)*8+13*7+8=544ZOSR=520

Arytmetyka – mnożenie bez znaku 12/38

Page 13: Technika Mikroprocesorowa 1

3.3. Mnożenie restytucyjne II

tekst programu 2 zoptymalizowanego: czasy wykonania rozkazów[okresy CLK]

; zał: E=L1, H=L2, HL=LW LD B,8 ;licznik petli LD D,0 ;L1H:=0 LD L,Dpowt: ADD HL,HL ;test bitu L2 JR NC,niedod ADD HL,DE ;dodawanieniedod:DJNZ powt ;nast.bit

[7] [7] [4] [11] [7/12] [11] [8/13]

złożonośćobliczeniowa:

L2=0: ZOMIN=7+7+4+(11+12)*8+13*7+8=301L2=255: ZOMAX=7+7+4+(11+7+11)*8+13*7+8=349ZOSR=325

Arytmetyka – mnożenie bez znaku 13/38

Page 14: Technika Mikroprocesorowa 1

4. Mnożenie długich liczb

• operowanie dłuższymi ciągami bitów;

• wykorzystanie procedur pomocniczych mnożących np. bajtbajt:

4 mnożenia 4 dodawania

xy = x1y1

256256 + x0y1

256 + x1y0

256 + x0y0

x1 x0

y1 y0

x:

y:

x0y0

x0y1

x1y0

x1y1

• mnożenie tetrad jako cyfr szesnastkowych przy użyciu tabliczki mnożenia - opłacalne tylko dla liczb w BCD;

• mnożenie przyśpieszone.

Arytmetyka – mnożenie bez znaku 14/38

Page 15: Technika Mikroprocesorowa 1

• mnożenie przyśpieszone:

zał: x = Bx1 + x0 y = By1 + y0 (B=256)

w = xy = (Bx1 + x0)(By1 + y0) - 4 mnożenia 4 dodawania

niech: u = x1 - x0 i v = y1 - y0 wtedy:

uv = x1y0 + x0y1 - x1y1 - x0y0 x1y0 + x0y1 = uv + x1y1 + x0y0

w = BBx1y1 + B(x1y0 + x0y1) + x0y0 =

= BBx1y1 + Buv + Bx1y1 + Bx0y0 + x0y0 =

= (BB + B)x1y1 + Buv + (B + 1)x0y0

2 odejmowania 3 mnożenia 4 dodawania

x1 x0

y1 y0

x:

y:

x0y0

x0y0

uvx1

y1

x1y1

Arytmetyka – mnożenie bez znaku 15/38

Page 16: Technika Mikroprocesorowa 1

5. Mnożenie przez stałą Zał: wartość stałej jest znana na etapie pisania programu.

Każda stała K ma n-bitowe rozwinięcie binarne: K =

Jeżeli ilość bitów ki = 1 jest niewielka (1..4) to można zastosować regułę:

L K = L 2i1 + L 2i2 + L 2i3 + L 2i4

gdzie i1, i2, i3, i4 oznaczają potęgi 2 dla których kiX = 1.Jeżeli K=2m to mnożenie jest równoważne m-krotnemu przesunięciu arytmetycznemu w lewo liczby L.

1n

0i

ii 2k

Można to zrealizować dwojako:

LD L,liczbaLD H,0ADD HL,HL ;HL=liczba*2ADD HL,HL ;HL=liczba*4ADD HL,HL ;HL=liczba*8LD (iloczyn),HL

LD L,liczba LD H,0 SLA L RL H ;HL=liczba*2 SLA L RL H ;HL=liczba*4 SLA L RL H ;HL=liczba*8 LD (iloczyn),HL

Arytmetyka – mnożenie bez znaku 16/38

Page 17: Technika Mikroprocesorowa 1

Mnożenie przez stałą nie będącą potęgą 2

Przykłady:

K = 10 = 2 + 8L K = L 2 + L 8 = L 2 + (L 2) 4

K = 15 = 12 + 3 = 3 4 + 3 = (2 + 1) 4 + (2 + 1)L K = (L 2 + L) 4 + (L 2 + L)

LD L,liczba LD H,0 ADD HL,HL ;HL=liczba*2 LD D,H LD E,L ADD HL,HL ;HL=liczba*4 ADD HL,HL ;HL=liczba*8 ADD HL,DE ;HL=liczba*10 LD (iloczyn),HL

LD L,liczba LD H,0 LD E,L LD D,H ;DE=liczba ADD HL,HL ;HL=liczba*2 ADD HL,DE ;HL=liczba*3 LD D,H LD E,L ADD HL,HL ;HL=liczba*6 ADD HL,HL ;HL=liczba*12 ADD HL,DE ;HL=liczba*15 LD (iloczyn),HL

Arytmetyka – mnożenie bez znaku 17/38

Page 18: Technika Mikroprocesorowa 1

1. Dzielenie przez wielokrotne odejmowaniezał: L1,L2 - 1-bajtowa dzielna i dzielnik, LW - 1-bajtowy iloraz

zł o ż o n o ś ć o b l i c z e n i o w a :L 1 < L 2 :Z O M I N = 1 + 1 + 1 = 3

L 1 = 2 5 5 i L 2 = 1 :Z O M A X = 1 + 1 + ( 1 + 1 + 1 ) * 2 5 5 + 1 = 7 6 8

Z O S R :

( ( n d i v i ) 3 + 3 )2 5 5

in 10

2 5 57 0 7 1 7 2

Z O S R = 7 0 7 1 7 2 : 2 5 5 : 2 5 6 = 1 0 , 8

L 1. . .

L 2. . .

L W

L W : = 0

L W : = L W + 1L 1 : = L 1 - L 2

L 1 L 2 ?N

T

[ 1 ]

[ 1 ]

[ 1 ]

[ 1 ][ 1 ]

L 2 = 0 ?T

N

s y g n a l i z a c j abł ę d u

L W = i l o r a zL 1 = r e s z t a

Przy dzieleniu 2B/1B:ZOMIN=5 ZOMAX=5+65535*6=393215

ZOSR: ((n div i) 6 + 5)255

in 10

65535105 96 10, ZOSR = 3567

Arytmetyka – dzielenie bez znaku 18/38

Page 19: Technika Mikroprocesorowa 1

2. Dzielenie przez potęgę 2

równoważne przesunięciu o odpowiednią ilość bitów w prawo

złożoność obliczeniowa:ZO=1+1+(1+1+1)*k=2+3kogólnie zależy od:- długości liczby w bitach;- wartości potęgi;- dostępnych rejestrów roboczych;- dostępnych rozkazów mikroprocesora.Przykład:kolejne stany L1 przy dzieleniu L1=31 przez 2 3=8

[1]

[1]

[1][1]

L1:=SHRA(L1)i:=i-1

i > 0 ?

T

N

i:=k

0 0 0 1 1 1 1 1

0 0 0 0 1 1 1 1

0 0 0 0 0 1 1 1

0 0 0 0 0 0 1 1

Arytmetyka – dzielenie bez znaku 19/38

Page 20: Technika Mikroprocesorowa 1

3. Dzielenie restytucyjne

25 127 : 5 10 27 25 2 = R

11001 1111111 : 101 101 101 101 0111 101 10 = R

zał: L1,L2 - 1-bajtowa dzielna i dzielnik, LW - 1-bajtowy iloraz LD - 2-bajtowa zmienna pomocnicza (rejestr)

złożoność obliczeniowa:L1=0 i L2=x:ZOMIN=1+1+1+(2+1+1+1)*8=43

L2=11111111b i L1=x:ZOMAX=1+1+1+(2+1+1+1+1+1)*8=59

ZOSR = 51

UWAGA:przy L2=0 uzyskuje się LW=255

LD:=2LD

i:=i-1

LDH L2 ?N

T

[1][1][1]

[2]

[1]

[1][1]

[1]

[1]

LDH:=LDH -L2LDL0:=1

i > 0 ? T

N

i:=8LDH:=0

LDL:=L1

Arytmetyka – dzielenie bez znaku 20/38

Page 21: Technika Mikroprocesorowa 1

Przykład:

kolejne stany LD przy dzieleniu L1=31 przez L2=7

0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1LD:

0 0 0 0 0 0 0 00 0 0 1 1 1 1 1 0

0 0 0 0 0 0 0 00 0 0 1 1 1 1 1 0 0

0 0 0 0 0 0 0 00 0 0 1 1 1 1 1 0 0 0

0 0 0 0 0 0 0 00 0 0 1 1 1 1 1 0 0 0 0

0 0 0 0 0 0 0 00 0 0 1 1 1 1 1 0 0 0 0 0

0 0 0 0 0 0 0 00 0 0 1 1 1 1 1 0 0 0 0 0 0

0 0 0 0 0 1 1 1L2:

0 0 0 0 0 1 1 1-L2 0 0 0 0 0 0 0 00 0 0 0 0 0 1 1 0 0 0 0 0 1

0 0 0 0 0 0 0 00 0 0 0 0 0 1 1 0 0 0 0 0 1 0

0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 reszta iloraz

Arytmetyka – dzielenie bez znaku 21/38

Page 22: Technika Mikroprocesorowa 1

4. Przykłady dzielenia w asemblerze Z80

4.1. Dzielenie przez wielokrotne odejmowanie

tekst programu: czasy wykonania rozkazów[okresy CLK]

; zał: A=L1, B=L2, C=LW=L1:L2 LD C,A ;przechowanie L1 LD A,B ;sprawdzenie L2 AND A JR Z,kon ;skok gdy L2=0 LD A,C ;odtworzenie L1 LD C,0 ;iloraz:=0powt: SUB B ;L1:=L1-L2 JR C,kon ;skok gdy L1<L2 INC C ;iloraz +1 JR powtkon: ADD B ;A=reszta C=iloraz

[4] [4] [4] [7/13] [4] [7] [4] [7/13] [4] [12] [4]

złożonośćobliczeniowa:

L2=0: ZOERR=4+4+4+13+4=29L1<L2: ZOMIN=4+4+4+7+4+7+4+13+4=51L1=255 i L2=1: ZOMAX=4+4+4+7+4+7+(4+7+4+12)*255+4+13+4=6936

Arytmetyka – dzielenie bez znaku 22/38

Page 23: Technika Mikroprocesorowa 1

4.2. Dzielenie restytucyjne

tekst programu: czasy wykonania rozkazów[okresy CLK]

; zał: L=L1, E=L2, L:=LW=L1:L2 LD B,8 ;licznik petli LD H,0 ;LDH:=0et1: ADD HL,HL ;SHL(L1) LD A,H SUB E ;A:=LDH-L2 JR C,et2 ;skok gdy LDH<L2 LD H,A ;LDH:=LDH-L2 INC L ;zerowy bit LDL:=1et2: DJNZ et1 ;H=reszta L=iloraz

[7] [7] [11] [4] [4] [7/12] [4] [4] [8/13]

złożonośćobliczeniowa:

L1<L2: ZOMIN=7+7+(11+4+4+12+13)*7+11+4+4+12+8=361L1=255 i L2=1:ZOMAX=7+7+(11+4+4+7+4+4+13)*7+11+4+4+7+4+4+8=385ZOSR=373

Arytmetyka – dzielenie bez znaku 23/38

Page 24: Technika Mikroprocesorowa 1

1. Można stosować przedstawione algorytmy mnożenia i dzielenia uwzględniając znak wyniku operacji zgodnie z regułami matematycznymi

wyznaczenie znaku Z wyniku

nadanie wynikowi znaku Z

L1:=-L1Z:=1

L1 < 0 ?

T

Z:=0

L2:=-L2Z:=(Z+1)mod 2

L2 < 0 ?

T

N

N

LW:=-LW

Z = 1 ?

T

N

Arytmetyka – mnożenie i dzielenie liczb ze znakiem 24/38

Page 25: Technika Mikroprocesorowa 1

wyznaczenie znaku Z wyniku na podstawie znaków argumentów operacji

A - akumulator procesora (1-bajtowy)L1H,L2H - najstarsze bajty argumentówA7 - najstarszy bit akumulatora

negacja znaku liczby m-bajtowej (argumentu lub wyniku)

A:=L1H

A:=A L2H

Z:=A7

i:=0CY:=0

L[ i ]:=0-L[ i ]-CYi:=i+1

i < m ?T

N

Arytmetyka – mnożenie i dzielenie liczb ze znakiem 25/38

Page 26: Technika Mikroprocesorowa 1

2. Można stosować przedstawione algorytmy mnożenia i dzielenia po tzw. rozszerzeniu znakowym argumentów operacji

Rozszerzenie znakowe zapisu liczby w kodzie U2 polega na podwojeniu długości reprezentacji binarnej poprzez poprzedzenie jej bitami ‘0’ gdy jest dodatnia albo bitami ‘1’ gdy jest ujemna. Przykładowo:

-100: 0FF9Ch 0FFFFFF9Ch

1000: 03E8h 000003E8h

Na tak „wydłużonych” liczbach realizuje się przedstawione wcześniej algorytmy działań, ograniczając uzyskany wynik do właściwej długości(np. 32 bitów po mnożeniu dwóch liczb 16-bitowych przed rozszerzeniem, 16 bitów po dzieleniu dwóch takich liczb, itp.).

Jednak działania na tak wydłużonych liczbach skutkują zdwojonym zapotrzebowaniem na pamięć danych i znacznie dłuższym czasem obliczeń.

Arytmetyka – mnożenie i dzielenie liczb ze znakiem 26/38

Page 27: Technika Mikroprocesorowa 1

1. Format stałopozycyjny liczby binarnej

wagibitów 2m-1 2m-2 . . . 21 20 2-1 2-2 . . . 2-(n+1) 2-n

bitów części całkowitej n bitów części ułamkowej

zakres reprezentowanych wartości: 0 .. 2m-2-n

przykładowe reprezentacje wartości rzeczywistych przy m=8 i n=4:

10,25 00001010.0100 10,20 00001010.0011 = 10,1875

ilość pozycji części całkowitej (m) i ułamkowej (n) zależy od:

wymaganej dokładności reprezentacji liczb rzeczywistych;

zakresu użytkowego liczb rzeczywistych.

Do reprezentacji liczb ze znakiem stosuje się kod U2.

Arytmetyka – zapis stałopozycyjny 27/38

Page 28: Technika Mikroprocesorowa 1

Przykładowe formaty stałopozycyjne i osiągane w nich zakresy liczb:

format wartości ujemne wartości dodatnie rozdzielczośćm.n min max min max

8.8 NB - - 0 28-2-8

255,9962-8

3,9E-38.8 U2 -(27)

-128-(2-8)

-3,9E-30 27-2-8

127,9962-8

3,9E-316.8 U2 -(215)

-32768-(2-8)

-3,9E-30 215-2-8

32767,9962-8

3,9E-316.16 U2 -(215)

-32768-(2-16)

-1,526E-50 215-2-16

32767,999982-16

1,526E-5

2. Dodawanie i odejmowanie liczb stałopozycyjnych

Operacje te przeprowadza się tak jak na liczbach całkowitych

Arytmetyka – zapis stałopozycyjny 28/38

Page 29: Technika Mikroprocesorowa 1

3. Mnożenie liczb stałopozycyjnych

Przykłady przy zał. formatu 4.2 (m=4, n=2):

A) 2,5 0010.10 2,5 0010.10 1 2 5 00101 00 iloczyny cząstkowe 5 0 001010 6,2 5 00000110.0100 suma iloczynów cząstkowych, m’=8, n’=4 0110.01 iloczyn po normalizacji części ułamkowej

B) 6,2 5 0110.01 1,5 0001.10 3 1 2 5 0110010 iloczyny cząstkowe 6 2 5 011001 9,3 7 5 00001001.0110 suma iloczynów cząstkowych, m’=8, n’=4 iloczyn po normalizacji części ułamkowej: 1001.01 = 9,25 - błąd zaokrąglenia w dół albo 1001.10 = 9,50 - błąd zaokrąglenia w górę

Arytmetyka – zapis stałopozycyjny 29/38

Page 30: Technika Mikroprocesorowa 1

4. Dzielenie liczb stałopozycyjnych

Realizuje się je tak jak dla liczb całkowitych.Przykład (format 4.2):2,00 : 1,25 = 1,60 1.1001 0001.10 = 1,50 - błąd zaokrąglenia 001000 : 101 - 101 110 - 101 1000 - 101 11

WNIOSKI:1. Przy operacjach dzielenia i mnożenia (szczególnie) mogą pojawiać się błędy

zaokrągleń i błędy reprezentacji.2. Format zapisu (długości części całkowitej i ułamkowej) musi być dobrany do

wartości liczbowych występujących w obliczeniach, do ilości operacji ‘*’ i ‘:’oraz wymaganej dokładności reprezentacji liczb.

Arytmetyka – zapis stałopozycyjny 30/38

Page 31: Technika Mikroprocesorowa 1

1. Zasada zapisu zmiennopozycyjnego

Dowolną liczbę rzeczywistą L można przedstawić jako:L = m p C

gdzie:m - mantysa o wartości z przedziału < 0 , p 0 );p - podstawa zliczania (np. 10);c - cecha całkowitaZwykle m {0} {< p-1 , p0 )} i jest to tzw. mantysa znormalizowana.

Dla liczb binarnych (p=2):m {0} {< 1/2 , 1 )}

Przykłady konwersji:0,75 = 2-1 + 2-2 0.11 = .1100 20 (=0,75 1)2,75 = 21 + 2-1 + 2-2 10.11 = .1011 22 (=0,6875 4)

Arytmetyka – zapis zmiennopozycyjny 31/38

Page 32: Technika Mikroprocesorowa 1

Mantysa jest pamiętana zwykle w kodzie ZM (wyróżniony bit znaku).Cecha jest przechowywana wprost w kodzie U2 lub w tzw. przesuniętym U2:

cecha c: cU2 cU2+80h LNB(cU2+80h)127 01111111 11111111 255... ... ... ...2 00000010 10000010 1301 00000001 10000001 1290 00000000 10000000 128-1 11111111 01111111 127-2 11111110 01111110 126... ... ... ...

-127 10000001 00000001 1-128 10000000 00000000 0

Zastosowanie przesuniętego U2 upraszcza algorytmy arytmetyki,ale wymaga ostrożności przy operacjach mnożenia i dzielenia liczb.

Arytmetyka – zapis zmiennopozycyjny 32/38

Page 33: Technika Mikroprocesorowa 1

2. Wzory podstawowych operacji arytmetycznych

p r z y z ał : L 1 = m 1 p C 1 , L 2 = m 2 p C 2 z a c h o d z i :

d l a c e c h y w U 2 d l a c e c h y w U 2 p r z e s u n ię ty m o

L 1 L 2 = m 1 m 2 p C 1 + C 2 L 1 L 2 = m 1 m 2 p C 1 + C 2 -

L 1 : L 2 = m 1 : m 2 p C 1 - C 2 L 1 : L 2 = m 1 : m 2 p C 1 - C 2 +

L 1 L 2 = ( m 1 j e ż e l i c 1 > c 2

( m 1 j e ż e l i c 1 = c 2

( ( m 1 j e ż e l i c 1 < c 2

( : ) )

)

: ) )

m p p

m p

p m p

c c c

c

c c c

2

2

2

1 2 1

1

2 1 2

Arytmetyka – zapis zmiennopozycyjny 33/38

Page 34: Technika Mikroprocesorowa 1

3. Przykłady formatów zmiennopozycyjnych

A)

mNB

cU2m {0} {< 1/2 , 255/256 >} c < -128 , 127 >zakres wartości:0 , 2-129 , ... , 255 2119

0 , 1,47 10-39 , ... , 1,69 1038

B)

m0ZM

Z cU2+40h

m1ZM

7 6 0 m {0} {< 1/2 , 1-2-16 >} c < -64 , 63 >zakres wartości:-65535 247 ... -(2-65) ,0,2-65 ... 65535 247

-9,221018...-2,7110-20,0,2,7110-20...9,221018

C)

Z m2ZM

m0ZM

cU2+80h

m1ZM

2322 16

m {0} {< 1/2 , 1-2-23 >} c < -128 , 127 >zakres wartości:-(223-1)2104 ... -2-129 ,0, 2-129 ...(223-1) 2104

-1,71038...-1,4710-39 ,0 , 1,4710-39...1,71038

Arytmetyka – zapis zmiennopozycyjny 34/38

Page 35: Technika Mikroprocesorowa 1

D)m0ZM

Z cU2+80h

m1ZM

31|30 23|22 16

m2ZM

I8087 liczba rzeczywista krótka|| - domyślny 7 bit m2 ZM z założenia zawsze =1zakres wartości:-(224-1)2103 ... -2-129 ,0, 2-129 ...(224-1) 2103

-1,71038...-1,4710-39 ,0 , 1,4710-39...1,71038

wartość 0 m=0 i c=0

E)m0ZM

Z cU2+400h

m1ZM

63|62 68|67 64

m6ZM

m4ZMm5ZM

m2ZMm3ZM

I8087 liczba rzeczywista długa|| - domyślny 4 bit m6 ZM z założenia zawsze =1zakres wartości:-(229-1)2995 ... -2-1025 ,0, 2-1025 ...(229-1)2995

-1,810308...-2,7810-309 ,0 ,2,7810-309...1,810308

wartość 0 m=0 i c=0

F)m0ZM

Z cU2+4000h

m1ZM

79|78 64

m6ZM

m4ZMm5ZM

m2ZMm3ZM

m7ZM

I8087 liczba rzeczywista rozszerzonazakres wartości:-(264-1)216319 ... -2-16385,0,2-16385 ...(264-1) 216319

-5,95104931...-4,210-4933 , 0 , 4,210-4933 ...5,95104931

wartość 0 m=0 i c=0

Arytmetyka – zapis zmiennopozycyjny 35/38

Page 36: Technika Mikroprocesorowa 1

4. Przykładowe algorytmy

4.1. Dodawanie i odejmowanie

Lw = mw p CW = L1 L2 =

=

(m1 jeżeli c1 > c2

(m1 jeżeli c1 = c2

((m1 jeżeli c1 < c2

( : ))

)

: ) )

m p p

m p

p m p

c c c

c

c c c

2

2

2

1 2 1

1

2 1 2

<0 >0

=0

c:=c1-c2

c ?

cw:=c1

m2:=m2:pCm1:=m1:p|C|

cw:=c2

mw:=m1m2

mw > p0 ? NT

mw = 0 ?

N

T

mw < p-1 ?N

T

mw:=mwpcw:=cw-1

mw:=mw : pcw:=cw+1

Arytmetyka – zapis zmiennopozycyjny 36/38

Page 37: Technika Mikroprocesorowa 1

4.2. Mnożenie

Lw = mw p CW = L1 L2 = m1 m2 p C1+C2

zależnie od stanu mantys

m1 i m2znormalizowane

cw:=c1+c2mw:=m1 m2

mw = 0 ?T N

mw < p-1 ?

cw:=cw-1mw:=mw p

T

N

m1 lub m2nieznormalizowana

Arytmetyka – zapis zmiennopozycyjny 37/38

Page 38: Technika Mikroprocesorowa 1

4.3. Dzielenie

Lw = mw p CW = L1 : L2 = m1 : m2 p C1-C2

W zależności od stanu mantys m1,m2:

zn

zn

cw:=c1-c2mw:=m1 : m2

mw = 0 ?T N

cw:=cw-1mw:=mw p

mw < p-1 ?

T

N

nzn

m2 = 0 ? TN sygnalizacjabłędu

mw > p0 ?

T

N

cw:=cw+1mw:=mw : p

nzn

zn - m1 i m2 znormalizowane nzn - m1 lub m2 nieznormalizowana

Arytmetyka – zapis zmiennopozycyjny 38/38