Аритметичке и логичке операције
-
Upload
quemby-joyce -
Category
Documents
-
view
31 -
download
1
description
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))
• Израз у загради је двојични комплемент од а па је коначни резултат
bа
МножењеМножење• MIPS пружа могућност да два
регистра садрже 64-битни производ (Hi и Lo).
• Две инструкције за множење mult и multu (неозначени) а за добијање 32-битног производа користи се mflo (move from lo).
МножењеМножење• Игнорише се прекорачење ако
производ не може да стане у 32 бита.