preliv in prenos pri aritmeticnih operacijah v digitalnem racunalniku v tem dokumentu bomo govorili o tem kako uporabiti prelivni in prenosni bit v registru stanja kadar zelimo interpretirati rezultat sestevanja ali odstevanja v digitalnem racunalniku najprej bomo na kratko ponovili pojma predznacenih in nepredznacenih celih stevil nato bomo spoznali kaksen pomen imata prenosni in prelivni bit za programerja in na kaksen nacin ta dva bita nastavlja racunalnik na koncu pa bomo pogledali kako na podlagi informacije o prenosu oziroma prelivu interpretirati rezultat aritmeticne operacije pri razlagi bomo se bomo omejili na osembitni racunalnik ceprav povedano velja za poljubno dolzino besede predznacena in nepredznacena cela stevila v osembitnem racunalniku hranimo podatke v obliki osembitnih besed da ne bi prislo do nesporazumov kadar bomo govorili o posameznih bitih oznacimo bite v besedi z indeksi od do b b b b b b b b pri tem ima bit z indeksom najvecjo bit z indeksom pa najmanjso tezo kadar v digitalnih racunalnikih racunamo s celimi stevili so ta lahko bodisi predznacena ali nepredznacena predznacena stevila imajo predznak in lahko zavzamejo pozitivne ali negativne vrednosti dogovorimo se da najvisji bit bit b predstavlja predznak ce je b je stevilo pozitivno sicer je negativno dogovorimo se tudi da so negativna stevila zapisana v dvojiskem komplementu dvojiski komplement binarnega stevila dobimo ce eniskemu komplementu pristejemo enico eniski komplement pa dobimo tako da negiramo vse bite v besedi vse enice zamenjamo z niclami in vse nicle z enicami sicer obstajajo se drugi nacini zapisovanja negativnih stevil vendar je ta nacin zapisovanja najpogostejsi ker nam v splosnem omogoca najenostavnejso izvedbo operacije odstevanja poglejmo si za primer dve osembitni besedi ki predstavlajta dve predznaceni celi stevili zapis predstavlja pozitivno vrednost ker je b in sicer je to desetiska vrednost po drugi strani predstavlja zapis negativno vrednost ker je b desetisko vrednost dobimo tako da najprej poiscemo dvojiski komplement tega zapisa s tem smo vrednost pomnozili z potem pa ga pretvorimo v desetisko vrednost dvojiski komplement stevila je kar je desetisko zapis predstavlja torej vrednost na taksen nacin lahko z osmimi biti zapisemo vse vrednosti od do nepredznacena stevila se od predznacenih razlikujejo po tem da nimajo predznaka in so po definiciji vedno pozitivna najvisji bit tu ne predstavlja predznaka od ostalih sedmih bitov se loci le po svoji tezi v primeru nepredznacenih stevil tako zapis predstavlja vrednost z osmimi biti lahko zapisemo stevila med in sestevanje in odstevanje ter prekoracitev obmocja ni tezko uganiti da lahko pri sestevanju ali odstevanju dveh bodisi predznacenih bodisi nepredznacenih stevil dobimo rezultat ki se ga z osmimi biti ne da vec zapisati ker je prevelik ali premajhen ce na primer sestejemo dve nepredznaceni stevili in dobimo cesar se ne da vec zapisati kot osembitno nepredznaceno celo stevilo zgornja meja za ta stevila je kaj se je v tem primeru v resnici zgodilo bomo najbolje videli na primeru stevilskega kroga neskoncna stevilska premica celih stevil ki jo poznamo iz matematike se v primeru da obmocje vrednosti omejimo na osembitne binarne vrednosti preslika v stevilski krog ki ga prikazuje slika zunanja stran kroga prikazuje nepredznacena stevila ki tecejo od do sestejmo sedaj vrednosti in graficno to storimo tako da se postavimo na ter gremo za mest v pozitivni smeri v smeri urinega kazalca ko smo koncali opazimo da smo se ustavili na stevilki kar seveda ni pravilen rezultat sestevanja rezultat je napacen ker smo na poti presegli ki je najvecje stevilo ki ga se lahko zapisemo kot osembitno nepredznaceno stevilo omejitev dolzine besede na osem bitov na tem mestu nekoliko izkrivi matematiko tako da velja kadarkoli pri sestevanju dveh nepredznacenih osembitnih celih stevil presezemo vrednost je dobljeni osembiten rezultat napacen v tem primeru pravimo da je prislo do prenosa na bitnem nivoju je to prenos ki je nastal pri sestevanju najvisjih bitov bitov b obeh sumandov na sliki je ta prenos oznacen z zgornjo puscico pod crko c angl carry prenos slika stevilski krog ki ponazarja osembitna predznacena in nepredznacena cela stevila podobno zadrego dozivimo ce zelimo odsteti dve nepredznaceni stevili na primer ce zacnemo pri in gremo za sest mest v negativno smer nasprotna smer urinega kazalca pristanemo na tudi tokrat je rezultat napacen ker smo tudi na tej poti presegli obmocje osembitnih nepredznaceni stevil le da sedaj preko spodnje meje tu se je pripetilo da je in tudi tokrat pravimo da je prislo do prenosa na sliki je ta prenos oznacen s spodnjo puscico pod crko c notranjo stran kroga na sliki smo posvetili predznacenim stevilom podobno kot pri nepredznacenih stevilih tudi v tem primeru obstaja mesto kjer obicajna matematika odpove le da je to mesto na spodnji strani kroga vzemimo za primer stevilo in mu pristejmo ce gremo po notranji strani kroga od za tri mesta v pozitivno smer prispemo v na tej poti smo doziveli da je kadarkoli pri sestevanju dveh predznacenih osembitnih celih stevil presezemo vrednost je dobljeni osembitni rezultat napacen v tem primeru pravimo da je prislo do preliva ta preliv je na sliki oznacen s spodnjo puscico pod crko v angl overflow preliv podobno se zgodi ce na primer od odstejemo v tem primeru dobimo kar je seveda napacen rezultat zopet je prislo do preliva ta preliv je na sliki oznacen z zgornjo puscico pod crko v kot povzetek vsega povedanega lahko zapisemo naslednjo ugotovitev preliv in prenos oba opozarjata na to da je rezultat sestevanja ali odstevanja napacen ker je prevelik ali premajhen da bi ga lahko zapisali z osmimi biti v primeru nepredznacenih stevil nas na nepravilnost rezultata opozarja prenos v primeru predznacenih stevil pa to pocne preliv kako racunalnik postavlja prenosni in prelivni bit v registru stanja za razliko od programerja digitalni racunalnik ne ve nicesar o predznacenih in nepredznacenih stevilih ce racunalniku programer z ustreznim ukazom zapove naj sesteje ali odsteje dva podatka bo racunalnik to storil vedno na enak nacin ne glede na to kaksno stalisce ima do teh podatkov programer kako naj potemtakem programer po opravljeni racunski operaciji preveriti pravilnost dobljenega osembitnega rezultata ce racunalniku ni mar za tip podatkov kaj bo po opravljeni operaciji racunalnik nastavil prenos ali preliv odgovor je da bo nastavil oboje logicno drobovje racunalnika je zasnovano tako da po vsaki aritmeticni operaciji pravilno nastavi tako prenosni kot tudi prelivni bit programer nato zgolj pogleda ustrezen bit ce se odloci da bo racunal s predznacenimi stevili ga bo zanimal prelivni bit v nasprotnem primeru bo preverjal prenosni bit poglejmo po kaksni logiki racunalnik nastavlja oba bita zaradi nekaterih posebnosti bomo opbravnavali sestevanje in odstevanje loceno sestevanje sestejmo dve osembitni besedi x x x x x x x x y y y y y y y y c z z z z z z z z pri sestevanju lahko v splosnem dobimo prenos na najvisjem mestu z bita z na c ce se to zgodi potem racunalnik nastavi prenosni bit prelivni bit se nastavlja glede na kombinacijo vrednosti najvisjih bitov obeh sumandov in rezultata x y in z moznih je osem razlicnih kombinacij najvisjih treh bitov od katerih se preliv nastavi le pri dveh x y z preliv taksno nastavljanje lahko pojasnimo takole ce so v igri predznacena stevila potem najvisji trije biti x y in z predstavljajo predznake obeh sumandov in rezultata rezultat sestevanja je ocitno napacen v primeru ko sestevamo dve pozitivni stevili in je rezultat negativen druga vrstica v gornji tabeli kot tudi v primeru ko sestevamo dve negativni stevili in dobimo pozitiven rezultat predzadnja vrstica gornje tabele kot vidimo v tabeli se v obeh primerih nastavi prelivni bit na ena na prvi pogled so vprasljive stiri kombinacije v katerih imata sumanda nasproten predznak tretja do sesta vrstica tabele ni tezko pokazati da v teh primerih nikakor ne moremo dobiti napacnega rezultata zato lahko racunalnikova logika brez skrbi postavi prelivni bit na nic za zgled kako racunalnik nastavlja prenosni in prelivni bit si poglejmo nekaj primerov sestevanja v c v c v c v c za vajo interpretiraj vrednosti v gornjih stirih primerih enkrat kot predznacena in drugic kot nepredznacena stevila in poglej kako se nastavljena bita skladata s pravilnostjo rezultata odstevanje vemo da je celostevilsko odstevanje v digitalnih racunalnikuh obicajno uresniceno kot pristevanje dvojiskega komplementa tako se na primer racun prevede v rezultat sestevanja je in iz prejsnjega razdelka vemo da dobljena kombinacija najvisjih bitov pomeni da je racunalnik nastavil preliv zakaj moramo torej odstevanje obravnavati posebej za to sta dva razloga prvi je povezan s predznacenimi drugi pa z nepredznacenimi stevili vzemimo najprej primer ko zelimo odsteti predznaceno vrednost binarno od na primer binarno to se prevede v binarna vrednost je sama sebi dvojiski komplement rezultat sestevanja je in iz kombinacije najvisjih bitov bi sklepali da racunalnik ne bo nastavil preliva ce pa pogledamo originalni racun vidimo da v resnici od pozitivnega stevila odstevamo negativno pristevamo pozitivno stevilo in potemtakem pricakujemo pozitiven rezultat ker je vrednost najvisjega bita rezultata v resnici ena je rezultat negativen in torej napacen racunalnik v tem primeru seveda postavi prelivni bit na ena vrednost nam tu povzroca tezavo ker je njen dvojiski komplement in ne kot bi si zeleli pri gradnji digitalnega racunalnika je potrebno ta poseben primer odstevanje vrednosti upostevati programer se lahko potem zanese da bo racunalnik pravilno nastavil prelivni bit tudi v tem mejnem primeru tako da bo lahko iz njegove vrednosti dolocil pravilnost rezultata drugo tezavo pri odstevanju predstavljajo nepredznacena stevila pri nepredznacenih stevilih vedno odstevamo eno pozitivno stevilo od drugega pozitivnega stevila za rezultat imamo dve moznosti lahko je pozitiven in pravilen saj ne more biti vecji od lahko pa je negativen in napacen kar pomeni da se mora nastaviti prenosni bit v primeru odstevanja nepredznacenih stevil vrednost prenosnega bita torej vedno ustreza predznaku rezultata odstevanja c pomeni pozitiven c pa negativen rezultat racunalnikova logika je zasnovana tako da v primeru napacnega negativnega rezultata vedno nastavi prenosni bit ta logika je pravzaprav zelo enostavna ce gre za odstevanje ki je izpeljano kot pristevanje dvojiskega komplementa je vrednost prenosnega bita vedno negirana vrednost dejanskega prenosa z najvisjega bita ilustrirajmo si to idejo z nekaj zgledi c v c v c v kako dobimo pravilen rezultat sedaj ze vemo da nam prenosni in prelivni bit govorita o pravilnosti rezultata sestevanja ali odstevanja in vemo tudi da lahko pri njunem nastavljanju racunalniku stoodstotno zaupamo ce prenosni oziroma prelivni bit nista nastavljena potem vemo da je dala aritmeticna operacija ki smo jo izvedli nad dvema nepredznacenima oziroma predznacenima steviloma pravilen rezultat ki ga lahko takoj uporabimo ce pa ugotovimo da je rezultat napacen ga zelimo obicajno popraviti kako poglejmo si najprej kako to storimo v primeru nepredznacenih stevil ce je rezultat aritmeticne operacije napacen je to zaradi tega ker je ta presegel obmocje vrednosti ki jih je moc zapisati z osmimi biti prva ugotovitev na poti k pravilnemu rezultatu je torej ta da potrebujemo vec bitov oziroma daljso besedo rezultat bomo popravili tako da mu bomo na levi dodali se eno osembitno besedo ce na primer sestejemo dobimo osembiten rezultat in nastavljen prenosni bit c prenosni bit pravi da je rezultat presegel obmocje nepredznacenih osembitnih celih stevil ni tezko uganiti da moramo spredaj dodati osembitno besedo tako da dobimo pravilen sestnajstbitni rezultat na tezavo naletimo ce presezemo spodnjo mejo obmocja osembitnih nepredznacenih celih stevil kajti nepredznacena stevila ne morejo biti negativna pred rezultat lahko dodamo kolikor bitov zelimo a se vedno ne bomo mogli zapisati negativne vrednosti do pravilnega rezultata lahko pridemo le v primeru ce ga interpretiramo kot predznaceno vrednost odstejmo za primer med seboj nepredznaceni stevili in nastavil se je prenosni bit c kar pomeni da je rezultat negativen pravilen rezultat zapisan kot sestnajstbitno predznaceno stevilo je kar predstavlja vrednost povzamemo lahko recept ki pravi da v primeru prenosa napacnega rezultata pri sestevanju nepredznacenih stevil rezultat popravimo tako da dodamo pred njega osembitno besedo iz sedmih nicel in enice v primeru prenosa pri odstevanju vemo da je rezultat negativen zato predenj postavimo besedo iz osmih enic in ga interpretiramo kot sestnajstbitno predznaceno stevilo kako pa je s predznacenimi stevili ce nekoliko pretehtamo kar smo doslej ugotovili o napacnih rezultatih pri predznacenih stevilih ugotovimo da ima napacen rezultat vedno tudi napacen predznak tako imamo za napacen rezultat dve moznosti napacen rezultat ima lahko najvisji bit postavljen na in je v resnici pozitiven lahko pa ima ta bit postavljen na in je v resnici negativen poglejmo za konec se dva racuna ki ilustrirata obe moznosti najprej sestejmo dve negativni stevili tu se je postavil prelivni bit in predznak rezultata je pozitiven najvisji bit ima vrednost pravilen sestnajstbitni rezultat je torej negativen in se sestevanje dveh pozitivnih stevil tudi tu se je postavil prelivni bit najvisji bit rezultata pa ima vrednost pravilen rezultat je potemtakem pozitiven v povzetku spet ugotovimo preprost recept ce se pri sestevanju isto velja za odstevanje dveh predznacenih stevil postavi prelivni bit in je najvisji bit rezultata enak potem je pravilen predznak rezultata negativen rezultat popravimo tako da dodamo spredaj besedo iz samih enic v nasprotnem primeru ce je prvi bit rezultata enak je pravilen predznak pozitiven zato dodamo besedo iz samih nicel fakulteta za elektrotehniko racunalnistvo za elektrotehnike pisi mi