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

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

description

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

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

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

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

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

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

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

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

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

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

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

• 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

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

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

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

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

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

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

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

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

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

ПримерНека је у регистру $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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0000 0000 0000 00102 = 210

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

0000 0000 0000 0000 0000 0000 0000 00102 = 210

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

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

Исти поступак је и за негативне бројеве. Двојични комплемент 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0000 0000 0000 0000 0000 1101 0000 0000

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

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

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

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

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

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

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

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

0 0 16 10 8 0

op rs rt rd shamt funct

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

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

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

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

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

Логичке операцијеЛогичке операције• Ако је још увек у $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

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

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

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

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

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

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

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

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

0000 0000 0000 0000 0011 1101 0000 0000

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

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

Нека је дат следећи код на језику 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.

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

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

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

ready

31 … 10 9 2 1 0

enablereceivedByte

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

блокове”.

S

CA

B

0

1

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

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

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

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

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

операција

резултат0

1

а

b

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

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

Sum

CarryIn

CarryOut

a

b

cout = ab + acin + bcin

sum = a xor b xor cin

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

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

сабирање.

b

0

2

Result

Operation

a

1

CarryIn

CarryOut

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

Конструкција Конструкција 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

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

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

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

0

2

Result

Operation

a

1

CarryIn

CarryOut

0

1

Binvert

b

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

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

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

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

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

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

Конструкција Конструкција 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.

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

Конструкција Конструкција 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.

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

Конструкција Конструкција 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

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

Конструкција Конструкција 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

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

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

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

000 and

001 or

010 add

110 subtract

111 set on less then

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

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

32

32

32

ALU operation

Result

a

b

ALU

Overflow

Zero

CarryOut

3

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

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

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

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

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

Конструкција Конструкција 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

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

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

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

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

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

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

Конструкција Конструкција 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)

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

Конструкција Конструкција 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)

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

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

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

Pi = xi yi (8)

Gi = xiyi (9)

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

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

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

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

Конструкција Конструкција 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

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

Конструкција Конструкција 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)

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

Конструкција Конструкција 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)

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

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

FAx0y0

cin = 0

S0

G0P0

FAx1y1

S1

G1P1

FAx2y2

S2

G2

P2

FAx3y3

S3

G3P3

c1

c2

c3

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

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

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

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

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

Конструкција Конструкција 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

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

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

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

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

од сабирања.

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

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

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

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

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

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

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

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

0000 0000

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

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

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

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

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

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

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

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

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

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

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

64-bit ALU

Control test

MultiplierShift right

ProductWrite

MultiplicandShift left

64 bits

64 bits

32 bits

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

MultiplierShift right

Write

32 bits

64 bits

32 bits

Shift right

Multiplicand

32-bit ALU

Product Control test

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

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

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

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

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

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

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

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

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

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

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

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

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

ControltestWrite

32 bits

64 bits

Shift rightProduct

Multiplicand

32-bit ALU

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0010 0110

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

00001100

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

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

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

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

или0110 = -0010 + 1000

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

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

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

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

00001100

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

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

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

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

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

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

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

0 1 1 1 1 0

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

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

Крај поворке

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

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

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

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

Текући бит

Бит с десна

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

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

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

00001111000

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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. Да би очували знак производа вршимо аритметичко померање удесно.

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

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

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

2 -3 = -6или

0010 1101 = 1111 1010

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0 1 Сабери b

1 0 Одузми b

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

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

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

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

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

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

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

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

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

(а-1 – а0) b 20

+ (а0 – а1) b 21

+ (а1 – а2) b 22

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

+ (а30 – а31) b 231

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

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

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

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

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

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

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

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

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

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

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

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

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