Technika Mikroprocesorowa 1
description
Transcript of Technika Mikroprocesorowa 1
![Page 1: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/1.jpg)
Technika Mikroprocesorowa 1
Kody binarne
![Page 2: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/2.jpg)
Wykład 2 2/52
Kody binarne w technice mikroprocesorowej
Arytmetyka binarnych liczb całkowitych
Arytmetyka liczb stałopozycyjnych
Arytmetyka liczb zmiennopozycyjnych
![Page 3: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/3.jpg)
Kody binarne - NB 3/52
NB
BIN DEC HEX0000 0 00001 1 10010 2 20011 3 30100 4 40101 5 50110 6 60111 7 71000 8 81001 9 91010 10 A1011 11 B1100 12 C1101 13 D1110 14 E1111 15 F
wagi bitów w bajcie:27 26 25 24 23 22 21 20
128 64 32 16 8 4 2 1
10
2N..i
iiNB bL
Przykładowo:30 = 16+8+4+2 = 24+23+22+21 00011110
![Page 4: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/4.jpg)
binarnie dziesiętnie szesnastkowona 1 tetradzie(ang. nibble):0000..1111 0..15 0..0Fhna 1 bajcie:00000000.. 0..255 00..0FFh..11111111
na 2 bajtach:0000000000000000.. 0.. 0000....1111111111111111 ..65535 ..0FFFFh
Kody binarne - NB 4/52
zakresy wartości:
Zastosowania:arytmetyka liczb dodatnich, indeksowanie tablic, zliczanie zdarzeń
![Page 5: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/5.jpg)
Kody binarne - ZM 5/52
ZM
BIN DEC HEX0000 0 00001 1 10010 2 20011 3 30100 4 40101 5 50110 6 60111 7 71000 - 81001 -1 91010 -2 A1011 -3 B1100 -4 C1101 -5 D1110 -6 E1111 -7 F
wagi bitów w bajcie:b.z. 26 25 24 23 22 21 20
0/1 64 32 16 8 4 2 1
2021 1
N..i
ii
bZM b)(L N
Przykładowo:-30 = -1(16+8+4+2) = -1(24+23+22+21) 10011110
![Page 6: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/6.jpg)
Kody binarne - ZM 6/52
binarnie dziesiętnie szesnastkowona 1 tetradzie:
1111..0111 -7..7 0Fh..7na 1 bajcie:11111111.. -127..127 0FFh..7Fh..01111111
na 2 bajtach:1111111111111111.. -32767.. 0FFFFh....0111111111111111 ..32767 ..7FFFh
zakresy wartości:
Zastosowania:reprezentacja mantys liczb w zapisie zmiennopozycyjnym,niektóre przetworniki A/C
![Page 7: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/7.jpg)
Kody binarne - U2 7/52
U2
BIN DEC HEX1000 -8 81001 -7 91010 -6 A1011 -5 B1100 -4 C1101 -3 D1110 -2 E1111 -1 F0000 0 00001 1 10010 2 20011 3 30100 4 40101 5 50110 6 60111 7 7
wagi bitów w bajcie:-27 26 25 24 23 22 21 20
-128 64 32 16 8 4 2 1
20
12 2128N..i
iiNU bbL
Przykładowo:30 = 16+8+4+2 = 24+23+22+21 00011110-30 = -128+64+32+2 = -(27)+26+21 11000010
![Page 8: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/8.jpg)
Kody binarne - U2 8/52
binarnie dziesiętnie szesnastkowona 1 tetradzie:
1000..0111 -8..7 8..7na 1 bajcie:10000000.. -128..127 80h..7Fh..01111111
na 2 bajtach:1000000000000000.. -32768.. 8000h....0111111111111111 ..32767 ..7FFFh
zakresy wartości:
Zalety:prosta arytmetyka, prawidłowy znak sumy lub różnicy liczb powstaje automatycznieZastosowania:arytmetyka liczb ze znakiem, cechy liczb w zapisie zmiennopozycyjnym
![Page 9: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/9.jpg)
Reguła negacji znaku w U2: L LU U2 2 1
Przykłady:17 00010001 -17 11101111 1 00000001 256 0000000100000000
11101110 00010000 11111110 1111111011111111+1 +1 +1 +1
-17 11101111 17 00010001 -1 11111111 -256 1111111100000000
Metoda mnemotechniczna:256 0000000100000000 0 1 0 0h
negacja-256 1111111100000000 0 F F 0 0h
dopełnienie do 15-stu dopełnienie do 16-stu
Kody binarne - U2 9/52
![Page 10: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/10.jpg)
Kody binarne - U1 10/52
U1
BIN DEC HEX1000 -7 81001 -6 91010 -5 A1011 -4 B1100 -3 C1101 -2 D1110 -1 E1111 -0 F0000 0 00001 1 10010 2 20011 3 30100 4 40101 5 50110 6 60111 7 7
wagi bitów w bajcie:1-27 26 25 24 23 22 21 20
-127 64 32 16 8 4 2 1
20
11 2127N..i
iiNU bbL
Przykładowo:33 = 32+1 = 25+20 00100001-33 = -127+64+16+8+4+2 = (1-27)+26+24+23+22+21 11011110
Wady:„podwójne zero”, trudniejsza arytmetyka liczb o różnych znakach
![Page 11: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/11.jpg)
Kody binarne - BCD 11/52
BCD
BIN DEC HEX0000 0 00001 1 10010 2 20011 3 30100 4 40101 5 50110 6 60111 7 71000 8 81001 9 9
Przykładowo:33 = 10(2+1) + 1(2+1) = 10(21 + 20) + 1(21 + 20) 00110011
3..0i
i
D..0d
dBCD )2b10(L di
Wady:słabe wykorzystanie dostępnych bitów, brak znaku.
Zastosowania:arytmetyka liczb w zapisie BCD, obsługa wyświetlaczy, jako kod pośredni międzyzapisem binarnym liczby a jej reprezentacją tekstową (w kodzie ASCII).
wagi bitów w bajcie (tzw. kodu spakowanego:1023 1022 1021 1020 23 22 21 20
80 40 20 10 8 4 2 1
d=0d=1
![Page 12: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/12.jpg)
Kody binarne - kod Gray’a 12/52
kod Gray’a
BIN DEC0000 00001 10011 30010 20110 60111 70101 50100 41100 121101 131111 151110 141010 101011 111001 91000 8
0 0 00 0 10 1 10 1 01 1 01 1 11 0 11 0 0
tworzeniekolejnych słów kodu:
Zaleta:dowolne dwa kolejne kody (także pierwszy i ostatni)różnią się tylko na jednej pozycji!Zastosowanie:tarcze kodowe do kontroli położenia obracających się elementów
![Page 13: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/13.jpg)
Kody binarne - pierścieniowy 13/52
kod pierścieniowy
Zastosowanie:dekodery wybierające np. 1 z N urządzeń, ukł. pamięci
kod 1z N kod 1 z Nprzykłady dla N=8
binarnie szesnastkowo binarnie szesnastkowo00000001 01 11111110 FE00000010 02 11111101 FD00000100 04 11111011 FB00001000 08 11110111 F700010000 10 11101111 EF00100000 20 11011111 DF01000000 40 10111111 BF10000000 80 01111111 7F
![Page 14: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/14.jpg)
Kody binarne - pierścieniowy 14/52
kod pseudopierścieniowy
przykład dla 8 bitówbinarnie szesnastkowo
00000000 0000000001 0100000011 0300000111 0700001111 0F00011111 1F00111111 3F01111111 7F11111111 FF11111110 FE11111100 FC11111000 F811110000 F011100000 E011000000 C010000000 80
![Page 15: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/15.jpg)
Kody binarne - pierścieniowy 15/52
kod Aikena (2421)
binarnie szesnastkowo0000 00001 10010 20011 30100 41011 B
oś symetrii kodu
1100 C słowa binarne położone symetrycznie względem tej osi1101 D są wzajemnie swoimi negacjami1110 E1111 F
![Page 16: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/16.jpg)
Kody binarne - ASCII 16/52
ASCII128 kodów binarnych (0..127) reprezentujących: 33 kody sterujące i 95 podstawowych znaków alfanumerycznych
Zastosowanie:komunikacja znakowa (tekstowa), obsługa wyświetlaczy mozaikowych, drukarek, klawiatur autonomicznych, itd.ASCII rozszerzony - dodatkowe 128 kodów (128..255) reprezentujących różne znaki pisarskie i semigrafikę.
ASCII podstawowy
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_
_0 NUL DLE 0 @ P ` p
_1 SOH DC1 ! 1 A Q a q
_2 STX DC2 ‘’ 2 B R b r
_3 ETX DC3 # 3 C S c s
_4 EOT DC4 $ 4 D T d t
_5 ENQ NAK % 5 E U e u
_6 ACK SYN & 6 F V f v
_7 BEL ETB ‘ 7 G W g w
_8 BS CAN ( 8 H X h x
_9 HT EM ) 9 I Y i y
_A LF SUB * : J Z j z
_B VT ESC + ; K [ k {
_C FF FS , < L \ l |
_D CR GS - = M ] m }
_E SO RS . > N ^ n ~
_F SI US / ? O _ o DEL
![Page 17: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/17.jpg)
Arytmetyka - NB 17/52
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 18: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/18.jpg)
Arytmetyka - U2 18/52
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 !
![Page 19: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/19.jpg)
Arytmetyka - BCD 19/52
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
![Page 20: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/20.jpg)
Arytmetyka - długie liczby 20/52
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
![Page 21: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/21.jpg)
LW: XXX
L1:8002
L2:
88
C200
35
i=X CY=x
Arytmetyka - długie liczby 21/52
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)
![Page 22: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/22.jpg)
Arytmetyka - długie liczby 22/52
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
![Page 23: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/23.jpg)
Arytmetyka - mnożenie bez znaku 23/52
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
![Page 24: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/24.jpg)
Arytmetyka - mnożenie bez znaku 24/52
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
![Page 25: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/25.jpg)
Arytmetyka - mnożenie bez znaku 25/52
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
![Page 26: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/26.jpg)
Arytmetyka - mnożenie bez znaku 26/52
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
![Page 27: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/27.jpg)
Arytmetyka - mnożenie bez znaku 27/52
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
![Page 28: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/28.jpg)
Arytmetyka - mnożenie bez znaku 28/52
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.
![Page 29: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/29.jpg)
Arytmetyka - mnożenie bez znaku 29/52
• 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
![Page 30: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/30.jpg)
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.
Arytmetyka - mnożenie bez znaku 30/52
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
![Page 31: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/31.jpg)
Arytmetyka - mnożenie bez znaku 31/52
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
![Page 32: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/32.jpg)
Arytmetyka - dzielenie bez znaku 32/52
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
![Page 33: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/33.jpg)
Arytmetyka - dzielenie bez znaku 33/52
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
![Page 34: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/34.jpg)
Arytmetyka - dzielenie bez znaku 34/52
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
![Page 35: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/35.jpg)
Arytmetyka - dzielenie bez znaku 35/52
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
![Page 36: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/36.jpg)
Arytmetyka - dzielenie bez znaku 36/52
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
![Page 37: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/37.jpg)
Arytmetyka - dzielenie bez znaku 37/52
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
![Page 38: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/38.jpg)
Arytmetyka - liczby ze znakiem 38/52
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
![Page 39: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/39.jpg)
Arytmetyka - liczby ze znakiem 39/52
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
![Page 40: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/40.jpg)
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 40/52
![Page 41: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/41.jpg)
Arytmetyka - zapis stałopozycyjny 41/52
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.
![Page 42: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/42.jpg)
Arytmetyka - zapis stałopozycyjny 42/52
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
![Page 43: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/43.jpg)
Arytmetyka - zapis stałopozycyjny 43/52
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ę
![Page 44: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/44.jpg)
Arytmetyka - zapis stałopozycyjny 44/52
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.
![Page 45: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/45.jpg)
Arytmetyka - zapis zmiennopozycyjny 45/52
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)
![Page 46: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/46.jpg)
Arytmetyka - zapis zmiennopozycyjny 46/52
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.
![Page 47: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/47.jpg)
Arytmetyka - zapis zmiennopozycyjny 47/52
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
![Page 48: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/48.jpg)
Arytmetyka - zapis zmiennopozycyjny 48/52
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
![Page 49: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/49.jpg)
Arytmetyka - zapis zmiennopozycyjny 49/52
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
![Page 50: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/50.jpg)
Arytmetyka - zapis zmiennopozycyjny 50/52
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
![Page 51: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/51.jpg)
Arytmetyka - zapis zmiennopozycyjny 51/52
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
![Page 52: Technika Mikroprocesorowa 1](https://reader036.fdocuments.pl/reader036/viewer/2022062801/56814351550346895dafc9ae/html5/thumbnails/52.jpg)
Arytmetyka - zapis zmiennopozycyjny 52/52
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