Procesorski sistemi v telekomunikacijah Operacije s celimi tevili
























- Slides: 24
Procesorski sistemi v telekomunikacijah Operacije s celimi števili (c) Árpád Bűrmen, 2010 -2019
Zapis nepredznačenih celih števil Zapis z n biti, možna števila 0. . 2 n-1 Kodiranje v dvojiškem zapisu Uteži mest so potence števila 2 Število = vsota uteži neničelnih mest v zapisu Uteži za dvojiški zapis nepredznačenih 8 -bitnih števil 100011112= =128+8+4+2+1= =14310 2 18 9 4 2 1 = = = 2 2 2 x x x 9 4 2 1 0 + + + 0 1 0 0 1 1810=100102= =000100102
Zapis predznačenih celih števil (zapis z dvojiškim komplementom) Zapis z n biti, možna števila -2 n-1. . 2 n-1 -1 Uteži mest so potence števila 2 Utež najvišjega mesta (MSB) je negativna Število = vsota uteži neničelnih mest v zapisu Uteži za dvojiški zapis predznačenih 8 -bitnih števil Negativna števila imajo MSB=1 Primer 100011102= =-128+8+4+2=-11410 3
Nepredznačeno : predznačeno Nepredznačeno Zapis (8 bitov) Predznačeno ---------------------------------------------0 0000 0 1 00000001 1 2 00000010 2. . 127 01111111 127 (maxp) 128 10000000 -128 (minn) 129 10000001 -127. . 254 11111110 -2 255 (max) 1111 -1 n-bitni zapis predznačenegativnega števila -x je enak n-bitnemu zapisu nepredznačenega števila 2 n – x 4
Številski krog Števila v matematiki so neomejena. Nepredznačena Predznačena 0 1 2 3 4 5 6 7 8. . . -4 -3 -2 -1 0 1 2 3 4. . . V računalništvu so števila omejena zaradi končne dolžine zapisa. max-1 max 0 1 2 -2. . . 0 1 2. . . zapis z n-biti maxp=2 n-1 -1 minn=-2 n-1 zapis z n-biti max=2 n x+1 = en korak v smeri urinega kazalca x-1 = en korak nasproti urinemu kazalcu 5 -1 . . . minn . . . maxp
Sprememba predznaka ali dvojiški komplement. . . 0 -x x 2 n korakov 2 n – x korakov 6 -x leži x korakov od 0 v obratni smeri urinega kazalca. . . ali 2 n – x korakov v smeri urinega kazalca 2 n – x = (2 n – 1 – x) +1
. . . sprememba predznaka ali dvojiški komplement 2 n – 1 je nepredznačeno število zapisano s samimi enicami Nepredzn. 2 n – 1 – x invertira bite v zapisu števila x (2 n – 1 – x) +1 ustreza invertiranju bitov zapisa x, ki mu sledi nepredznačeno prištevanje števila 1 Primer za 8 -bitni predznačen zapis (2 n=256) 7 -11510 = 100011012 11510 = 011100112 Invertiraj bite 011100102 Prištej 1 (nepredznačeno) 011100102 +1 Rezultat 011100112 = 11510 Invertiraj bite 100011002 Prištej 1 (nepredznačeno) 100011002 +1 Rezultat 100011012 = -11510
Zakaj je zapis z dvojiškim komplementom dober? Recimo, da imamo vezje za seštevanje nepredznačenih števil. To vezje bo pravilno seštelo tudi dve predznačeni števili, če sta zapisani v zapisu z dvojiškim komplementom. Z vezjem lahko izvedemo odštevanje (x – y) tako, da k x prištejemo dvojiški komplement števila y. 2510 = 00011001 prvo predznačeno število 2 -11510 = 100011012 število drugo predznačeno Seštej kot dve nepredznačeni števili 00011001 +10001101 ----101001102=-128+32+4+2=-9010 8
Seštevanje in odštevanje Prevelik/premajhen rezultat. . . Nepredznačena števila max-1 max 0 1 Seštevanje 2. . . zapis z n-biti max=2 n Odštevanje Če prekoračimo mejo med max in 0 dobimo napačen rezultat. Pravimo, da se je zgodil prenos (carry). 9
Seštevanje in odštevanje Prevelik/premajhen rezultat. . . Predznačena števila -2 -1 0 1 2. . . Seštevanje zapis z n-biti maxp=2 n-1 -1 minn=-2 n-1 Odštevanje. . . minn . . . maxp Če prekoračimo mejo med maxp in minn dobimo napačen rezultat. Pravimo, da se je zgodil preliv (overflow). 10
Zastavice (flags) Biti v registru stanja – rezultat zadnje operacije. Zastavica Z (Zero) Z=1, če je rezultat enak 0 oz. Z=0, če ni. Zastavica N (Negative) N=1, če je najvišji bit rezultata enak 1 oz. N=0, če ni. Zastavica V (o. Verflow) V=1, če se je zgodil preliv, oz. V=0, če se ni. Zastavica C (Carry) C=1, če se je zgodil prenos, oz. C=0, če se ni. Pozor! nekateri procesorji (npr. ARM) pri odštevanju postavijo C=0, če se zgodi prenos in C=1, če se ne zgodi. 11
Seštevanje in odštevanje Zapis rezultata Seštevanje/odštevanje dveh n-bitnih števil Rezultat lahko zmeraj zapišemo z n+1 biti Operanda sta nepredznačeni števili - rezultat tolmačimo kot nepredznačeno število Operanda sta predznačeni števili - rezultat tolmačimo kot predznačeno število C predstavlja n+1. bit rezultata Pozor! Pri odštevanju na nekaterih procesorjih (npr. ARM) je n+1. bit rezultata je enak negaciji zastavice C. 12
Zapis daljših števil v pomnilniku Zapis k-bitnih števil v n-bitne celice (k>n) Razbijemo na skupine po n bitov Uporabimo k/n zaporednih celic za zapis Kaj pa vrstni red? Zapis 16 -bitnega števila v 8 -bitne celice Little endian Big endian Uporablja ga Cortex M 3 (lahko) SAM 3 X 8 E (C. M 3) INTEL (npr i 386) 13 Uporablja ga Cortex M 3 (lahko) Motorola 68 k
Seštevanje daljših števil n bitov MSW A LSW A MSW B LSW B C + C MSW rezultata LSW rezultata 1 bit n bitov ARM, 64 -bitno seštevanje /* R 2 = MSW A, R 1 = LSW A */ /* R 4 = MSW B, R 3 = LSW B */ /* Rezultat seštevanja: R 6 = MSW, ADDS R 5, R 3, R 1 ADCS R 6, R 4, R 2 14 + Odštevanje dolgih števil poteka podobno. R 5 = LSW /* R 5=R 3+R 1, določi C (statusni register) */ /* R 6=R 4+R 2+C, določi C (statusni register) */
Odštevanje Primerjava nepredznačenih števil Izračun A-B = primerjava števil A in B Če rezultat pade iz območja nepredzn. števil. . . C=1 če ostane v območju. . . C=0 Če je rezultat enak 0. . . zastavica Z=1 Pozor z zastavico C in ARM!!! če ni enak 0. . . zastavica Z=0 Pri odštevanju na ARM dobimo iz območja in Zastavica V nima nobene vloge. C=0 če. C=1 pademo če ne pademo! 15 Če velja Po odštevanju (A-B) dobimo A=B A≠B A≥B A>B A<B A≤B Z=1 Z=0 C=0 in Z=0 C=1 ali Z=1 (C=1 in Z=0 za ARM) (C=0 ali Z=1 za ARM)
Odštevanje Primerjava predznačenih števil Izračun A-B = primerjava števil A in B Če je V=1, zastavica N laže glede predznaka pravilnega rezultata Pravilna vrednost A-B je negativna, če je N exor V = 1 Če je rezultat enak 0. . . zastavica Z=1 ni enak 0. . . zastavica Z=0 Zastavica C nima nobene vloge. 16 Če velja Po odštevanju (A-B) dobimo A=B A≠B A≥B A>B A<B A≤B Z=1 Z=0 (N exor V)=0 in Z=0 (N exor V)=1 ali Z=1
Bitne operacije Aritmetični/logični pomik bitov v levo Bit izpade Bit Utež 0 1 0 0 1 128 64 32 16 8 1 4 0 2 1 1 = 7710 Bit Utež 1 0 0 1 1 128 64 32 16 8 0 4 1 2 0 1 = 15410 Dodana ničla Biti se pomaknejo za eno mesto v levo. Na desni (LSB) se doda ničla. Levi bit (MSB) izpade. Biti nepredznačenega števila se pomaknejo k utežem z dvojno vrednostjo. Nepredznačena vrednost se torej podvoji. . . operacija je enaka množenju z 2. Tudi predznačena vrednost se podvoji (množi z 2). 17
Bitne operacije Logični pomik v desno Bit izpade Dodana ničla Bit Utež 0 1 0 0 1 128 64 32 16 8 1 4 0 2 0 1 = 7610 Bit Utež 0 0 128 64 32 16 8 1 4 1 2 0 1 = 3810 Biti se pomaknejo za eno mesto v desno. Na levi (MSB) se doda ničla. Desni bit (LSB) izpade. Biti nepredznačenega števila se pomaknejo k utežem s polovično vrednostjo. Nepredznačena vrednost se prepolovi. . . operacija je enaka deljenju z 2. Operacija nima pomena za predznačena števila. 18
Bitne operacije Aritmetični pomik v desno Kopija MSB Bit Utež 1 1 0 0 1 -128 64 32 16 8 0 4 1 2 0 1 Bit Utež 1 1 1 0 0 -128 64 32 16 8 1 4 0 2 1 1 Bit izpade = -5410 = -2710 Biti se pomaknejo za eno mesto v desno. Na levi (MSB) se ponovi MSB prvotne vrednosti. Desni bit (LSB) izpade. Biti predzn. števila se pomaknejo k utežem s polovično vrednostjo. Po pomiku sta leva dva bita enaka 11 (-128+64=-6410) ali 00 (010) Za predznačena števila je operacija enakovredna deljenju z 2. Operacija nima pomena za nepredznačena števila. 19
Množenje celih števil Množenje dveh n-bitnih števil. . . 2 n-biten rezultat Nepredznačeno in predznačeno množenje nista enaki operaciji Dvojiško množenje = pomikanje v levo + seštevanje Desetiško nepredznačeno 235 x 153 -----23500 = 235 x 100 +11750 = 235 x 50 +00705 = 235 x 3 ------035955 153 20 Dvojiško nepredznačeno 110001 x 110110 --------1100000 = 110001 +0110000 = 110001 +000000 = 110001 +00011000100 = 110001 +00001100010 = 110001 +000000 = 110001 --------101001010110 x x x 100000 010000 000100 000010 000000 -----110110
Deljenje celih števil Deljenje dveh n-bitnih nepredznačenih števil. . . n-biten rezultat Deljenje dveh n-bitnih predznačenih števil. . . n+1 – biten rezultat Dvojiško deljenje = pomikanje v desno + odštevanje Desetiško nepredznačeno 18763 : 121 ≤ 18763 12100 ≤ 18763 tu začnemo 121000 > 18763 = 12100 x 1 + 6663 = 1210 x 5 + 613 = 121 x 5 + 8 18763 = 121 x 155 + 8 Dvojiško nepredznačeno 110111 : 101 ≤ 110111 101000 ≤ 110111 tu začnemo 1010000 > 110111 1111 101 = 101000 x 1 + 1111 = 10100 x 0 + 1111 = 1010 x 1 + 101 = 101 x 1 + 0 110111 = 101 x 1011 + 0 21
Množenje in deljenje v praksi Običajno je izvedeno v obliki vgrajenega programa. Čeprav ima procesor ukaz za množenje/deljenje, traja izvajanje tega ukaza več urinih ciklov. Primer: ARM, 68 HC 11 V signalnih procesorjih je množenje ponavadi izvedeno s temu namenjenim vezjem – množilnikom. Rezultat dobimo v enem urinem ciklu. 22
Ostale bitne operacije AND, OR, EXOR računajo s soležnimi biti operandov. x 0 0 1 1 xxxx op yyyy -------zzzz y 0 1 x AND y 0 0 0 1 x OR y 0 1 1 1 x EXOR y 0 1 1 0 Drugemu operandu (y) včasih pravimo tudi maska Invertiranje vseh bitov = eniški komplement (one’s compement) Sprememba predznaka za predznačena števila = dvojiški komplement (two’s complement) = eniški komplement +1 Rotacije – krožni pomik bitov preko bita C Za izvedbo daljših aritm. /log. pomikov v levo/desno. Rotacija b 7 23 b 6 b 5 b 4 b 3 b 2 b 1 b 0 C bitov v desno
. . . v siliciju Bell labs DSP-1 Intel 80386 ALU = Arithmetic Logic Unit – Aritmetično-Logična Enota 24