Аритметичке и Аритметичке и логичке операције логичке операције • Означени и неозначени бројеви Означени и неозначени бројеви • Сабирање и одузимање Сабирање и одузимање • Логичке операције Логичке операције • Конструкција Конструкција ALU ALU • Множење Множење
Аритметичке и логичке операције. Означени и неозначени бројеви Сабирање и одузимање Логичке операције Конструкција ALU Множење. Означени и неозначени бројеви. Бројеви се представљају бинарно, користећи двојични комплемент. Код MIPS-a бројеви су по правилу 32-битни и означени. maxint. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Аритметичке и Аритметичке и логичке операцијелогичке операције
• Означени и неозначени бројевиОзначени и неозначени бројеви• Сабирање и одузимањеСабирање и одузимање• Логичке операцијеЛогичке операције• Конструкција Конструкција ALUALU• МножењеМножење
Означени и неозначени Означени и неозначени бројевибројеви
• Бројеви се представљају бинарно, користећи двојични комплемент.
• Код MIPS-a бројеви су по правилу 32-битни и означени.
Означени и неозначени Означени и неозначени бројевибројеви
Означени и неозначени Означени и неозначени бројевибројеви
• Садржај регистра или локације је низ битова који се може на различите начине интерперетирати.
• Бројеви могу да буду и неозначени, када сви битови представљају вредност броја.
Означени и неозначени Означени и неозначени бројевибројеви
• Код поређења вредности 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) добија се као
• 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
• Дефинишимо сигнале 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. Као и раније померање регистра производа за један бит удесно.