Аритметичке и логичке операције
DESCRIPTION
Аритметичке и логичке операције. Означени и неозначени бројеви Сабирање и одузимање Логичке операције Конструкција ALU Множење. Означени и неозначени бројеви. Бројеви се представљају бинарно, користећи двојични комплемент. Код MIPS-a бројеви су по правилу 32-битни и означени. maxint. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/1.jpg)
Аритметичке и Аритметичке и логичке операцијелогичке операције
• Означени и неозначени бројевиОзначени и неозначени бројеви• Сабирање и одузимањеСабирање и одузимање• Логичке операцијеЛогичке операције• Конструкција Конструкција ALUALU• МножењеМножење
![Page 2: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/2.jpg)
Означени и неозначени Означени и неозначени бројевибројеви
• Бројеви се представљају бинарно, користећи двојични комплемент.
• Код MIPS-a бројеви су по правилу 32-битни и означени.
![Page 3: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/3.jpg)
Означени и неозначени Означени и неозначени бројевибројеви
• 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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/4.jpg)
Означени и неозначени Означени и неозначени бројевибројеви
• Садржај регистра или локације је низ битова који се може на различите начине интерперетирати.
• Бројеви могу да буду и неозначени, када сви битови представљају вредност броја.
![Page 5: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/5.jpg)
Означени и неозначени Означени и неозначени бројевибројеви
• Код поређења вредности MIPS нуди инструкције које раде са означеним бројевима (slt, slti) али и са неозначеним (sltu, sltiu).
![Page 6: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/6.jpg)
Означени и неозначени Означени и неозначени бројевибројеви
ПримерНека је у регистру $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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/7.jpg)
Означени и неозначени Означени и неозначени бројевибројеви
ОдговорВредност у регистру $s0 је -1, ако се ради о (означеном) целом броју, а 4,294,967,295, ако се ради о неозначеном целом броју. Вредност у регистру $s1 је у оба случаја 1.
Према томе, регистар $t0 ће садржати 1 (-1<1) a $t1 ће садржати 0 (4,294,967,295 > 1).
![Page 8: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/8.jpg)
Означени и неозначени Означени и неозначени бројевибројеви
• У општем случају операнди не морају бити 32-битни.
• Поставља се питање како прелазимо са презентације неке вредности са n битова на презентацију те вредности са више од n битова?
![Page 9: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/9.jpg)
Означени и неозначени Означени и неозначени бројевибројеви
• Ова операција назива се знаковно проширење и састоји се у копирању бита знака датог броја у све више битове.
![Page 10: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/10.jpg)
Означени и неозначени Означени и неозначени бројевибројеви
ПримерКонвертовати 16-битну бинар-ну вредност броја 2 у одгова-рајућу 32-битну вредност.
![Page 11: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/11.jpg)
Означени и неозначени Означени и неозначени бројевибројеви
Одговор16-битна вредност броја 2 је
0000 0000 0000 00102 = 210
32-битну вредност ћемо добити копирањем најстаријег бита броја (0) у леву половину чиме се добија
0000 0000 0000 0000 0000 0000 0000 00102 = 210
![Page 12: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/12.jpg)
Означени и неозначени Означени и неозначени бројевибројеви
Исти поступак је и за негативне бројеве. Двојични комплемент 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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/13.jpg)
Сабирање и одузимањеСабирање и одузимање• Сабирање је једна од основних
аритметичких операција коју подржавају сви рачунари.
• Одузимање се не врши директно већ се врши сабирање са двојичним комплементом умањиоца.
![Page 14: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/14.jpg)
Сабирање и одузимањеСабирање и одузимање• Када резултат не може да се
представи датим бројем битова (32 у овом случају) долази до прекорачења.
![Page 15: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/15.jpg)
Сабирање и одузимањеСабирање и одузимање• Прекорачење се не може јавити
када сабирамо операнде различитог знака.
• Код одузимања се прекорачење не може јавити када одузимамо операнде истог знака, јер се то своди на сабирање операнда различитог знака.
![Page 16: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/16.jpg)
Сабирање и одузимањеСабирање и одузимање• Како детектовати прекорачење у
случајевима када је могућа његова појава?
![Page 17: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/17.jpg)
Сабирање и одузимањеСабирање и одузимање• Прекорачење се јавља када се
пренос (позајмица) са бита десно од бита знака и пренос са бита знака не поклапају.
• Да ли операције са неозначеним бројевима могу да изазову прекорачење?
![Page 18: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/18.jpg)
Сабирање и одузимањеСабирање и одузимање• На пројектанту машине је да
одлучи када ће се прекорачење игнорисати а када ће изазвати изузетак.
• MIPS препознаје два случаја:– Инструкције add, addi и sub могу да
изазову прекорачење.– Код инструкција addu, addiu и subu
прекорачење се игнорише.
![Page 19: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/19.jpg)
Логичке операцијеЛогичке операције• Први рачунари су обраду вршили
над речима.• Убрзо је постало јасно да је добро
имати могућност обраде поља битова или чак појединих битова унутар речи.
• Рад са знаковима унутар речи где је сваки од знакова 8-битан је један од примера за ово.
![Page 20: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/20.jpg)
Логичке операцијеЛогичке операције• Једна од група оваквих операција
су операције померања.• Нека, на пример регистар $s0
садржи0000 0000 0000 0000 0000 0000 0000 1101
После померања за 8 места улево његов садржај ће бити
0000 0000 0000 0000 0000 1101 0000 0000
![Page 21: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/21.jpg)
Логичке операцијеЛогичке операције• Дуална операција операцији
померања улево је операција померања удесно.
• MIPS инструкције које обављају ове операције су sll (shift left logical) и srl (shift right logical).
sll $t2,$s0,8 # $t2 = $s8 << 8
![Page 22: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/22.jpg)
Логичке операцијеЛогичке операције• Сада можемо да схватимо значење
поља shamt у R-формату.
0 0 16 10 8 0
op rs rt rd shamt funct
![Page 23: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/23.jpg)
Логичке операцијеЛогичке операције• Такође су корисне операције И и
ИЛИ (AND и OR) које се могу употребити за издвајање неког поља битова.
• Ове операције (and, andi, or, ori) обављају се над одговарајућим битовима изворних операнада, а резултат смешта у одговарајући бит одредишног операнда.
![Page 24: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/24.jpg)
Логичке операцијеЛогичке операције• Ако је још увек у $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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/25.jpg)
Логичке операцијеЛогичке операције• Овакви шаблони битова називају
се маске и помоћу њих неки битови могу да се обришу а неки да остану са оригиналном вредношћу.
• Слично томе, ИЛИ операцију можемо да користимо да поставимо неке од битова.
![Page 26: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/26.jpg)
Логичке операцијеЛогичке операције• Ако су садржаји регистара $t1 и
$t2 непромењени, онда операцијаor $t0,$t1,$t2#$t0 = $t1 | $t2
даје следећи садржај регистра $t0:
0000 0000 0000 0000 0011 1101 0000 0000
![Page 27: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/27.jpg)
Логичке операцијеЛогичке операцијеПример
Нека је дат следећи код на језику 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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/28.jpg)
Логичке операцијеЛогичке операције
ОдговорЈезик C десно поравнава поља па је изглед речи
ready
31 … 10 9 2 1 0
enablereceivedByte
![Page 29: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/29.jpg)
Логичке операцијеЛогичке операцијеПрви корак је да изолујемо 8-битно поље receivedByte померајући га на лево а затим на десно
sll $s0,$s1,22srl $s0,$s0,24
![Page 30: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/30.jpg)
Логичке операцијеЛогичке операцијеСледеће две инструкције бришу бит најмање тежине, тј. постављају следећи бит
andi $s1,$s1,0xfffeori $s1,$s1,0x0002
![Page 31: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/31.jpg)
Логичке операцијеЛогичке операције• Треба водити рачуна о томе да addi, addiu и slti, sltiu врше знаковно проширење својих непосредних операнада!
• Како andi и ori нормално раде са неозначеним операндима, њихови непосредни операнди се тако и третирају, тј. допуњују се нулама.
![Page 32: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/32.jpg)
Конструкција Конструкција ALUALU• ALU извршава све аритметичке и
логичке операције у рачунару.• Због једноставности ћемо
покушати да направимо 1-битну ALU.
• Пошто су речи код MIPS-a 32-битне, повезаћемо 32 такве ALU.
![Page 33: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/33.jpg)
Конструкција Конструкција ALUALU• Користићемо већ познате “градивне
блокове”.
S
CA
B
0
1
Мултиплексер
![Page 34: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/34.jpg)
Конструкција Конструкција ALUALU• Логичке операције су најлакше за
имплементацију, јер већ имамо логичка кола која их реализују.
• Једнобитна ALU за операције AND и OR приказна је на слици.
операција
резултат0
1
а
b
![Page 35: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/35.jpg)
Конструкција Конструкција ALUALU• Следећа фунцкија ALU је сабирање.
Sum
CarryIn
CarryOut
a
b
cout = ab + acin + bcin
sum = a xor b xor cin
![Page 36: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/36.jpg)
Конструкција Конструкција ALUALU• 1-битна ALU која обавља функције AND, OR и
сабирање.
b
0
2
Result
Operation
a
1
CarryIn
CarryOut
![Page 37: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/37.jpg)
Конструкција Конструкција 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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/38.jpg)
Конструкција Конструкција ALUALU• Одузимање је сабирање са двојичним
комплементом умањиоца!a-b = a +b +1
0
2
Result
Operation
a
1
CarryIn
CarryOut
0
1
Binvert
b
![Page 39: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/39.jpg)
Конструкција Конструкција ALUALU• Још увек нам треба подршка поређењу
(инструкцији slt).• slt има за резултат 1 ако је rs < rt, а
иначе резултат је 0.a – b < 0 a < b
• Значи да slt поставља се битове на 0 осим бита најмање тежине који се поставља у зависности од резултата поређења.
![Page 40: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/40.jpg)
Конструкција Конструкција 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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/41.jpg)
Конструкција Конструкција 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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/42.jpg)
Конструкција Конструкција 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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/43.jpg)
Конструкција Конструкција 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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/44.jpg)
Конструкција Конструкција ALUALU
Управљачке линије Функција
000 and
001 or
010 add
110 subtract
111 set on less then
![Page 45: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/45.jpg)
Конструкција Конструкција ALUALU
32
32
32
ALU operation
Result
a
b
ALU
Overflow
Zero
CarryOut
3
![Page 46: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/46.jpg)
Конструкција Конструкција ALUALU• RCA је исувише спор!• Постоје многе шеме за
предвиђање преноса код којих је потребно време log2n ако сабирају два n-тобитна броја.
• Једна таква шема је carry-lookahead сабирач (понекад се овај тип зове и carry-anticipation сабирач).
![Page 47: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/47.jpg)
Конструкција Конструкција 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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/48.jpg)
Конструкција Конструкција ALUALU• Начин генерисања преноса може
се изразити каоc0 = x0y0 (1)
c1 = x1y1 + (x1 y1)c0 (2)
• Заменом (1) у (2) добијамоc1 = x1y1 + (x1 y1)x0y0 (3)
![Page 49: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/49.jpg)
Конструкција Конструкција 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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/50.jpg)
Конструкција Конструкција 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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/51.jpg)
Конструкција Конструкција ALUALU
• Дефинишимо сигнале Pi (carry - propagate) и Gi (carry - generate) за i-ти степен сабирача као:
Pi = xi yi (8)
Gi = xiyi (9)
![Page 52: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/52.jpg)
Конструкција Конструкција ALUALU• Pi указује на то када се улазни
пренос i–тог степена простире ка наредном a Gi указује да се на излазу i–тог степена генерише пренос независно од улазног преноса.
![Page 53: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/53.jpg)
Конструкција Конструкција 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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/54.jpg)
Конструкција Конструкција 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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/55.jpg)
Конструкција Конструкција 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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/56.jpg)
Конструкција Конструкција ALUALU
FAx0y0
cin = 0
S0
G0P0
FAx1y1
S1
G1P1
FAx2y2
S2
G2
P2
FAx3y3
S3
G3P3
c1
c2
c3
![Page 57: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/57.jpg)
Конструкција Конструкција ALUALU• Међутим, превише би било
компликовано направити овакав 16-битни или 32-битни сабирач!
• Уместо тога се праве групе (од по 4) CLA које се повезују на RC начин или чак поново на CL начин.
![Page 58: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/58.jpg)
Конструкција Конструкција 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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/59.jpg)
МножењеМножење• Множење је знатно сложеније од
сабирања.• Састоји се од низа померања и
сабирања.• Захтева више времена и меморије
од сабирања.
![Page 60: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/60.jpg)
МножењеМножење• Број битова производа је m+n, ако
је n број битова множеника а m број битова множиоца.
• Обично множимо 32-битне бројеве и добијамо 32-битни производ па је могуће прекорачење!
![Page 61: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/61.jpg)
МножењеМножење
1000 множеник (multiplicand)
1001 множилац (multiplier)1000
0000 0000
1000 1001000 производ (product)
![Page 62: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/62.jpg)
МножењеМножење• Очигледно, ако је текућа цифра
множиоца 1, треба ставити на одговарајуће место множеник, а када је 0 онда уписујемо нуле на одговарајуће место.
![Page 63: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/63.jpg)
МножењеМножење• Циљ нам је да хардвер који врши
множење буде оптималан.
• Видећемо три верзије.
• За сада претпостављамо множење само ненегативих бројева.
![Page 64: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/64.jpg)
МножењеМножење
64-bit ALU
Control test
MultiplierShift right
ProductWrite
MultiplicandShift left
64 bits
64 bits
32 bits
![Page 65: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/65.jpg)
МножењеМножење
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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/66.jpg)
МножењеМножење• Како је око половине цифара
множиоца једнако нули па се врши непотпуно сабирање са нулом, а 64-битна ALU спора и непотребна, прешло се на нову идеју.
![Page 67: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/67.jpg)
МножењеМножење• Претходни алгоритам помера
множеник улево при чему се убацују нуле са десне стране па множеник не утиче на LS цифру производа.
![Page 68: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/68.jpg)
МножењеМножење• Шта ако уместо померања
множеника улево померамо производ удесно?
• Сада је множеник фиксиран у односу на производ а потребни сабирач само 32-битни.
![Page 69: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/69.jpg)
МножењеМножење
MultiplierShift right
Write
32 bits
64 bits
32 bits
Shift right
Multiplicand
32-bit ALU
Product Control test
![Page 70: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/70.jpg)
МножењеМножење
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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/71.jpg)
МножењеМножење• Следеће запажање је да је 64-
битни регистар производа заправо улудо утрошен простор величине множиоца.
• Како битови производа “нестају” услед померања, тако нестају (бивају искоришћени) и битови множиоца.
![Page 72: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/72.jpg)
МножењеМножење• У трећој верзији у 64-битном
регисту комбиновани су производ у вишем делу и множилац у нижем делу.
• Алгоритам почиње смештањем множиоца у десну половину и смештањем нула леву половину.
![Page 73: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/73.jpg)
МножењеМножење
ControltestWrite
32 bits
64 bits
Shift rightProduct
Multiplicand
32-bit ALU
![Page 74: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/74.jpg)
МножењеМножење
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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/75.jpg)
МножењеМножење• До сада смо претпоставили
множење позитивих бројева.• Наједноставнији начин за
множење означених бројева је да се и множеник и множилац претворе у позитивне бројеве памтећи оригиналне знаке.
![Page 76: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/76.jpg)
МножењеМножење• Алгоритам за множење треба да
уради 31 итерацију остављајући битове знакова необухваћене израчунавањем, а производу треба променити знак уколико су оригинални знаци различити.
![Page 77: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/77.jpg)
МножењеМножење• Елегантнији приступ множењу
означених бројева је Бутов (Booth) алгоритам.
• Овај алгоритам полази од запажања да, уз постојање могућности и сабирања и одузимања, постоји више начина да се израчуна производ.
![Page 78: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/78.jpg)
МножењеМножење
• Ако множимо 2 и 6, тј. 00102 и 01102:
0010 0110
+ 0000 shift (0 у множиоцу)+ 0010 add (1 у множиоцу)+ 0010 add (1 у множиоцу)+ 0000 shift (0 у множиоцу)
00001100
![Page 79: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/79.jpg)
МножењеМножење• Бут је приметио да ALU која може да
сабира или одузима може да добије исти резултат на више начина.
• На пример, како је6 = -2 + 8
или0110 = -0010 + 1000
можемо да заменимо низ јединица у множиоцу једним одузимањем на почетку низа и сабирањем после последње јединице у низу.
![Page 80: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/80.jpg)
МножењеМножење0010
0110+ 0000 shift (0 у множиоцу) - 0010 sub (прва 1 у множиоцу)+ 0000 shift (унутар низа 1)+ 0010 shift (0 у множиоцу)
00001100
![Page 81: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/81.jpg)
МножењеМножење• Бутов алгоритам треба брже да се
извршава обзиром да је у то време померање било брже од сабирања.
• Алгоритам функционише и за означене бројеве.
![Page 82: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/82.jpg)
МножењеМножење• Кључна карактеристика овог
алгоритма је да класификује групе битова на оне у почетку, у средини и на крају низа јединица.
0 1 1 1 1 0
Почетак поворке
Средина поворке
Крај поворке
![Page 83: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/83.jpg)
МножењеМножење• Почетни подниз састављен од нула не
изазива никакву аритметичку операцију.• Ако посматрамо само по 2 суседна бита
можемо закључити о којем случају се ради.
Текући бит
Бит с десна
Објашњење Пример
1 0 Почетак поворке јединица 00001111000
1 1 Средина поворке јединица
00001111000
0 1 Крај поворке једниница 00001111000
0 0 Средина поворке нула 00001111000
![Page 84: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/84.jpg)
МножењеМножење• Бутов алгоритам се од већ изложеног
алгоритма множења разликује у томе што се уместо једног бита множиоца посматрају по 2 бита.
• Наредни корак је померање производа удесно.
![Page 85: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/85.jpg)
МножењеМножење• Алгоритам сада гласи:
1. У зависности од текућег и претходног бита обавља се следеће:00: усред низа нула нема аритметичких операција.01: крај низа јединица, додаје се множеник левој половини производа.10: почетак низа јединица, одузима се множеник од леве половине производа.11: усред низа јединица, нема аритметичких операција.
2. Као и раније померање регистра производа за један бит удесно.
![Page 86: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/86.jpg)
МножењеМножењеИтерација Множеник
Оригинални алгоритам Бутов алгоритам
Корак Производ Корак Производ
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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/87.jpg)
МножењеМножењеПример
Испробајмо Бутов алгоритам на множењу негативних бројева. Нека је у питању
2 -3 = -6или
0010 1101 = 1111 1010
![Page 88: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/88.jpg)
МножењеМножењеИтерациј
аКорак Множеник Производ
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: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/89.jpg)
МножењеМножење• Множење основом еквивалентно је
померању улево!• Можемо показати да Бутов
алгоритам заиста коректно ради за означене бројеве.
• Нека је a множилац а b множеник, при чему ai означава бит i од a.
![Page 90: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/90.jpg)
МножењеМножење• Ако преформулишемо Бутов алгоритам
у смислу битова множиоца онда важи следећа табела.
ai ai-1 Операција
0 0 Не ради ништа
0 1 Сабери b
1 0 Одузми b
1 1 Не ради ништа
![Page 91: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/91.jpg)
МножењеМножење• Уместо у табеларном облику алгоритам
можемо представити изразом(ai-1 – ai)
где вредност овог узраза представља следеће акције
0: не ради ништа+1: додај b-1: одузми b
![Page 92: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/92.jpg)
МножењеМножење• Како се померање множеника улево у
односу на регистар производа може сматрати множењем основом (2), Бутов алгоритам се може написати као збир
(а-1 – а0) b 20
+ (а0 – а1) b 21
+ (а1 – а2) b 22
… …+ (а29 – а30) b 230
+ (а30 – а31) b 231
![Page 93: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/93.jpg)
МножењеМножење• Ову суму можемо поједноставити ако
приметимо да је -аi 2i + аi 2i+1 = (-аi + 2аi)2i = аi2i
не заборављајући да је а-1=0 и извлачећи b из сваког сабирка
b((а31 -231) + (а30 -230) + … + (а1 -21) + (а0 -20))
• Израз у загради је двојични комплемент од а па је коначни резултат
bа
![Page 94: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/94.jpg)
МножењеМножење• MIPS пружа могућност да два
регистра садрже 64-битни производ (Hi и Lo).
• Две инструкције за множење mult и multu (неозначени) а за добијање 32-битног производа користи се mflo (move from lo).
![Page 95: Аритметичке и логичке операције](https://reader035.vdocuments.pub/reader035/viewer/2022062321/568138d3550346895da08e2f/html5/thumbnails/95.jpg)
МножењеМножење• Игнорише се прекорачење ако
производ не може да стане у 32 бита.