Binär aritmetik TSIU02 Datorteknik

Relevanta dokument
Binär addition papper och penna metod

F2 Binära tal EDA070 Datorer och datoranvändning

Digital- och datorteknik

Datoraritmetik. Binär addition papper och penna metod. Binär subtraktion papper och penna metod. Binär multiplikation papper och penna metod

Digital- och datorteknik

F2 Datarepresentation talbaser, dataformat och teckenkodning EDAA05 Datorer i system! Roger Henriksson!

F2 Datarepresentation talbaser, dataformat och teckenkodning

Digital- och datorteknik

Datorsystemteknik DVG A03 Föreläsning 3

Digital Aritmetik Unsigned Integers Signed Integers"

Struktur: Elektroteknik A. Digitalteknik 3p, vt 01. F1: Introduktion. Motivation och målsättning för kurserna i digital elektronik

Digital- och datorteknik

Digital elektronik CL0090

Förenklad förklaring i anslutning till kompedieavsnitten 6.3 och 6.4

Adderare. Digitalteknik 7.5 hp distans: 4.6 Adderare 4.45

Talsystem Teori. Vad är talsystem? Av Johan Johansson

IE1205 Digital Design: F6 : Digital aritmetik 2

Datorsystem. Övningshäfte. Senast uppdaterad: 22 oktober 2012 Version 1.0d

Talrepresentation. Heltal, positiva heltal (eng. integers)

DIGITALA TAL OCH BOOLESK ALGEBRA

Digital- och datorteknik

2-14 Binära talsystemet-fördjupning Namn:

Adderare. Digitalteknik 7.5 hp distans: 4.6 Adderare 4.45

ÖH kod. ( en variant av koden används i dag till butikernas streck-kod ) William Sandqvist

Flyttal kan också hantera vanliga tal som både 16- och 32-bitars dataregister hanterar.

Bråk. Introduktion. Omvandlingar

IE1204 Digital Design

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Digital- och datorteknik

Tenta i Digitalteknik

1. Inledning, som visar att man inte skall tro på allt man ser. Betrakta denna följd av tal, där varje tal är dubbelt så stort som närmast föregående

6. Ge korta beskrivningar av följande begrepp a) texteditor b) kompilator c) länkare d) interpretator e) korskompilator f) formatterare ( pretty-print

Datorteknik Programmering av AVR

Algoritmer i Treviso-aritmetiken.

Föreläsning 8: Aritmetik och stora heltal

Moment 2 - Digital elektronik. Föreläsning 1 Binära tal och logiska grindar

Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

Tenta i Digitalteknik

Mattias Wiggberg Collaboration

SVAR TILL TENTAMEN I DATORSYSTEM, HT2013

3-5 Miniräknaren Namn:

Det finns en hemsida. Adressen är

Potenser och logaritmer på en tallinje

Repetitionsuppgifter inför Matematik 1. Matematiska institutionen Linköpings universitet 2013

Tentamen i Digital Design

Institutionen för systemteknik, ISY, LiTH. Tentamen i. Tid: kl

3-3 Skriftliga räknemetoder

Hur implementera algoritmerna på maskinnivå - datorns byggstenar

Matematik klass 4. Vårterminen. Namn: Anneli Weiland Matematik åk 4 VT 1

Uppsala Universitet Matematiska Institutionen Thomas Erlandsson

Några satser ur talteorin

Grunderna i stegkodsprogrammering

TATM79: Föreläsning 1 Notation, ekvationer, polynom och summor

Utvidgad aritmetik. AU

Repetitionsuppgifter i Matematik inför Basår. Matematiska institutionen Linköpings universitet 2014

Shannon-Fano-Elias-kodning

Block 2 Algebra och Diskret Matematik A. Följder, strängar och tal. Referenser. Inledning. 1. Följder

I denna laboration undersöker vi hur aritmetiska beräkningar utförs. Vi tittar på olika variabeltyper: 8-bitars, 16-bitars, 32-bitars och flyttal.

CE_O3. Nios II. Inför lab nios2time

Resträkning och ekvationer

i LabVIEW. Några programmeringstekniska grundbegrepp

Grundläggande Datorteknik Digital- och datorteknik

Laboration Kombinatoriska kretsar

Digitalteknik 7.5 hp distans: 5.1 Generella sekvenskretsar 5.1.1

Repetitionsuppgifter inför Matematik 1-973G10. Matematiska institutionen Linköpings universitet 2014

inte följa någon enkel eller fiffig princip, vad man nu skulle mena med det. All right, men

7 november 2014 Sida 1 / 21

Denna uppdelning är ovanlig i Sverige De hela talen (Både positiva och negativa) Irrationella tal (tal som ej går att skriva som bråk)

Digital- och datorteknik, , Per Larsson-Edefors Sida 1

Matematik 5 Kap 2 Diskret matematik II

a = a a a a a a ± ± ± ±500

TATM79: Föreläsning 2 Absolutbelopp, summor och binomialkoefficienter

Övningsblad 1.1 A. Tallinjer med positiva tal. 1 Skriv det tal som motsvaras av bokstaven på tallinjen.

Övningshäfte 2: Induktion och rekursion

a) A = 3 B = 4 C = 9 D = b) A = 250 B = 500 C = a) Tvåhundrasjuttiotre b) Ettusenfemhundranittio

Datorteknik Programmering av AVR

Matematik klass 4. Vårterminen FACIT. Namn:

Tema: Pythagoras sats. Linnéa Utterström & Malin Öberg

Dra streck. Vilka är talen? Dra pil till tallinjen. Skriv på vanligt sätt. Sätt ut <, > eller =

Tisdag v. 2. Speglingar, translationer och skalningar

Arbetsblad 1:1. Tiondelar på tallinjen 0,1 0,5 0,9 0,2 0,8 0,3 0,8 1,1 1,5 1,6 2,1 2,4 1,1 1,4 2,6 3,2 3,8

Arbetsblad 1:1. Tiondelar på tallinjen 0,9 1,1 0,8. 6 Sätt ut pilar som pekar på talen: A = 0,3 B = 0,8 C = 1,4

Arbetsblad 1:1. Tiondelar på tallinjen. 6 Sätt ut pilar som pekar på talen: A = 0,3 B = 0,8 C = 1,4

Göra lika i båda leden

1Mer om tal. Mål. Grunddel K 1

Lokala kursplaner i Matematik Fårösunds skolområde reviderad 2005 Lokala mål Arbetssätt Underlag för bedömning

Försättsblad till skriftlig tentamen vid Linköpings universitet

TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1

Lokala mål i matematik

Datoraritmetik. Från labben. Från labben. Några exempel

Vad är en UART? Universal Asynchronous Receiver Transmitter parallella seriella parallell åttabitars signal mest signifikant bit

HF0010. Introduktionskurs i datateknik 1,5 hp

2-1: Taltyper och tallinjen Namn:.

Hela tal LCB 1999/2000

Ett urval D/A- och A/D-omvandlare

Tentamen i Digitalteknik, EIT020

Övningar och datorlaborationer, Datorer i system

Olika sätt att lösa ekvationer

Transkript:

Binär aritmetik TSIU02 Datorteknik Michael Josefsson Version 1.2

Innehåll 1. Addition och tvåkomplement 5 1.1. Talbaser..................................... 5 1.2. Addition..................................... 6 Exempel................................. 7 Exempel................................. 7 1.3. Talrepresentationer............................... 8 Exempel................................. 8 1.4. Basen 2 10... 9 Exempel................................. 9 1.5. Höger- och vänsterskift............................. 10 1.6. Omvandling från binär till decimal form och tvärtom............ 10 Exempel................................. 11 1.7. Hexadecimal representation.......................... 12 1.7.1. Omvandling binär till hexadecimal form............... 12 Exempel................................. 12 1.7.2. Olika skrivsätt............................. 13 1.7.3. Omvandling hexadecimal till decimal form.............. 13 Exempel................................. 13 1.8. Negativa binära tal............................... 13 1.9. 2-komplement.................................. 14 Exempel................................. 14 Exempel................................. 15 Två anmärkningar........................... 16 Exempel................................. 16 1.10. Aritmetiska operationer: addition, subtraktion, skift............ 17 1.11. Ett hjälpmedel: cirkulärgrafen......................... 18 Exempel................................. 18 1.11.1. Spill................................... 18 1.12. Hårdvara.................................... 19 Exempel................................. 21 2. Multiplikation 23 2.1. Multiplikation snitsigare metod...................... 26 Matematisk beskrivning av metoden................. 26 2.2. Men tvåkomplement då?............................ 28 2.2.1. Utökat talområde............................ 29 3

Innehåll Exempel................................. 29 2.2.2. Spillkompensering av (a + b)/2.................... 29 Metod 1 Med utökat talområde.................. 30 Exempel................................. 30 Metod 2 Utan utökat talområde.................. 30 Exempel................................. 30 2.3. Robertsons algoritm.............................. 31 Exempel................................. 32 A. Robertsons algoritm 35 Exempel................................. 36 Metod 2 genom användning av spillflaggan............ 36 Exempel................................. 37 Exempel................................. 37 4

1. Addition och tvåkomplement Från digitaltekniken har vi behandlat binära tal och vet hur de är uppbyggda. I denna kurs ska vi tillämpa dessa kunskaper mer praktiskt. För att kunna hänga med i svängarna har det visat sig att en repetition är nödvändig. Även om du kan mycket om det binära talsystemet bör du läsa igenom detta så att inget hamnat mellan stolarna. 1.1. Talbaser Innan vi går in på de egentliga talrepresentationerna måste vi definiera begreppet talbas. Våra vanliga, hederliga tal har basen 10 och den mest framträdande egenskapen är kanske att övergången från 9 till 10 innebär att entalssi ran här börjar om från noll samtidigt som talet begåvas med en tiotalssi ra. Det är emellertid inget speciellt med basen 10. Man kan mycket väl tänka sig, exempelvis, basen 5 istället. I det senare fallet byggs alla tal upp av fem symboler 0, 1, 2, 3 och 4 och en uppräkning från noll sker enligt 0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24,... Då 10 ovan är farligt likt det vi normalt kallar tio, fastän det numeriska värdet inte alls motsvarar detta, är det vanligt att ange talbasen i petitstil vid sidan av talet, à la 10 5. Våra vanliga decimaltal anges på samma sätt med exempelvis 17 10. Lägg märke till att basen alltid anges i decimal form! 1 Det är lätt att hitta symboler för alla tal upp till 9, om vi skulle behöva. Vi tar bara våra gamla bekanta 0,..., 9. Så för talbaser mindre än 10 uppstår inga problem, vi har redan en uppsättning lämpliga symboler. Men vad händer när vi ska använda en talbas större än 10? Exempelvis talbasen 16? Symbolerna 0 till 9 återanvänder vi som vanligt, och när dom tagit slut fortsätter vi med alfabetets bokstäver, A, B, C, D, E och F, och har på så sätt erhållit 16 symboler. Att räkna med denna talbas kommer bli vardagsmat under kursen och det är väl redan nu ingen större överraskning att man räknar upp talen så här: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 1C,... 1 Varför då? Försök själv att ange 10 5 helt i basen 5, dvs med basen 5 10... 5

1. Addition och tvåkomplement Att kunna hantera och översätta mellan olika talbaser är viktigt och några metoder för detta kommer att presenteras snart. Om detta och andra operationer verkar svårt kan det kanske vara lämpligt att betrakta hur motsvarande operationer utförs under talbasen 10. Alla operationer har naturligtvis sin motsvarighet i den decimala talbasen och de avmystifieras ofta om övergång till decimaltal görs. Innan vi lämnar dessa preliminärer skall bara nämnas den mest använda talbasen i digitala sammanhang basen 2. Vi behöver här två symboler och väljer naturligt dessa som 0 och 1. Mycket förvirring skulle kunna undanvaras om de en gång hade valts till 0 och X eller något annat som inte förekommer i basen 10, men vi anpassar oss till bruket i branschen och använder 0 och 1. Med bara två symboler sker uppräkning från 0 av teckenlösa tal som 0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011,... För att inte blanda ihop 1000 ovan med det decimala tusen, är det viktigt att skriva talbasen så fort sammanhanget kan vara osäkert för läsaren, dvs talet bör anges som 1000 2.Märk att detta är en tjänst åt läsaren. Som vanligt gör man som man vill i egna anteckningar, men resultat och liknande bör förses med gällande talbas. 1000 2 uttalas dessutom aldrig tusen utan ett-noll-noll-noll. Tabellen nedan visar förhållandet mellan baserna 10 (decimal bas), 5 och 2. Bas 10 bas 5 bas 2 0 0 0 1 1 1 2 2 10 3 3 11 4 4 100 5 10 101 6 11 110 7 12 111 8 13 1000 9 14 1001 10 20 1010 11 21 1011 : : : 1.2. Addition Vi har ju ovan redan lärt oss addera i varje fall med ett vid uppräkningen av talen från noll och uppåt. Vi ska emellertid behandla addition lite för att kunna gå vidare och lära oss hantera negativa tal och andra räknesätt. 6

1.2. Addition Addition är enkelt, det finns egentligen bara fyra summor att hålla reda på (talbasen är förstås 2): Det enda märkvärdiga med addition är här den fjärde summan, där resultet blir två si ror. Resultatet kan delas upp i en-talsdelen (här 0) och två-talsdelen (här 1). 2 Tvåtalsdelen kallas som vanligt för minnessi ra eller, vanligare i datorsammanhang, carry som är det engelska uttrycket. Addition av flersi riga tal utförs som man förväntar sig, om bara ordlängden är given: Exempel Addera de båda binära talen 01011 och 10111! Antag ordlängden 5 10. Additionen sker bitvis med början i den minst signifikanta biten. Det viktiga är här att komma ihåg att 1+1+0=10 och 1+1+1=11 som alltså genererar en carry till nästa bit. Vi ser också att denna addition ger ett resultat om sex bitar medan termerna bara var fem si ror långa. Om ordlängden är fem bitar kallas den extra, sjätte, biten för carry. Om ordlängden däremot är, exempelvis åtta, har ingen carry generats i detta fall: Exempel Addera de båda binära talen 01011 och 10111! Antag ordlängden 8 10. 2 Jämför med additionen 9 + 1 = 10, här får vi en en-talssi ra och en tio-talssi ra. 7

1. Addition och tvåkomplement Begreppet ordlängd är viktigt att förstå. Ordlängden anger det antal bitar som används i beräkningen, med undantag för eventuell genererad minnessi ra. Antagligen låter detta begrepp lite egendomligt, men det klarnar då vi ser att registren i en mikroprocessor har en konstant längd som just är lika med ordlängden. 1.3. Talrepresentationer Det finns två sorters tal i datorsammanhang fixtal och flyttal: Ett fixtal är av typen..., 2, 1, 0, 1, 2,... d v s ett positivt eller negativt tal. Fixtal behöver däremot inte enbart vara heltal. Det går utmärkt att införa en decimalpunkt i talet, men då har denna decimalpunkt ett bestämt läge. Precis som kassaapparater som räknar i ören och har en fast decimaldel som omfattar de två minst signifikanta si rorna. När vi räknar med fixtal behöver vi aldrig bry oss om decimalpunkten. Den finns där på ett fast läge och påverkar inte uträkningarna. Flyttalen skiljer sig mot fixtalen genom att de kan innehålla en decimalpunkt var som helst i talet. Praktiskt görs detta genom att talet delas upp en mantissa och en exponent. Talets värde erhålls sedan ur mantissa 2 exponent.oftanormaliseras mantissan, vilket innebär att den görs så stor den kan utan att bli störe än ett. Med decimala tal kan exempelvis talet 42 anges som 42 10 0 =4.2 10 1 =0.42 10 2. Mantissan är här 0.42 och exponenten 2. Talet är dessutom normaliserat eftersom vi inte kan multiplicera mantissan med 10 utan att den blir större än 1. Talen 42 10 0,4.2 10 1 och 0.0042 10 4 är däremot inte normaliserade. Addition av flyttal går till på samma sätt som addition av fixtal. På samma sätt som vi ställer upp de tal som skall adderas så att talens minsta signifikanta bitar står under varann o s v måste man göra för flyttal. För att kunna addera två flyttal måste alltså mantissornas respektive bitar med samma vikt stå under varann. För att åstadkomma detta måste ofta talen avvnormaliseras så att detta är fallet. Exempel Addera de båda flyttalen 63 och 398! Inget av talen är normaliserade (de är inte ens skrivna på mantissaexponentform) så vi gör det först: 63 = 63 10 0 =6.3 10 1 =0.63 10 2 och 8

1.4. Basen 2 10 398 = 198 10 0 = 39.8 10 1 =3.98 10 2 =0.398 10 3 Nu är talen normaliserade och den egentliga additionen kan inledas. Först gäller det att få si ror med samma vikt i samma position eller, vilket är samma sak, se till att talen har samma exponent. Ett av talen måste alltså avnormaliseras. Här väljer vi att avnormalisera det mindre talet, dvs 0.63 10 2 =0.063 10 3. När nu talen har samma exponent kan vi addera mantissorna: 0.063 + 0.398 = 0.460 Vi ser att 0.460 inte kan multipliceras med 10 utan att bli större än ett varför mantissan är normaliserad redan nu, d v s exponenterna behöver inte röras och talet kan slutligen skrivas: 0.460 10 3 som alltså är summan av 63 och 398. Ibland kan additionen av mantissorna ge ett tal som är större än ett. I sådana fall måste slutresultatet normaliseras, genom att mantissan divideras med 10 och exponenten ökas med ett. Beräkningar med flyttal ingår inte i kursen men kännedom om dess princip enligt ovan gör det. 1.4. Basen 2 10 I talbasen 2 representeras talen av dess binära representant som enbart kan utgöras av talbasens två symboler 0 respektive 1. Exempel Översätt det binära talet 10011101 till sitt decimala värde: 9

1. Addition och tvåkomplement Den enskilda binära si ran kallas en bit (av engelskans binary digit). En grupp av fyra sådana si ror kallas en nibble (ev nybble) medan en åtta-grupp kallas för oktett eller numera vanligare byte. Det är viktigt att kunna översätta mellan olika talbaser. Speciellt baserna 2, 10 och 16 är vanliga. Förr användes även den oktala talbasen 8 men den är numera sällsynt. 1.5. Höger- och vänsterskift Man ser snart att man kan multiplicera ett tal med 2 genom att skifta det binära talet ett steg åt vänster 3 Att detta fungerar kan man se av likheten P x i 2 n i 2 = P x i 2 n i 2 1 = P x i 2 (n+1) i. På motsvarande sätt kan naturligtvis en divison med 2 utföras genom högerskiftning. För talet ovan är det trivialt att genomföra denna operation, och svaret blir rätt. Om talets minst signifikanta bit är 1 kommer divisionen resultera i en precisionsförlust eftersom denna bit kommer att skiftas ut ur talet. En påföljande multiplikation med 2 kommer inte att resultera i det ursprungliga talet! Exempel: 1.6. Omvandling från binär till decimal form och tvärtom Med kännedom om positionsvikterna hos ett binärt tal är det lätt att översätta ett sådant tal till dess decimala motsvarighet. Omvändningen är dock inte helt lika enkel. Här skall två metoder presenteras, dels en med hjälptabell över tvåpotenser och dels en genom upprepad division med 2 och inspektion av divisionens rest. 3 Jämför med hur vi i det decimala talsystemet lätt kan multiplicera ett tal med 10 genom att skifta talet åt vänster och lägga till en nolla. 10

1.6. Omvandling från binär till decimal form och tvärtom Exempel Översätt 98 10 till dess binära motsvarighet! Metod 1. Med hjälptabell Leta reda på, och subtrahera med, närmast mindre tvåpotens. Om subtraktionen gav ett negativt resultat, notera en nolla, återställ resultatet och börja om. Om subtraktionen gav ett positivt resultat noteras en etta och resultatet använs i nästa omgång. Alltså: D v s 98 10 = 1100010 2. Man läser högra kolumnen uppifrån. Och man ser då också varför metoden fungerar, den skiljer precis ut de jämna tvåpotenser som bygger upp talet. Just här använde vi ingen tabell men det är lätt att upprätta en tabell över tvåpotenser för att underlätta översättningen. Metod 2. Genom upprepad division med 2 Samma tal som ovan ger följande beräkningar. Lägg märke till om rest uppstår vid divisionen.... som ger samma svar som förra metoden, 1100010 2. Men man måste läsa nerifrån och upp i det senare fallet. 11

1. Addition och tvåkomplement 1.7. Hexadecimal representation Förutom det rent binära talsystemet förekommer även det hexadecimala talsystemet, med basen 16 10 ofta i fortsättningen. Det är i allmänhet inga svårigheter att omvandla ett binärt tal till dess hexadecimala motsvarighet och tvärtom. Med följande hjälptabell är det särskilt enkelt. Decimaltal Binärtal Hexadecimaltal 0 0000 0 1 0001 1 2 0010 2 3 0011 3 4 0100 4 5 0101 5 6 0110 6 7 0111 7 8 1000 8 9 1001 9 10 1010 A 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F 1.7.1. Omvandling binär till hexadecimal form Exempel Översätt talet 1110101111 2 till basen 16 10! Vi använder tabellen ovan. Översätt varje fyr-grupp till sin hexadecimala motsvarighet och saken är klar: Det kan faktiskt vara idé att lära sig tabellen utantill, åtminstone tills kursen är avslutad. 12

1.8. Negativa binära tal 1.7.2. Olika skrivsätt Förutom att skriva ett litet index som anger talbasen signaleras i allmänhet hexadecimala tal genom att det inleds med ett $-tecken, men även andra skrivsätt förekommer. Således är detta sant: $62 = 0x62 = H 0 62 = 62 16. 1.7.3. Omvandling hexadecimal till decimal form Översättningen mellan hexadecimala tal och decimaltal görs med kunskap om talpositionen: Exempel Översätt det hexadecimala talet $3AF till decimaltal! 1.8. Negativa binära tal För teckenlösa binära tal har vi sett att talvärdet kan erhållas genom addition av tvåpotenser. Närmare bestämt tvåpotenserna..., 2 3, 2 2, 2 1, 2 0 dvs talen..., 8, 4, 2, 1. Ett fyrabitars positivt tal, X, som består av bitarna x 3,x 2,x 1,x 0 får alltså det decimala värdet: Vi har även behov av att kunna representera negativa tal. Det finns flera möjliga representationer för dessa. Vi fastnar för en som har trevliga egenskaper och dessutom enkelt kan implementeras i hårdvara, 2-komplement. 13

1. Addition och tvåkomplement 1.9. 2-komplement Ett tal, X = {x 3,x 2,x 1,x 0 }, kan i 2-komplement skrivas: Vi ser att talets bitar får positionsvikterna 4, 2, och 1 som vanligt men att mest signifikant bit har störst och negativ vikt. Bitarna {x 2,x 1,x 0 } bygger upp ett positivt tal men eftersom x 3 :s vikt är störst och negativ kommer denna att byta tecken på hela talet om den är ett-ställd. Mest signifikant bit kallas därför för teckenbit. För att sammanfatta: Ett tvåkomplementstal med mest signifikant bit ett-ställd är alltså alltid ett negativt tal. Ett tvåkomplementstal med mest signifikant bit noll-ställd är alltså alltid ett positivt tal. Exempel Översätt det binära talet 1011 till ett decimaltal under förutsättning att vi vet att det är ett tvåkomplementstal! För att tydlighets skull gör vi detta i två steg: Först bygger vi upp ett positivt tal med bitarna {x 2,x 1,x 0 } enligt formeln ovan: Sedan applicerar vi teckenbiten, x 3 : Tydligen betyder 1011 2 = 5 10. Och det verkar rimligt eftersom teckenbiten är satt och talet således är negativt. 14

1.9. 2-komplement En tabell över decimaltal och trebitars tvåkomplementstal kan konstrueras på samma sätt som i exemplet: Decimaltal Tvåkomplementtal 0 000 1 001 2 010 3 011 4 100 3 101 2 110 1 111 Vi ser att tvåkomplementsrepresentationen kan representera både positiva och negativa tal. De negativa binärtalen utmärks av att teckenbiten är ett-ställd. De positiva kännetecknas av att teckenbiten är nollställd. Detta gäller generellt, oavsett vilken ordbredd som används. Fördelen med tvåkomplementsrepresentationen är att vi kan genomföra additioner och subtraktioner precis som förut. D v s det behövs ingen speciell additionsmetod bara för att talen är tvåkomplementerade. En direkt följd av detta är att det inte finns något som överhuvudtaget skiljer tvåkomplementstal från teckenlösa tal. Man kan inte se på dem om de är det ena eller det andra. Det är upp till betraktaren att avgöra om ett tal skall tolkas som ett tvåkomplementstal eller inte. Exempel Visa att addition med tvåkomplementstal fungerar och ger rätt resultat! Vi kan göra det med tabellen ovan som hjälp. 15

1. Addition och tvåkomplement I och med att vi kan addera vilka tal som helst kan vi också subtrahera dom, ty subtraktion kan ses som addition med omvänt tecken på ena termen. En kunskap vi ju faktiskt redan använde i exemplet ovan. Tvåkomplementsrepresentationen av ett binärt tal är lätt att beräkna: Invertera alla bitar och addera 1, dvs Om man lever i en tvåkomplementsvärld sker alltså teckenbyte av ett tal genom att tvåkomplementera det. Teckenbytet gäller förstås både övergång från positiva till negativa tal och tvärtom. Två anmärkningar Ett vanligt missförstånd är att tvåkomplementstal med nödvändighet är negativa. Det är inte sant. De kan vara negativa men det hänger på teckenbiten om de är det. Ett positivt tal kan tvåkomplementeras till ett negativt och ett negativt tal kan tvåkomplementeras till ett positivt. Ett tvåkomplementstal byter inte tecken bara genom att ändra teckenbiten. Det byter förstås tecken men talet blir samtidigt något annat. Man måste tvåkomplementera det för att beloppet ska vara detsamma. Exempel 1) Vad blir 7 uttryckt som ett binärt (tvåkomplements) tal? 2) Vad blir 1101 2 i decimal form? Talet är negativt då teckenbiten, längst till vänster i talet, är ett-ställd. För att ta reda på vilket negativt tal det är tar vi först fram vilket positivt det handlar om. Vi vet ju sedan att det skall förses med ett negativt tecken. 16

1.10. Aritmetiska operationer: addition, subtraktion, skift Talets belopp är således 3 och med rätt tecken är svaret 3. 1.10. Aritmetiska operationer: addition, subtraktion, skift Med några enkla prov kan vi konstatera att följande gäller även för tvåkomplementrepresentationen: 1. Addition fungerar som vi förväntar oss. 2. Subtraktion genomförs som addition med negativt tal, d v s a b = a +( b). 3. Vänsterskift av alla bitar ett steg innebär multiplikation med två. 4. Högerskift av alla bitar är nästan division med två: +4 10 2 10 = 0100 2 2 10 = 0010 2 =2 10, som är korrekt, men 4 10 2 10 = 1100 2 2 10 = 0110 2 = +6, som är fel! Problemet löser vi här genom att införa ett speciellt högerskift som bara ska användas vid tvåkomplementkodade tal 4, det aritmetiska (höger)skiftet som bevarar teckenbitens värde: 4 10 2 10 = 1100 2 2 10 = 1110 2 = 2, ok. Det aritmetiska högerskiftet kan alltså 5 ritas som Man ser att teckenbiten längst till vänster bevaras (kopieras till sig själv) medan biten längst till höger går förlorad. 4 Och strängt taget bara nödvändigt vid högerskiftning av negativa tvåkomplementkodade tal. 5 Istället för att kasta bort den minst signifikanta biten lagras den ofta i carryflaggan. Det viktiga är här vad som händer vid den mest signifikanta biten den måste bevaras, den innehåller ju talets tecken. 17

1. Addition och tvåkomplement 1.11. Ett hjälpmedel: cirkulärgrafen Addition och subtraktion kan göras mer åskådliga med cirkulärgrafen. Cirkulärgrafen är i princip en tallinje med den skillnaden att den tar hänsyn till att vi rör oss med en begränsad ordlängd och att vi dessutom föredrar tvåkomplementrepresentation framför allt: 111 1 000 0 001 +1 110 2 +2 010 3 101 4 100 +3 011 Som på en tallinje kan addition genomföras genom att gå åt höger, vilket blir medurs ihär. Och omvänt med subtraktion. Det man speciellt ska lägga märke till är vad som händer vi addition av tal med lika tecken. Exempel Addera 3 10 och 2 10 I basen 2 börjar vi vid 011 och stegar sedan fram medurs genom 100 till 101 och summan är tydligen 101 = 3 10! Det var ju egendomligt att en addition av positiva tal kan ge ett negativt tal som resultat, men det är helt konsekvent med vår cirkulärgraf. Orsaken kan naturligtvis härledas till vår begränsade ordlängd. Med en längre ordlängd skulle ovanstående addition fungera ända tills vi adderar oss över gränsen mellan positiva och negativa tal. 1.11.1. Spill Fenomenet ovan kallas spill (eng overflow) och ställer till problem för oss då vi efter varje addition måste kontrollera om spill uppstått. Om spill föreligger är resultatet alltså felaktigt. Lägg märke till att det inte är något fel i själva additionen, bitarna har adderats 18

1.12. Hårdvara på rätt sätt, det är vår tvåkomplementstolkning som ställer till det. Om vi istället för tvåkomplementstal enbart tänker oss positiva tal hela cirkeln runt så stämmer additionen. Spill uppkommer om tal med lika tecken ger en summa med annat tecken. Spill är bara intressant vid 2-komplementstal, annars är ju annat tecken omöjligt! En följd av detta är att om addition av teckenlösa tal ger spill kan man bortse från detta. På ungefär samma sätt visualiserar cirkulärgrafen när en minnessi ra, carry skapas vid övergång mellan 111..11 och 000..00. Lägg märke till att närvaron av en carry inte innebär något problem om talen är tvåkomplementkodade, i detta fall är övergången från negativa till positiva tal helt legitim. Carry uppstår även vid övergång från andra hållet dvs subtraktion, men motsvarar då en lånesi ra och kallas borrow. Carry uppkommer vid övergång mellan 111..11 och 000..00. Borrow vid omvänd övergång. 1.12. Hårdvara Med addition avklarad på papper ska vi se hur den även kan klaras av i hårdvara. Från digitaltekniken är heladderaren bekant och det är heladderaren som är det fundamentala byggblocket i fortsättningen. Inte bara för addition och subtraktion utan även för multiplikation och division. x y cut FA cin s Fulladderaren 6 adderar x, y och en inkommande carry c in och genererar en summa s och en utgående carry, c ut. Med en dylik fulladderare kan man konstruera en godtyckligt bred adderare genom att lägga flera FA bredvid varann och knyta ihop carry-kedjorna. För att lättare hantera de kommande uttrycken inför vi nu en definition av de vektorer av 1:or och 0:or som utgör de enskilda talen: 6 Fulladderaren kallas även heladderare. Eftersom förkortningen för heladderare, HA, även kan misstolkas för halvadderare undviker jag det namnet. 19

1. Addition och tvåkomplement X = {x 3 x 2 x 1 x 0 } Y = {y 3 y 2 y 1 y 0 } S = {s 3 s 2 s 1 s 0 } Med dessa beteckningar kan en fyra-bitars fulladderare tillverkas enligt nedan: Vi får en utgående carry och en inkommande carry från höger som alltid är noll. Om den var 1 skulle vi utföra x + y + 1 och det vill vi ju inte. Men spill då? Adderaren är tämligen värdelös om den inte kan säga till om den räknat fel... Vi har tidigare sett när spill uppstår i cirkulärgrafen, men när är det egentligen? Om vi specialstuderar fulladderaren längs till vänster det är ju i den änden teckenbiten sitter kan vi skapa en liten tabell: Om vi nu kommer ihåg när spill kan inträ a kan vi tillfoga en kolumn för dessa fall också. Resonemanget är vår kunskap om att addition av två positiva tal aldrig kan ge negativt resultat. Om resultatet byter tecken har spill inträ at. Kom ihåg att vi betraktar talen som tvåkomplementkodade, dvs de har en teckenbit. 20

1.12. Hårdvara Som tur är inträ ar spill bara i två fall. Kan vi nu bara konstruera logik för att identifiera vilka insignalkombinationer som ger detta kan vi tillverka oss en spillindikator. Nu kan man naturligtvis sätta sig att tillverka Karnaugh-diagram för att reda ut logiken, men lite inspektion av tabellen räcker faktiskt. Det är inte ofta naturen är på vår sida, men i just det här fallet blir logiken mycket enkel: Det är en enkel sak att komplettera vår adderare med denna indikator och har nu plötsligt en fungerande adderare för tvåkomplementstal, den kan addera positiva såväl som negativa tal. Men vi behöver kunna utföra subtraktion också. Visst vore det bra om samma hårdvara kunde utnyttjas? Vi har ovan sett att addition och subtraktion hänger intimt ihop enligt X Y= X + Y, där Y = Y + 1. Alltså, sammantaget, Allt i högerledet additioner kan vi redan utföra. Men vi behöver också kunna invertera ena talet för subtraktionen. Vid addition ska talet förstås inte inverteras. Således måste vi ordna till en styrbar inverterare, dvs styrbar så att den kan fås att invertera eller inte beroende på en yttre styrsignal. Det visar sig att det är precis vad en xor-grind gör: Så nu kan vi införa en styrsignal add/sub som automatiskt genomför till inverteringen av Y. Om signalen är låg adderas talen och om den är hög inverteras Y. Återstår avslutningsvis att även addera 1 vid subtraktion. Det kan lösas genom att låta en 1:a anslutas till c in vid minst signifikant bit. Och denna 1:a tar vi naturligtvis från add/sub som ju är hög vid subtraktion och låg annars. Exempel Avgör om nedanstående beräkningar ger spill och/eller carry! Vilka har gett korrekt resultat? 00000110 (+6) + 00001000 (+8) = 00001110 (+14) C= V= 01111111 (+127) + 00000001 (+1) = 10000000 ( 128) C= V= 00000100 (+4) + 11111110 ( 2) = 00000010 (+2) C= V= 21

1. Addition och tvåkomplement 00000010 (+2) + 11111100 ( 4) = 11111110 ( 2) C= V= 11111110 ( 2) + 11111100 ( 4) = 11111010 ( 6) C= V= 10000001 ( 127) + 11000010 ( 62) = 01000011 (+67) C= V= 22

2. Multiplikation Vi har fortfarande ingen multiplikator. Man kan helt säkert syntetisera en multiplikation med hjälp av upprepade additioner, men det är en hejdlöst långsam metod. Kan multiplikationen genomföras direkt i hårdvara är det definitivt en tidsvinst. I vissa fall kan det vara enkelt att beräkna resultaten i förväg och lägga dem som en tabell i ett programmerbart minne. Då behöver man inte utföra några beräkningar när man vill ha resultatet vilket ger snabb åtkomst. Minnet adresseras med operanderna som ingångsvärden, vilket kan bli ohanterligt om dessa är långa. Men vid korta tabeller är det ofta smidigt. Ett typexempel på en situation där det kan löna sig att beräkna iförväg är de transcendenta funktionerna sin x, cos x etc 1. I fortsättningen ska dock vi behandla det mer generella fallet. Först måste vi dock klura ut en lämplig algoritm oavsett om vi ska multiplicera i hårdvara eller mjukvara. Problemet är alltså: X = {x 3 x 2 x 1 x 0 } =8 x 3 +4 x 2 +2 x 1 + x 0 Y = {y 3 y 2 y 1 y 0 } =8 x 3 +4 x 2 +2 x 1 + x 0 X, Y 0 Z = {z 7 z 6 z 5 z 4 z 3 z 2 z 1 z 0 } = 128 x 7 +...+ x 0 Z 0 Hur multiplicerar man egentligen? De med gott minne kommer ihåg grundskolan då man gjorde ungefär så här, där vi utgår från att vi har enbart med heltal att göra: 1 I dessa fall räcker det dessutom att tillverka en tabell över en halv kvadrant med sinusfunktionen och sedan kan man med speglingar och trigonometriska identiteter relativt lätt beräkna övriga. 23

2. Multiplikation Såg ni vad som hände? Den ena faktorns minst signifikanta bit angav om summering skulle ske eller inte. Där den var noll hände inget annat än att vi skiftade resultatet ett snäpp åt vänster. Ovanstående beräkning kan utföras i mindre steg om vi adderar så tidigt vi kan: Det är intressant att notera hur vissa tal aldrig kommer att adderas, de bara faller ner till slutresultatet. Redan efter första additionen vet vi hur resultatet kommer att sluta! För tydlighetens skull formaliserar vi detta med symboler i stället för binära tal 2. Med beteckningar enligt problemdefinitionen har vi: 2 De binära talen 1 och 0 är ju i och för sig symboler för nåt också... 24

Vi kan redan nu få en uppfattning om vilken hårdvara som behövs. Tydligen behövs AND-grindar och 3 nivåer med fulladderare i huvudsak. Med våra fyra bitar kan resultatet se ut så här: y1 y2 y3 y4 x4 0 & & & & y1 y2 y3 y4 x3 & & & & FA FA FA FA c_in=0 y1 y2 y3 y4 x2 & & & & FA FA FA FA c_in=0 y1 y2 y3 y4 x1 & & & & FA FA FA FA c_in=0 z1 z2 z3 z4 z5 z6 z7 z8 Totalt behövs här 12 heladderare och 16 AND-grindar. Heltalen rinner igenom konstruktionen med början vid toppen och när signalerna nått nedre delen av är resultatet klart. Det är en mycket snabb multiplikator: en heladderare fördröjer signalen kanske 10 ns och en AND-grind tar ännu kortare tid 3. Med tre nivår heladderare kan vi alltså multiplicera med en hastighet av cirka 1/(10 + 10 + 10 + ca10) nanosekunder 25 miljoner multiplikationer per sekund! En högst respektabel hastighet och antagligen mycket snabbare än vi, dvs processorn, hinner förse den med uppgifter. Men det gick åt en del hårdvara för att komma hit. Hur mycket hårdvara skulle det gå åt om man utökade multiplikatorn till 8 eller kanske 16 bitar? Vi kan se att arean av ritningen ökar ungefär med kvadraten på antalet bitar i talen. En 16-bitars multiplikator skulle med detta resonemang bli fyra gånger högre och fyra gånger bredare, dvs 16 gånger 3 Tiderna är tagna från motsvarande TTL-logik. Grindfördröjningen i modernt kisel är bråkdelar av nanosekunder. 25

2. Multiplikation större, fastän bitbredden bara ökade fyra gånger! En sådan tingest vill vi antagligen inte ens försöka tillverka i varje fall inte med lösa integrerade kretsar den blir omfattande. Slutsats är alltså: Det är snabbt, men rätt komplicerat och dyrt. Däremot är det en fullt möjlig väg att gå, metoden fungerar. 2.1. Multiplikation snitsigare metod Varför blev det såhär? Tydligen är hårdvaru- skiftningen orsaken till den kvadratiska ökningen. Kan man eliminera det skiftet är mycket av problemen lösta, det skulle bli en lineär ökning av hårdvaran i stället för en kvadratisk. I stället för att skifta vänster och addera borde man kunna skifta resultatet åt höger och på så sätt återanvända hårdvaran? I och med att vi vill multiplicera två fyrabitars tal kan vi vara säkra på att svaret högst kan ha åtta bitar så vi ansätter ett 8bits startvärde. Och istället för att skifta längre och längre åt vänster skiftar vi varje partialprodukt åt höger: Vi döper partialprodukterna p 0, p 1, p 2, p 3 och p 4 där p 4 det önskade svaret. Matematisk beskrivning av metoden Tydligen fungerar denna metod också. Vi har kommit fram till en multiplikator med modesta krav på hårdvaran och som dessutom kan utökas till att hantera fler bitar utan att hårdvaran och komplexiteten växer oss ur händerna. Metoden verkar så lovande att vi måste beskriva den matematiskt. Våra förutsättningar är: 26

2.1. Multiplikation snitsigare metod heltalet X =< x 3 x 2 x 1 x 0 >=8 x 3 +4 x 2 +2 x 1 + x 0 och heltalet Y=< y 3 y 2 y 1 y 0 >=8 y 3 +4 y 2 +2 y 1 + y 0, samt p 0 = 0, som för tydlighetens skull skrivs 0000 0000 4 Genom inspektion av den tidigare uträkningen kan vi formulera de fem partialprodukterna som Alltså slutligen: p i+1 =(p i + Y x i 2 4 )2 1 för i =0, 1, 2, 3. där P 4 är den önskade produkten. Det här kan man göra hårdvara för: 4 Åtta bitars partialresultat och vi vet varför. 27

2. Multiplikation y1 y2 y3 y4 x4,x3,x2,x1 & & & & FA FA FA FA c_in=0 D D D D D D D D Reset, nollställning Genom att ha ett partialproduktregister vet vi automatiskt var svaret kommer att hamna. Vi kommer att behöva nollställa det innan varje multiplikation, men det är enkelt. Ett krux kanske är att ena faktorn måste matas in bit för bit i den övre delen av schemat (hur gör vi det?). För att utföra beräkningen måste systemet ovan klockas fyra gånger. Ett sätt att mata fram X är att från början lägga X i ett register och sedan skifta detta register bit för bit... Men vi har ju redan ett register, och vi laddar det med nollor nollor som skiftas ut och aldrig blir del av resultatet. Så varför inte kombinera dessa faktum? Det vill säga: ladda in X ilägre halvan av partialregistret (i rätt ordning) och anslut den utskiftade biten till AND-grindarna högst upp. Det är klart vi gör så. Vi återanvänder isåfall dessutom hårdvaran på ett smidigt sätt. 2.2. Men tvåkomplement då? Nu har vi i varje fall, efter en stunds resonemang och prov, en algoritm som verkar fungera. Åtminstone för positiva heltal. Hur var det nu med tvåkomplement? Det vill säga hur ska vi kunna multiplicera tal med tecken? Det går naturligtvis utmärkt att göra båda talen positiva och sedan multiplicera ihop dem. Följt av att möjligen ändra tecken på resultatet. Men vi letar i första hand efter att på något sätt använda multiplikationshårdvaran ovan och det är förstås bra om vi inte behöver manipulera talen innan. Och det visar sig att vi får hjälp av att ha beskrivit den tidigare algoritmen matematiskt. Vi ser att 28

2.2. Men tvåkomplement då? X =< x 3 x 2 x 1 x 0 >= 8 x 3 +4 x 2 +2 x 1 + x 0 vilket betyder att om vi adderar Y x 3 vid sista additionen i algoritmen får talet rätt tecken, eftersom x 3 är teckenbiten i tvåkomplementttal. Själva multiplikationsalgoritmen är i stort sett oförändrad. 2.2.1. Utökat talområde Allt är dock inte frid och fröjd än. Vi måste också hantera att addition med tvåkomplementstal kan ge spill och det kan vi förstås inte tillåta. Om vi studerar den tidigare algoritmen ser vi att spillet 5 kan uppstå vid additionen med p i i varje steg. Vi kan införa logik som letar efter detta och kompenserar på något sätt, men faktum är att problemet är hävbart redan nu: Vi högerskiftar alltid efter en addition 6! Med andra ord kommer ett eventuellt spill alltid automatiskt infogas i det tillåtna talområdet. Men det krävs att vi sparar den carry som skapades av additionen. Det kan vi göra om vi har ett utökat talområde. Vi tittar först på vad utökat talområde egentligen är med ett exempel. Exempel Utökat talområde på positiva tvåkomplementstal... och på negativa tal 2.2.2. Spillkompensering av (a + b)/2 Det finns två metoder att korrigera resultatet om spill vid operationen (a+b)/2 inträ at. Den metod som först beskrivs är metoden med utökat talområde och den sista är metoden utan utökat talområde. I båda beskrivningarna nedan antas att talen är fyrabitars tvåkomplementskodade tal. 5 Vi påminner oss om att spill uppstår då addition av två tal med lika tecken ger en summa med omvänt tecken. 6 Detta skrivs i algoritmen som multiplikation med 2 1, dvs ett aritmetiskt högerskift, eftersom vi handskas med tvåkomplementstal. 29

2. Multiplikation Metod 1 Med utökat talområde Med utökat talområde ser man till att, i varje fall just vid additionen, ha tillgång till en ytterligare bit till vänster om teckenbiten. Det är denna bit som måste sparas för att man ska kunna genomföra det aritmetiska högerskiftet på ett korrekt sätt. Om vi vid additionen har tillgång till ytterligare en bit, en mestare signifikant bit, kommer additionen inte att kunna ge spill i detta nya utökade talområde. Och med tillgång till den biten kan det aritmetiska högerskiftet utföras utan att resultatet blir fel teckenbiten kommer att bevaras och spill kan undvikas Exempel Beräkna (3 + 5)/2 och( 4 6)/2! Metod 2 Utan utökat talområde Om vi inte kan använda metoden med utökat talområde har vi fortfarande en möjlighet att korrigera (a + b)/2 så att resultatet blir korrekt. Vi har hittills inte använt spillflaggan, V, där V = c i c o enligt förra föreläsningen. Om vi ser på spillflaggan att spill inträ at kan vi förstås också kompensera för det. Spillkompensationen är i detta fall enkel: Om summan av två lika tal bytt tecken måste vi kompensera genom att byta tillbaka teckenbiten! Observera att det inte handlar om att byta tecken på talet, bara att flippa teckenbiten. Exempel Beräkna (3 + 5)/2 och( 4 6)/2! 30

2.3. Robertsons algoritm I en del böcker står det att man nu utför addition med 1 i teckenpositionen. Detta är iochför sig sant, men eftersom vi nu inte har utökat talområde kan vi strunta i den genererade carryn och få samma e ekt genom att helt enkelt invertera teckenbiten! Vad hårdvaran anbelangar är den enklare om vi väljer att använda en inverterare än att använda ytterligare en adderare. Och eftersom det är rätt tecken på (a + b)/2 vi söker, korrigerar vi efter det aritmetiska skiftet som vanligt. 2.3. Robertsons algoritm Om vi använder den samlade kunskapen ovan, dvs Tvåkomplementstal divideras med två genom aritmetiskt högerskift, spill kan kompenseras men någon av metoderna, samt en avslutande addition med Y x 0 sätter tecknet på tvåkomplementstal kan vi sammanställa detta till Robertsons algoritm. Vi formaliserar även denna algoritm innan ett exempel kommer: Med förutsättningen att båda talen X och Y är tvåkomplementkodade: X = {x 3 x 2 x 1 x 0 } = Y = {y 3 y 2 y 1 y 0 } = 8 x 3 +4 x 2 +2 x 1 + x 0,där x 3 är teckenbit 8 y 3 +4 y 2 +2 y 1 + y 0,där y 3 är teckenbit När vi multiplicerar två fyrabitars tal som vardera har en teckenbit kommer resultatet bara ha en teckenbit z 6, så att Z = {z 6 z 5 z 4 z 3 z 2 z 1 z 0 } 31

2. Multiplikation och vi kan skriva algoritmen som Resultatet av multiplikationen är den sist erhållna partialprodukten P 4 och beviset kan göras med insättning som förut. Exempel Multiplicera Y = 7 och X = 5 med Robertsons algoritm! Slutligen kan vi konstatera att vi kan använda den tidigare utvecklade hårdvaran även för Robertsons algoritm, med undantag för det sista steget i algoritmen, som är en addition med omvänt tecken. Vi behöver en styrbar subtraherare/adderare som tydligen ska addera i allmänhet men inte sista gången. Det löser vi enkelt genom att låta sekvensen 0, 0, 0, 0, 1 styra ett gäng inverterare för ena operanden och, för att få det sista steget att verkligen addera med omvänt tecken, låta samma sekvens samtidigt gå in på fulladderarnas minst signifikanta bit enligt figuren nedan: 32

2.3. Robertsons algoritm y0 y1 y2 y3 & & & & & =1 =1 =1 =1 =1 SUB 0,0,0,1 FA FA FA FA FA D D D D D D D D Reset 0 0 0 0 x0 x1 x2 x3 Vi har nu behandlat den binära aritmetik som kan ingå i en enkel processor och sett i detalj hur den fungerar. För att vara ännu mer kompletta skulle vi kunnat titta även på division, men de aritmetiska funktionerna är i allmänhet bara addition och subtraktion åtminstone i billigare processorer. I dyrare processorer kan även multiplikation och kanske till och med division förekomma. Division används förhållandevis sällan i verkligheten, mycket mer sällan än multiplikation, 33

2. Multiplikation 34

A. Robertsons algoritm Det finns åtskilliga algoritmer för binär multiplikation. På föreläsningarna utvecklades en algoritm för multiplikation av tvåkomplementkodade tal som hade den fördelen att mycket av den hårdvara som den aritmetisk-logiska enheten består av enkelt kan återanvändas. Algoritmen framtogs först av Robertson och är namngiven efter honom som Robertsons algoritm. Detta extramaterial innehåller genomarbetade exempel på Robertsons algoritm. Men först en definition: Definition. Med talen X = x 3 x 2 x 1 x 0 och Y = y 3 y 2 y 1 y 0 kodade som tvåkomplementstal kan produkten p = x y beräknas enligt Robertsons algoritm: p 0 = 0 (A.1) p i+1 =(p i + y x i 2 3 ) 2 1 (A.2) i =0, 1, 2 (A.3) p = p 3 y x 3 2 3 (A.4) Vid rad (0.2) i algoritmen adderas två tvåkomplementskodade tal och följaktligen kan talområdet överskridas spill inträ ar. Vi vet sedan tidigare att spill uppstår då addition av tvåkomplementkodade tal med lika tecken resulterar i en summa med annat tecken. 1 För att algoritmen skall kunna implementeras måste vi se till att ett eventuellt spill tas om hand innan nästa steg tas. Det finns två metoder för detta och båda baserar sig på det faktum att algoritmen omedelbart dividerar med två... ) 2 1 ovan efter den potentiellt farliga additionen. Vi vill således spillkompensera uttryck av typen (a+b)/2 och noterar samtidigt att division med två motsvarar aritmetiskt högerskift för tal i den använda representationen. De två metoderna är då: Spillkompensering genom utökat talområde, och Spillkompensering genom användning av spillflaggan. 1 Detta enkla faktum är tydligen lätt att bortse ifrån. Det är dock grunden för hanteringen av multiplikationsalgoritmen i det följande. Så se till att förstå vad detta innebär! 35

A. Robertsons algoritm Metod 1 Genom utökat talområde Med utökat talområde ser vi till att, i varje fall just vid additionen, ha tillgång till en ytterligare bit till vänster om teckenbiten. Det är denna bit som måste sparas för att man ska kunna genomföra det efterföljande aritmetiska högerskiftet på ett korrekt sätt. Om vi vid additionen har tillgång till ytterligare en bit, en mestare signifikant bit, kommer additionen inte att kunna ge spill i detta nya utökade talområde. Och med tillgång till den biten kan det aritmetiska högerskiftet utföras utan att resultatet blir fel teckenbiten kommer att bevaras och spill kan undvikas. Exempel Beräkna (3 + 5)/2 respektive ( 4 6)/2. Det utökade talområdet utförs som en extra bitposition till vänster om talet. Aritmetiskt skift markeras med! och den utökade teckenpositionen med. Negativa tal måste teckenutvidgas innan additionen utförs. Den understrukna biten kan kastas direkt och behöver inte tas fram. 0 0011 (+3) + 0 0101 (+5) 0 1000 ( 8)! 0100 (+4) 1 1100 ( 4) + 1 1010 ( 6) 11 0110??! 1011 ( 5) Metod 2 genom användning av spillflaggan Om vi inte kan använda metoden med utökat talområde har vi fortfarande en möjlighet att korrigera (a + b)/2 så att resultatet blir korrekt. Spillflaggan innehåller information om huruvida talområdet överskridits 2 och om vi ser på spillflaggan att spill inträ at kan vi förstås också kompensera för det. Spillkompensationen är i detta fall enkel: Om summan av två lika tal bytt teckenbit måste vi kompensera genom att byta tillbaka teckenbiten! Det innebär här att helt enkelt byta värde på teckenbiten, från en etta till en nolla eller tvärtom. Det innebär inte att byta tecken på hela talet genom att invertera och addera ett. 2 Vi vet sedan tidigare att spillflaggan, V, formas av uttrycket V = c i c o,där c i och c o är carry-in respektive carry-out runt mest signifikant bit, vilket motsvarar teckenbiten i vårt fall. 36

Exempel Beräkna (3 + 5)/2 respektive ( 4 6)/2. Spillflaggan V :s värde noteras efter additionen. Aritmetiskt skift markeras som förut med!. Metoden med utökat teckenområde visas till vänster och till höger används spillflaggeinformationen. 0011 (+3) + 0101 (+5) V=1 1000 ( 8)! 1100 ( 4) spillkorr 0100 (+4) OK! 1100 ( 4) + 1010 ( 6) V=1 0110 (+6)! 0011 (+3) spillkorr 1011 ( 5) OK! Beväpnad med denna information kan vi nu angripa Robertsons algoritm. Innan vi börjar ansätter vi för tydlighetens skull rätt antal bitar i den första partialprodukten, p 0.Dåvi i exemplet antagit fyrabitars tal kommer resultatet att högst kunna ha sju bitar, varav en teckenbit, och p 0 ansättes alltså till 0000000, med teckenbiten längst till vänster. Exempel Mutliplicera de två talen Y = y 3 y 2 y 1 y 0 = 6 och X = x 3 x 2 x 1 x 0 = 5 med Robertsons algoritm. Då åtminstone ett av talen har negativt tecken och Robertsons algoritm skall användas förutsätts tvåkomplementrepresentation gälla. Alltså Y = 0110 och X = 0101 + 1 = 1011. Vi behöver även Y = 0110 + 1 = 1010. Till vänster visas metoden med utökat talområde och till höger används spillflaggan. Teckenbiten markeras i båda fallen med # och den utökade teckenpositionen med. Notera att den utökade teckenpositionen vid det aritmetiska skiftet skall användas som mest signifikant bit! 37

A. Robertsons algoritm # 0000000 p 0 + 0110 x 0 Y 0 0110000! 0011000 p 1 + 0110 x 1 Y 0 1001000! 0100100 p 2 + 0000 x 2 Y 0 0100100! 0010010 p 3 + 1010 x 3 Y 1100010 p 4 = X Y= 30 # 0000000 p 0 + 0110 x 0 Y V =0 0110000! 0011000 p 1 + 0110 x 1 Y V =1 1001000! 1100100 spillkorr 0100100 p 2 + 0000 x 2 Y V =0 0100100! 0010010 p 3 + 1010 x 3 Y 1100010 p 4 = X Y= 30 Ibland kan det bli enklare beräkningar om man låter X och Y byta plats. Slutresultatet torde ändå bli detsamma. 38