05.08.2013 Views

Hur utförs aritmetiska operationer i processorn? ? ?

Hur utförs aritmetiska operationer i processorn? ? ?

Hur utförs aritmetiska operationer i processorn? ? ?

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Datorteknik 2012 föreläsningsfilmer<br />

<strong>Hur</strong> <strong>utförs</strong> <strong>aritmetiska</strong> <strong>operationer</strong><br />

i <strong>processorn</strong>?<br />

De <strong>aritmetiska</strong> <strong>operationer</strong>na byggs in i <strong>processorn</strong> m.h.a enkla logiska<br />

kretsar (operanderna är ord stora) → de implementeras m.h.a. enkla <strong>operationer</strong><br />

som skift, and, or, ...<br />

Obs! Ett värde representeras med ett fast<br />

antal bitar → Aritmetiskt fel (overflow,spill)<br />

kan uppstå<br />

=<br />

Resultatet kan ej representeras i antalet tillbudsstående<br />

bitar.<br />

Denna situation bör kunna igenkännas av<br />

<strong>processorn</strong><br />

c1 =0; additions algoritm<br />

for (i=0; i


Datorteknik 2012 föreläsningsfilmer<br />

Addition och subtraktion<br />

Addition: Additionen S = A+B uttryckt i algoritmform (x i betecknar biten i<br />

position i i X ):<br />

c 1 =0; /* carry in */<br />

for (i=0; i


Datorteknik 2012 föreläsningsfilmer<br />

Multilpkation och division<br />

Utnyttjande av skift operationen<br />

Ett tvåkomplement tal (och ett naturligt tal) multipliceras med 2 m genom<br />

att skifta alla bitar m positioner åt vänster och flytta in nollor i de m minst<br />

signifikanta positionerna.<br />

Aritmetiskt fel sker om en signifikant bit flyttas ut ur ordet eller teckenbiten<br />

ändras (tvåkomplement).<br />

Ett tal i tvåkomplement (och naturligtt tal) divideras med 2 m genom att<br />

skifta alla bitar m positioner åt höger och flytta in teckenbiten (0) i de m<br />

mest signifikanta positionerna.<br />

n=9: m=1<br />

0 0 1 0 0 1 0 1 1<br />

0 0 1 0 0 1 0 1 1 0<br />

n=9: m=1<br />

1 0 0 0 1 0 0 1 0<br />

1 1 0 0 0 1 0 0 1<br />

Mera invecklade<br />

<strong>operationer</strong><br />

bit dk blir bit dk+1 , k=1,..,n-1<br />

dvs. vikten blir 2 k . 2=2 k+1<br />

bit d0 = 0<br />

rest<br />

Obs! för ett negativt udda tal blir det fel vid division<br />

n=9:<br />

-3=<br />

1 1 1 1 1 1 1 0 1<br />

-4= 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0<br />

0<br />

bit dk blir bit dk-1 , k=0,1,...,n-2<br />

dvs. vikten blir 2 k . 2 -1 =2 k-1<br />

bit dn-1 = 0 (naturliga tal)<br />

bit dn-1 värde ändras ej (heltal)<br />

Spill ?<br />

1 1 1 1 1 1 1 1 0 =-2 ✓borde vara -1<br />

=-2<br />

<strong>Hur</strong> kan felet<br />

rättas ?<br />

7 (3/7)


Datorteknik 2012 föreläsningsfilmer<br />

Multilpkation<br />

Produkten av två naturliga tal fås genom att multiplicera varje siffra i<br />

multiplikatorn (B) med multiplikanden (A) och siffrans vikt, och addera<br />

ihop alla dessa delprodukter:<br />

För binära tal<br />

A⋅B = A⋅(dn-1 ⋅b n-1 + dn-2 ⋅b n-2 + ... + d1 ⋅b 1 + d0 ⋅b 0 )<br />

A⋅B = A⋅dn-1 ⋅b n-1 + A⋅dn-2 ⋅b n-2 + ... + A⋅d1 ⋅b 1 + A⋅d0 ⋅b 0<br />

n=4, r=10:<br />

0023⋅0025 = 0023⋅(0 ⋅10 3 + 0⋅10 2 + 2 ⋅10 1 + 5⋅10 0 ) =<br />

23⋅2⋅10 + 23 ⋅5 ⋅1 =<br />

46 ⋅10 + 115 ⋅1 =<br />

460 + 115 = 575<br />

• är multiplikationen med siffran (0 eller 1) trivial<br />

• multiplikationen med vikten kan göras m.h.a. vänster<br />

skift<br />

Multiplikation av tvåkomplementtal sker på samma sätt som multiplikation<br />

av två naturliga tal utom att den mest signifikanta positionens<br />

delprodukt subtraheras istället för att adderas (enl. def. tvåkomp.):<br />

A⋅B = A⋅(-dn-1 ⋅2 n-1 + dn-2 ⋅2 n-2 + ... + d1 ⋅2 1 + d0 ⋅2 0 )<br />

A⋅B = -A⋅dn-1 ⋅2n-1 + A⋅dn-2 ⋅2n-2 + ... + A⋅d1 ⋅21 + A⋅d0 ⋅20 n=4, r=2:<br />

1010 . 1001 = -1010 . 1⋅2 3 +1010 ⋅ 0 ⋅2 2 + 1010⋅0⋅2 1 + 1010⋅1⋅2 0 =<br />

produkten repr.<br />

med 2n bitar:<br />

-11010000 + 0 + 0 +11111010 =<br />

- 00110000 + 0 + 0 +11111010 =<br />

00101010<br />

-6⋅(-7) = 42<br />

7 (4/7)<br />

<strong>Hur</strong> multipliceras<br />

tvåkomplementtal<br />

?


Datorteknik 2012 föreläsningsfilmer<br />

kom ihåg:<br />

skall ske i<br />

hårdvara<br />

Aritmetiskt fel:<br />

<strong>Hur</strong> implementeras<br />

multiplikation i<br />

<strong>processorn</strong> ?<br />

För att undvika aritmetiskt fel beräknas produkten i två ord.<br />

Om ett tal med n siffror multipliceras med ett tal<br />

med m siffror betår produkten av högst n+m siffror<br />

(b n -1) . (b m -1) = b n+m -b n -b m +1 < b n+m -1<br />

→ Produkten av två n-bitars tal kommer att uppta<br />

högst 2n bitpositioner.<br />

Multiplikationen P = A . B i tvåkomplement uttryckt i algoritmform (d i är<br />

biten i position i i B):<br />

P=0;<br />

for (i=0; i


Datorteknik 2012 föreläsningsfilmer<br />

Division<br />

Division av positiva tal sker genom att för varje sifferposition i kvoten<br />

subtrahera största möjliga multipel av nämnaren gånger vikten utan att<br />

differensen blir negativ.<br />

rest = A - B ⋅ kvot<br />

rest = A -B⋅(dn-1 ⋅b n-1 + dn-2 ⋅b n-2 + ... + d1 ⋅b 1 + d0 ⋅b 0 )<br />

rest = A - B⋅dn-1 ⋅b n-1 - B⋅dn-2 ⋅b n-2 - ... - B⋅d1 ⋅b 1 - B⋅d0 ⋅b 0<br />

n=4, r=10:<br />

851 - 0 ⋅ 9 ⋅10 3 - 0 ⋅ 9 ⋅10 2 - 9 ⋅ 9 ⋅10 1 - 4 ⋅ 9 ⋅10 0 =<br />

851 - 9 ⋅ 90 - 4 ⋅ 9 = 5<br />

kvot = 10 3 ⋅0 +10 2 ⋅0 +10 1 ⋅9 +10 0 ⋅4 = 94<br />

För binära tal<br />

• är multipeln 0 eller 1 - trivial att beräkna<br />

• multiplikationen med vikten kan göras<br />

med vänster skift<br />

Division av tvåkomplementtal:<br />

ex. 851 / 9 = 94<br />

rest = 5<br />

• Konvertera ett negativa tal till motsvarande positiva tal<br />

• Dividera de positiva talen<br />

• Konvertera resultatet till motvarande negativa tal om täljaren<br />

och nämnaren har olika förtecken<br />

→ Division är långsammare än multiplikation.<br />

rest = A - B ⋅ kvot<br />

rest = A -B⋅(dn-1 ⋅bn-1 + dn-2 ⋅bn-2 + ... + d1 ⋅b1 + d0 ⋅b0 )<br />

rest = A - B⋅dn-1 ⋅bn-1 - B⋅dn-2 ⋅bn-2 - ... - B⋅d1 ⋅b1 - B⋅d0 ⋅b0 n=4, r=2:<br />

1101 - 0⋅0011⋅2 3 - 1⋅0011⋅2 2 - 0⋅0011⋅2 1 - 0⋅0011⋅2 0 =<br />

7 (6/7)<br />

<strong>Hur</strong> dividerars<br />

tvåkomplementtal<br />

?<br />

1101 - 0⋅0011000 - 1⋅001100 - 0⋅00110 - 0⋅0011 =<br />

ex. 1101 / 0011 = 0100<br />

1101 - 1100 = 0001 = 110 rest = 0001<br />

kvot = 2 3 ⋅0 +2 2 ⋅1 +2 1 ⋅0 +2 0 ⋅0 = 4 10


Datorteknik 2012 föreläsningsfilmer<br />

Aritmetiskt fel sker ej ty kvotens absoluta värde är ju alltid mindre än<br />

eller lika med dividendens.<br />

Divisions algoritm :<br />

<strong>Hur</strong> implementeras<br />

division<br />

i <strong>processorn</strong> ?<br />

I maskinvara <strong>utförs</strong> subtraktionen R-B

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!