950 likes | 1.04k Views
Аритметичке и логичке операције. Означени и неозначени бројеви Сабирање и одузимање Логичке операције Конструкција ALU Множење. Означени и неозначени бројеви. Бројеви се представљају бинарно, користећи двојични комплемент. Код MIPS-a бројеви су по правилу 32-битни и означени. maxint.
E N D
Аритметичке и логичке операције Означени и неозначени бројеви Сабирање и одузимање Логичке операције Конструкција ALU Множење
Означени и неозначени бројеви • Бројеви се представљају бинарно, користећи двојични комплемент. • Код MIPS-a бројеви су по правилу 32-битни и означени.
maxint minint Означени и неозначени бројеви • 32-битни означени бројеви:0000 0000 0000 0000 0000 0000 0000 00002 = 0100000 0000 0000 0000 0000 0000 0000 00012 = + 1100000 0000 0000 0000 0000 0000 0000 00102 = + 210...0111 1111 1111 1111 1111 1111 1111 11102 = + 2,147,483,646100111 1111 1111 1111 1111 1111 1111 11112 = + 2,147,483,647101000 0000 0000 0000 0000 0000 0000 00002 = – 2,147,483,648101000 0000 0000 0000 0000 0000 0000 00012 = – 2,147,483,647101000 0000 0000 0000 0000 0000 0000 00102 = – 2,147,483,64610...1111 1111 1111 1111 1111 1111 1111 11012 = – 3101111 1111 1111 1111 1111 1111 1111 11102 = – 2101111 1111 1111 1111 1111 1111 1111 11112 = – 110
Означени и неозначени бројеви • Садржај регистра или локације је низ битова који се може на различите начине интерперетирати. • Бројеви могу да буду и неозначени, када сви битови представљају вредност броја.
Означени и неозначени бројеви • Код поређења вредности 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 poredjenje sltu $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
001610 8 0 oprsrtrdshamtfunct Логичке операције • Сада можемо да схватимо значење поља shamt у R-формату.
Логичке операције • Такође су корисне операције И и ИЛИ (AND иOR) које се могу употребити за издвајање неког поља битова. • Ове операције (and, andi, or, ori) обављају се над одговарајућим битовима изворних операнада, а резултат смешта у одговарајући бит одредишног операнда.
Логичке операције • Ако је још увек у $t2 0000 0000 0000 0000 0000 1101 0000 0000 а у $t1 0000 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
Логичке операције Пример Нека је дат следећи код на језику C int 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.
31 … 10 9 210 receivedByte enable ready Логичке операције Одговор Језик C десно поравнава поља па је изглед речи
Логичке операције Први корак је да изолујемо 8-битно поље receivedByteпомерајући га на лево а затим на десно sll $s0,$s1,22 srl $s0,$s0,24
Логичке операције Следеће две инструкције бришу бит најмање тежине, тј. постављају следећи бит andi $s1,$s1,0xfffe ori $s1,$s1,0x0002
Логичке операције • Треба водити рачуна о томе да addi, addiu и slti,sltiu врше знаковно проширење својих непосредних операнада! • Како andiи ori нормално раде са неозначеним операндима, њихови непосредни операнди се тако и третирају, тј. допуњују се нулама.
Конструкција ALU • ALU извршава све аритметичке и логичке операције у рачунару. • Због једноставности ћемо покушати да направимо 1-битну ALU. • Пошто су речи код MIPS-a 32-битне, повезаћемо 32 такве ALU.
S A C 0 B 1 Мултиплексер Конструкција ALU • Користићемо већ познате “градивне блокове”.
операција а резултат 0 1 b Конструкција ALU • Логичке операције су најлакше за имплементацију, јер већ имамо логичка кола која их реализују. • Једнобитна ALU за операције AND и OR приказна је на слици.
Конструкција ALU • Следећа фунцкија ALU је сабирање. cout = ab + acin + bcin sum = a xor b xor cin
Конструкција ALU • 1-битна ALU која обавља функције AND, OR и сабирање.
Конструкција ALU • 32-битна ALU која обавља функције AND, OR и сабирање. • Сабирач који се добија директним повезивањем преноса 1-битних сабирача назива се ripple carry adder.
Конструкција ALU • Одузимање је сабирање са двојичним комплементом умањиоца! a-b = a +b +1
Конструкција ALU • Још увек нам треба подршка поређењу (инструкцији slt). • sltима за резултат 1 ако је rs < rt, а иначе резултат је 0. a – b < 0 a < b • Значи да slt поставља се битове на 0 осим бита најмање тежине који се поставља у зависности од резултата поређења.
ALU operation 3 a 32 Zero ALU Result 32 Overflow b 32 CarryOut Конструкција ALU
Конструкција ALU • RCA је исувише спор! • Постоје многе шеме за предвиђање преноса код којих је потребно времеlog2nако сабирају два n-тобитна броја. • Једна таква шема је carry-lookaheadсабирач(понекад се овај тип зове и carry-anticipation сабирач).
x3 y3 x2 y2 x1 y1 x0 y0 x y coutcin S x y coutcin S x y coutcin S x y coutcin S c3 c2 c1 c0 S3 S2 S1 S0 Конструкција ALU • Размотримо један четворобитни паралелни сабирач (RCA).
Конструкција ALU • Начин генерисања преноса може се изразити као c0 = x0y0 (1) c1 = x1y1 + (x1y1)c0 (2) • Заменом (1) у (2) добијамо c1 = x1y1 + (x1y1)x0y0 (3)
Конструкција ALU • Слично је и c2 = x2y2 + (x2y2)c1 (4) • Заменом (3) у (4) добијамо c2 = x2y2 + (x2y2)x1y1 + (x1y1)x0y0 = x2y2 + (x2y2)x1y1 + (x2y2) (x1y1)x0y0(5)
Конструкција ALU • Најзад c3 = x3y3 + (x3y3)c2 (6) • Заменом (5) у (6) добија се c3 = x3y3 + (x3y3)x2y2 + (x2y2)x1y1 + (x2y2)(x1y1)x0y0 = x3y3 + (x3y3)x2y2 + (x3y3)(x2y2)x1y1 + (x3y3)(x2y2) (x1y1)x0y0 (7)