Аритметичке и логичке операције

Post on 04-Jan-2016

31 views 1 download

description

Аритметичке и логичке операције. Означени и неозначени бројеви Сабирање и одузимање Логичке операције Конструкција ALU Множење. Означени и неозначени бројеви. Бројеви се представљају бинарно, користећи двојични комплемент. Код MIPS-a бројеви су по правилу 32-битни и означени. maxint. - PowerPoint PPT Presentation

Transcript of Аритметичке и логичке операције

Аритметичке и Аритметичке и логичке операцијелогичке операције

• Означени и неозначени бројевиОзначени и неозначени бројеви• Сабирање и одузимањеСабирање и одузимање• Логичке операцијеЛогичке операције• Конструкција Конструкција ALUALU• МножењеМножење

Означени и неозначени Означени и неозначени бројевибројеви

• Бројеви се представљају бинарно, користећи двојични комплемент.

• Код MIPS-a бројеви су по правилу 32-битни и означени.

Означени и неозначени Означени и неозначени бројевибројеви

• 32-битни означени бројеви:

0000 0000 0000 0000 0000 0000 0000 00002 = 010

0000 0000 0000 0000 0000 0000 0000 00012 = + 110

0000 0000 0000 0000 0000 0000 0000 00102 = + 210

...0111 1111 1111 1111 1111 1111 1111 11102 = + 2,147,483,64610

0111 1111 1111 1111 1111 1111 1111 11112 = + 2,147,483,64710

1000 0000 0000 0000 0000 0000 0000 00002 = – 2,147,483,64810

1000 0000 0000 0000 0000 0000 0000 00012 = – 2,147,483,64710

1000 0000 0000 0000 0000 0000 0000 00102 = – 2,147,483,64610

...1111 1111 1111 1111 1111 1111 1111 11012 = – 310

1111 1111 1111 1111 1111 1111 1111 11102 = – 210

1111 1111 1111 1111 1111 1111 1111 11112 = – 110

maxint

minint

Означени и неозначени Означени и неозначени бројевибројеви

• Садржај регистра или локације је низ битова који се може на различите начине интерперетирати.

• Бројеви могу да буду и неозначени, када сви битови представљају вредност броја.

Означени и неозначени Означени и неозначени бројевибројеви

• Код поређења вредности MIPS нуди инструкције које раде са означеним бројевима (slt, slti) али и са неозначеним (sltu, sltiu).

Означени и неозначени Означени и неозначени бројевибројеви

ПримерНека је у регистру $s0 бинарни број1111 1111 1111 1111 1111 1111 1111 11112

а у регистру $s1 бинарни број0000 0000 0000 0000 0000 0000 0000 00012.

Које ће вредности бити у регистрима $t0 и $t1 после извршења следећих инструкција?slt $t0,$s0,$s1 #oznaceno poredjenjesltu$t1,$s0,$s1 #neoznaceno poredjenje

Означени и неозначени Означени и неозначени бројевибројеви

ОдговорВредност у регистру $s0 је -1, ако се ради о (означеном) целом броју, а 4,294,967,295, ако се ради о неозначеном целом броју. Вредност у регистру $s1 је у оба случаја 1.

Према томе, регистар $t0 ће садржати 1 (-1<1) a $t1 ће садржати 0 (4,294,967,295 > 1).

Означени и неозначени Означени и неозначени бројевибројеви

• У општем случају операнди не морају бити 32-битни.

• Поставља се питање како прелазимо са презентације неке вредности са n битова на презентацију те вредности са више од n битова?

Означени и неозначени Означени и неозначени бројевибројеви

• Ова операција назива се знаковно проширење и састоји се у копирању бита знака датог броја у све више битове.

Означени и неозначени Означени и неозначени бројевибројеви

ПримерКонвертовати 16-битну бинар-ну вредност броја 2 у одгова-рајућу 32-битну вредност.

Означени и неозначени Означени и неозначени бројевибројеви

Одговор16-битна вредност броја 2 је

0000 0000 0000 00102 = 210

32-битну вредност ћемо добити копирањем најстаријег бита броја (0) у леву половину чиме се добија

0000 0000 0000 0000 0000 0000 0000 00102 = 210

Означени и неозначени Означени и неозначени бројевибројеви

Исти поступак је и за негативне бројеве. Двојични комплемент 16-битне вредности броја 2 (или -2) добија се као

0000 0000 0000 00102

1111 1111 1111 11012

+ 12

1111 1111 1111 11102

32-битна вредност је1111 1111 1111 1111 1111 1111 1111 11102 = -210

Сабирање и одузимањеСабирање и одузимање• Сабирање је једна од основних

аритметичких операција коју подржавају сви рачунари.

• Одузимање се не врши директно већ се врши сабирање са двојичним комплементом умањиоца.

Сабирање и одузимањеСабирање и одузимање• Када резултат не може да се

представи датим бројем битова (32 у овом случају) долази до прекорачења.

Сабирање и одузимањеСабирање и одузимање• Прекорачење се не може јавити

када сабирамо операнде различитог знака.

• Код одузимања се прекорачење не може јавити када одузимамо операнде истог знака, јер се то своди на сабирање операнда различитог знака.

Сабирање и одузимањеСабирање и одузимање• Како детектовати прекорачење у

случајевима када је могућа његова појава?

Сабирање и одузимањеСабирање и одузимање• Прекорачење се јавља када се

пренос (позајмица) са бита десно од бита знака и пренос са бита знака не поклапају.

• Да ли операције са неозначеним бројевима могу да изазову прекорачење?

Сабирање и одузимањеСабирање и одузимање• На пројектанту машине је да

одлучи када ће се прекорачење игнорисати а када ће изазвати изузетак.

• MIPS препознаје два случаја:– Инструкције add, addi и sub могу да

изазову прекорачење.– Код инструкција addu, addiu и subu

прекорачење се игнорише.

Логичке операцијеЛогичке операције• Први рачунари су обраду вршили

над речима.• Убрзо је постало јасно да је добро

имати могућност обраде поља битова или чак појединих битова унутар речи.

• Рад са знаковима унутар речи где је сваки од знакова 8-битан је један од примера за ово.

Логичке операцијеЛогичке операције• Једна од група оваквих операција

су операције померања.• Нека, на пример регистар $s0

садржи0000 0000 0000 0000 0000 0000 0000 1101

После померања за 8 места улево његов садржај ће бити

0000 0000 0000 0000 0000 1101 0000 0000

Логичке операцијеЛогичке операције• Дуална операција операцији

померања улево је операција померања удесно.

• MIPS инструкције које обављају ове операције су sll (shift left logical) и srl (shift right logical).

sll $t2,$s0,8 # $t2 = $s8 << 8

Логичке операцијеЛогичке операције• Сада можемо да схватимо значење

поља shamt у R-формату.

0 0 16 10 8 0

op rs rt rd shamt funct

Логичке операцијеЛогичке операције• Такође су корисне операције И и

ИЛИ (AND и OR) које се могу употребити за издвајање неког поља битова.

• Ове операције (and, andi, or, ori) обављају се над одговарајућим битовима изворних операнада, а резултат смешта у одговарајући бит одредишног операнда.

Логичке операцијеЛогичке операције• Ако је још увек у $t2

0000 0000 0000 0000 0000 1101 0000 0000

а у $t10000 0000 0000 0000 0011 1100 0000 0000

тада после извршења инструкцијеand $t0,$t1,$t2#$t0 = $t1 & $t2

у регистру $t0 имамо садржај0000 0000 0000 0000 0000 1100 0000 0000

Логичке операцијеЛогичке операције• Овакви шаблони битова називају

се маске и помоћу њих неки битови могу да се обришу а неки да остану са оригиналном вредношћу.

• Слично томе, ИЛИ операцију можемо да користимо да поставимо неке од битова.

Логичке операцијеЛогичке операције• Ако су садржаји регистара $t1 и

$t2 непромењени, онда операцијаor $t0,$t1,$t2#$t0 = $t1 | $t2

даје следећи садржај регистра $t0:

0000 0000 0000 0000 0011 1101 0000 0000

Логичке операцијеЛогичке операцијеПример

Нека је дат следећи код на језику Cint data;struct

{unsigned int ready: 1;unsigned int enable: 1;unsigned int receivedByte: 8;} receiver;

…data = receiver.receivedByte;receiver.ready = 0;receiver.enable = 1;

Написати одговарајући MIPS код ако су променљиве data и receiver додељене регистрима $s0 и $s1.

Логичке операцијеЛогичке операције

ОдговорЈезик C десно поравнава поља па је изглед речи

ready

31 … 10 9 2 1 0

enablereceivedByte

Логичке операцијеЛогичке операцијеПрви корак је да изолујемо 8-битно поље receivedByte померајући га на лево а затим на десно

sll $s0,$s1,22srl $s0,$s0,24

Логичке операцијеЛогичке операцијеСледеће две инструкције бришу бит најмање тежине, тј. постављају следећи бит

andi $s1,$s1,0xfffeori $s1,$s1,0x0002

Логичке операцијеЛогичке операције• Треба водити рачуна о томе да addi, addiu и slti, sltiu врше знаковно проширење својих непосредних операнада!

• Како andi и ori нормално раде са неозначеним операндима, њихови непосредни операнди се тако и третирају, тј. допуњују се нулама.

Конструкција Конструкција ALUALU• ALU извршава све аритметичке и

логичке операције у рачунару.• Због једноставности ћемо

покушати да направимо 1-битну ALU.

• Пошто су речи код MIPS-a 32-битне, повезаћемо 32 такве ALU.

Конструкција Конструкција ALUALU• Користићемо већ познате “градивне

блокове”.

S

CA

B

0

1

Мултиплексер

Конструкција Конструкција ALUALU• Логичке операције су најлакше за

имплементацију, јер већ имамо логичка кола која их реализују.

• Једнобитна ALU за операције AND и OR приказна је на слици.

операција

резултат0

1

а

b

Конструкција Конструкција ALUALU• Следећа фунцкија ALU је сабирање.

Sum

CarryIn

CarryOut

a

b

cout = ab + acin + bcin

sum = a xor b xor cin

Конструкција Конструкција ALUALU• 1-битна ALU која обавља функције AND, OR и

сабирање.

b

0

2

Result

Operation

a

1

CarryIn

CarryOut

Конструкција Конструкција ALUALU• 32-битна ALU која

обавља функције AND, OR и сабирање.

• Сабирач који се добија директним повезивањем преноса 1-битних сабирача назива се ripple carry adder.

Result31a31

b31

Result0

CarryIn

a0

b0

Result1a1

b1

Result2a2

b2

Operation

ALU0

CarryIn

CarryOut

ALU1

CarryIn

CarryOut

ALU2

CarryIn

CarryOut

ALU31

CarryIn

Конструкција Конструкција ALUALU• Одузимање је сабирање са двојичним

комплементом умањиоца!a-b = a +b +1

0

2

Result

Operation

a

1

CarryIn

CarryOut

0

1

Binvert

b

Конструкција Конструкција ALUALU• Још увек нам треба подршка поређењу

(инструкцији slt).• slt има за резултат 1 ако је rs < rt, а

иначе резултат је 0.a – b < 0 a < b

• Значи да slt поставља се битове на 0 осим бита најмање тежине који се поставља у зависности од резултата поређења.

Конструкција Конструкција ALUALU

0

3

Result

Operation

a

1

CarryIn

CarryOut

0

1

Binvert

b 2

Less

0

3

Result

Operation

a

1

CarryIn

0

1

Binvert

b 2

Less

Set

Overflowdetection

Overflow

a.

b.

Конструкција Конструкција ALUALU

0

3

Result

Operation

a

1

CarryIn

CarryOut

0

1

Binvert

b 2

Less

0

3

Result

Operation

a

1

CarryIn

0

1

Binvert

b 2

Less

Set

Overflowdetection

Overflow

a.

b.

Конструкција Конструкција ALUALU

Seta31

0

ALU0 Result0

CarryIn

a0

Result1a1

0

Result2a2

0

Operation

b31

b0

b1

b2

Result31

Overflow

Binvert

CarryIn

Less

CarryIn

CarryOut

ALU1Less

CarryIn

CarryOut

ALU2Less

CarryIn

CarryOut

ALU31Less

CarryIn

Конструкција Конструкција ALUALU

Seta31

0

Result0a0

Result1a1

0

Result2a2

0

Operation

b31

b0

b1

b2

Result31

Overflow

Bnegate

Zero

ALU0Less

CarryIn

CarryOut

ALU1Less

CarryIn

CarryOut

ALU2Less

CarryIn

CarryOut

ALU31Less

CarryIn

Конструкција Конструкција ALUALU

Управљачке линије Функција

000 and

001 or

010 add

110 subtract

111 set on less then

Конструкција Конструкција ALUALU

32

32

32

ALU operation

Result

a

b

ALU

Overflow

Zero

CarryOut

3

Конструкција Конструкција ALUALU• RCA је исувише спор!• Постоје многе шеме за

предвиђање преноса код којих је потребно време log2n ако сабирају два n-тобитна броја.

• Једна таква шема је carry-lookahead сабирач (понекад се овај тип зове и carry-anticipation сабирач).

Конструкција Конструкција ALUALU• Размотримо један четворобитни

паралелни сабирач (RCA).

x ycout cin

S

S3

x3 y3

c3

S2

x2 y2

c2

S1

x1 y1

c1

S0

x0 y0

c0x ycout cin

S

x ycout cin

S

x ycout cin

S

Конструкција Конструкција ALUALU• Начин генерисања преноса може

се изразити каоc0 = x0y0 (1)

c1 = x1y1 + (x1 y1)c0 (2)

• Заменом (1) у (2) добијамоc1 = x1y1 + (x1 y1)x0y0 (3)

Конструкција Конструкција ALUALU• Слично је и

c2 = x2y2 + (x2 y2)c1 (4)

• Заменом (3) у (4) добијамоc2 = x2y2 + (x2 y2)x1y1 + (x1 y1)x0y0

= x2y2 + (x2 y2)x1y1 + (x2 y2) (x1 y1)x0y0(5)

Конструкција Конструкција ALUALU• Најзад

c3 = x3y3 + (x3 y3)c2 (6)

• Заменом (5) у (6) добија се

c3 = x3y3 + (x3 y3)x2y2 + (x2 y2)x1y1 + (x2 y2)(x1 y1)x0y0

= x3y3 + (x3 y3)x2y2 + (x3 y3)(x2 y2)x1y1 + (x3 y3)(x2 y2) (x1 y1)x0y0 (7)

Конструкција Конструкција ALUALU

• Дефинишимо сигнале Pi (carry - propagate) и Gi (carry - generate) за i-ти степен сабирача као:

Pi = xi yi (8)

Gi = xiyi (9)

Конструкција Конструкција ALUALU• Pi указује на то када се улазни

пренос i–тог степена простире ка наредном a Gi указује да се на излазу i–тог степена генерише пренос независно од улазног преноса.

Конструкција Конструкција ALUALU• Заменом (8) и (9) у (1), (3), (5) и (7)

добијамо

c0 = G0

c1 = G1 + G0 P1

c2 = G2 + G1 P2 + G0 P2 P1

c3 = G3 + G2 P3 + G1 P3 P2 + G0 P3 P2 P1

Конструкција Конструкција ALUALU• Пренос ка наредном степену је

ci+1 = xi yi + ci (xi + yi) = Gi + ci Pi (10)

• Заменом ci = Gi-1 + ci-1 Pi-1 у (10) добијамо

ci+1 = Gi + Gi-1 Pi + ci-1 Pi-1 Pi (11)

Конструкција Конструкција ALUALU• Настављајући даље рекурзивно

добијамо

ci+1 = Gi + Gi-1 Pi + Gi-2 Pi-1 Pi + ci-2 Pi-2 Pi-1 Pi = = . . . =

= Gi + Gi-1 Pi + Gi-2 Pi-2 Pi + ... + c0 P0 P1 ... Pi (12)

Конструкција Конструкција ALUALU

FAx0y0

cin = 0

S0

G0P0

FAx1y1

S1

G1P1

FAx2y2

S2

G2

P2

FAx3y3

S3

G3P3

c1

c2

c3

Конструкција Конструкција ALUALU• Међутим, превише би било

компликовано направити овакав 16-битни или 32-битни сабирач!

• Уместо тога се праве групе (од по 4) CLA које се повезују на RC начин или чак поново на CL начин.

Конструкција Конструкција ALUALUCarryIn

Result0--3

ALU0

CarryIn

Result4--7

ALU1

CarryIn

Result8--11

ALU2

CarryIn

CarryOut

Result12--15

ALU3

CarryIn

C1

C2

C3

C4

P0G0

P1G1

P2G2

P3G3

pigi

pi + 1gi + 1

ci + 1

ci + 2

ci + 3

ci + 4

pi + 2gi + 2

pi + 3gi + 3

a0b0a1b1a2b2a3b3

a4b4a5b5a6b6a7b7

a8b8a9b9

a10b10a11b11

a12b12a13b13a14b14a15b15

Carry-lookahead unit

МножењеМножење• Множење је знатно сложеније од

сабирања.• Састоји се од низа померања и

сабирања.• Захтева више времена и меморије

од сабирања.

МножењеМножење• Број битова производа је m+n, ако

је n број битова множеника а m број битова множиоца.

• Обично множимо 32-битне бројеве и добијамо 32-битни производ па је могуће прекорачење!

МножењеМножење

1000 множеник (multiplicand)

1001 множилац (multiplier)1000

0000 0000

1000 1001000 производ (product)

МножењеМножење• Очигледно, ако је текућа цифра

множиоца 1, треба ставити на одговарајуће место множеник, а када је 0 онда уписујемо нуле на одговарајуће место.

МножењеМножење• Циљ нам је да хардвер који врши

множење буде оптималан.

• Видећемо три верзије.

• За сада претпостављамо множење само ненегативих бројева.

МножењеМножење

64-bit ALU

Control test

MultiplierShift right

ProductWrite

MultiplicandShift left

64 bits

64 bits

32 bits

МножењеМножење

Done

1. TestMultiplier0

1a. Add multiplicand to product andplace the result in Product register

2. Shift the Multiplicand register left 1 bit

3. Shift the Multiplier register right 1 bit

32nd repetition?

Start

Multiplier0 = 0Multiplier0 = 1

No: < 32 repetitions

Yes: 32 repetitions

МножењеМножење• Како је око половине цифара

множиоца једнако нули па се врши непотпуно сабирање са нулом, а 64-битна ALU спора и непотребна, прешло се на нову идеју.

МножењеМножење• Претходни алгоритам помера

множеник улево при чему се убацују нуле са десне стране па множеник не утиче на LS цифру производа.

МножењеМножење• Шта ако уместо померања

множеника улево померамо производ удесно?

• Сада је множеник фиксиран у односу на производ а потребни сабирач само 32-битни.

МножењеМножење

MultiplierShift right

Write

32 bits

64 bits

32 bits

Shift right

Multiplicand

32-bit ALU

Product Control test

МножењеМножење

Done

1. TestMultiplier0

1a. Add multiplicand to the left half ofthe product and place the result inthe left half of the Product register

2. Shift the Product register right 1 bit

3. Shift the Multiplier register right 1 bit

32nd repetition?

Start

Multiplier0 = 0Multiplier0 = 1

No: < 32 repetitions

Yes: 32 repetitions

МножењеМножење• Следеће запажање је да је 64-

битни регистар производа заправо улудо утрошен простор величине множиоца.

• Како битови производа “нестају” услед померања, тако нестају (бивају искоришћени) и битови множиоца.

МножењеМножење• У трећој верзији у 64-битном

регисту комбиновани су производ у вишем делу и множилац у нижем делу.

• Алгоритам почиње смештањем множиоца у десну половину и смештањем нула леву половину.

МножењеМножење

ControltestWrite

32 bits

64 bits

Shift rightProduct

Multiplicand

32-bit ALU

МножењеМножење

Done

1. TestProduct0

1a. Add multiplicand to the left half ofthe product and place the result inthe left half of the Product register

2. Shift the Product register right 1 bit

32nd repetition?

Start

Product0 = 0Product0 = 1

No: < 32 repetitions

Yes: 32 repetitions

МножењеМножење• До сада смо претпоставили

множење позитивих бројева.• Наједноставнији начин за

множење означених бројева је да се и множеник и множилац претворе у позитивне бројеве памтећи оригиналне знаке.

МножењеМножење• Алгоритам за множење треба да

уради 31 итерацију остављајући битове знакова необухваћене израчунавањем, а производу треба променити знак уколико су оригинални знаци различити.

МножењеМножење• Елегантнији приступ множењу

означених бројева је Бутов (Booth) алгоритам.

• Овај алгоритам полази од запажања да, уз постојање могућности и сабирања и одузимања, постоји више начина да се израчуна производ.

МножењеМножење

• Ако множимо 2 и 6, тј. 00102 и 01102:

0010 0110

+ 0000 shift (0 у множиоцу)+ 0010 add (1 у множиоцу)+ 0010 add (1 у множиоцу)+ 0000 shift (0 у множиоцу)

00001100

МножењеМножење• Бут је приметио да ALU која може да

сабира или одузима може да добије исти резултат на више начина.

• На пример, како је6 = -2 + 8

или0110 = -0010 + 1000

можемо да заменимо низ јединица у множиоцу једним одузимањем на почетку низа и сабирањем после последње јединице у низу.

МножењеМножење0010

0110+ 0000 shift (0 у множиоцу) - 0010 sub (прва 1 у множиоцу)+ 0000 shift (унутар низа 1)+ 0010 shift (0 у множиоцу)

00001100

МножењеМножење• Бутов алгоритам треба брже да се

извршава обзиром да је у то време померање било брже од сабирања.

• Алгоритам функционише и за означене бројеве.

МножењеМножење• Кључна карактеристика овог

алгоритма је да класификује групе битова на оне у почетку, у средини и на крају низа јединица.

0 1 1 1 1 0

Почетак поворке

Средина поворке

Крај поворке

МножењеМножење• Почетни подниз састављен од нула не

изазива никакву аритметичку операцију.• Ако посматрамо само по 2 суседна бита

можемо закључити о којем случају се ради.

Текући бит

Бит с десна

Објашњење Пример

1 0 Почетак поворке јединица 00001111000

1 1 Средина поворке јединица

00001111000

0 1 Крај поворке једниница 00001111000

0 0 Средина поворке нула 00001111000

МножењеМножење• Бутов алгоритам се од већ изложеног

алгоритма множења разликује у томе што се уместо једног бита множиоца посматрају по 2 бита.

• Наредни корак је померање производа удесно.

МножењеМножење• Алгоритам сада гласи:

1. У зависности од текућег и претходног бита обавља се следеће:00: усред низа нула нема аритметичких операција.01: крај низа јединица, додаје се множеник левој половини производа.10: почетак низа јединица, одузима се множеник од леве половине производа.11: усред низа јединица, нема аритметичких операција.

2. Као и раније померање регистра производа за један бит удесно.

МножењеМножењеИтерација Множеник

Оригинални алгоритам Бутов алгоритам

Корак Производ Корак Производ

0 0010 Почетно 0000 0110 Почетно 0000 0110 0

1 0010 1: 0 no oper. 0000 0110 1a:00no oper. 0000 0110 0

0010 2: shift right pr. 0000 0011 2: shift right pr. 0000 0011 0

2 0010 1a:1 pr=pr+mcand 0010 0011 1c:10pr=pr-mcand 1110 0011 0

0010 2: shift right pr. 0001 0001 2: shift right pr. 1111 0001 1

3 0010 1a:1 pr=pr+mcand 0011 0001 1d:11 no oper 1111 0001 1

0010 2: shift right pr. 0001 1000 2: shift right pr. 1111 1000 1

4 0010 1:0 no operation 0001 1000 1b:01 pr=pr+mcand 0001 1000 1

0010 2: shift right pr. 0000 1100 2: shift right pr. 0000 1100 0

1. Крајњи десни бит код Бутовог алгоритма је десни сусед текућег бита пре померања; на почетку узимамо да је његова вредност 0.

2. Да би очували знак производа вршимо аритметичко померање удесно.

МножењеМножењеПример

Испробајмо Бутов алгоритам на множењу негативних бројева. Нека је у питању

2 -3 = -6или

0010 1101 = 1111 1010

МножењеМножењеИтерациј

аКорак Множеник Производ

0 Почетне вредности 0010 0000 1101 0

1 1c:10 Prod=Prod-Mcand 0010 1110 1101 0

2: shift right Prod 0010 1111 0110 1

2 1b:10 Prod=Prod+Mcand 0010 0001 0110 1

2: shift right Prod 0010 0000 1011 0

3 1c:10 Prod=Prod-Mcand 0010 1110 1011 0

2: shift right Prod 0010 1111 0101 1

4 1d:11 no operation 0010 1111 0101 1

2: shift right Prod 0010 1111 1010 1

МножењеМножење• Множење основом еквивалентно је

померању улево!• Можемо показати да Бутов

алгоритам заиста коректно ради за означене бројеве.

• Нека је a множилац а b множеник, при чему ai означава бит i од a.

МножењеМножење• Ако преформулишемо Бутов алгоритам

у смислу битова множиоца онда важи следећа табела.

ai ai-1 Операција

0 0 Не ради ништа

0 1 Сабери b

1 0 Одузми b

1 1 Не ради ништа

МножењеМножење• Уместо у табеларном облику алгоритам

можемо представити изразом(ai-1 – ai)

где вредност овог узраза представља следеће акције

0: не ради ништа+1: додај b-1: одузми b

МножењеМножење• Како се померање множеника улево у

односу на регистар производа може сматрати множењем основом (2), Бутов алгоритам се може написати као збир

(а-1 – а0) b 20

+ (а0 – а1) b 21

+ (а1 – а2) b 22

… …+ (а29 – а30) b 230

+ (а30 – а31) b 231

МножењеМножење• Ову суму можемо поједноставити ако

приметимо да је -аi 2i + аi 2i+1 = (-аi + 2аi)2i = аi2i

не заборављајући да је а-1=0 и извлачећи b из сваког сабирка

b((а31 -231) + (а30 -230) + … + (а1 -21) + (а0 -20))

• Израз у загради је двојични комплемент од а па је коначни резултат

МножењеМножење• MIPS пружа могућност да два

регистра садрже 64-битни производ (Hi и Lo).

• Две инструкције за множење mult и multu (неозначени) а за добијање 32-битног производа користи се mflo (move from lo).

МножењеМножење• Игнорише се прекорачење ако

производ не може да стане у 32 бита.