26
Computer Organization and Computer Organization and Design Design Instruction Sets Instruction Sets Montek Singh Montek Singh Wed, Sep 18, 2013 Wed, Sep 18, 2013 Lecture 5 Lecture 5

Computer Organization and Design Instruction Sets

  • Upload
    yaakov

  • View
    29

  • Download
    0

Embed Size (px)

DESCRIPTION

Computer Organization and Design Instruction Sets. Montek Singh Wed, Sep 18, 2013 Lecture 5. Today. More instructions signed vs. unsigned instructions larger constants accessing memory branches and jumps multiply, divide comparisons logical instructions Reading Book Chapter 2.1-2.7 - PowerPoint PPT Presentation

Citation preview

Page 1: Computer Organization and Design Instruction Sets

Computer Organization and Computer Organization and DesignDesign

Instruction SetsInstruction Sets

Montek SinghMontek SinghWed, Sep 18, 2013Wed, Sep 18, 2013

Lecture 5Lecture 5

Page 2: Computer Organization and Design Instruction Sets

TodayToday More instructionsMore instructions

signed vs. unsigned instructionssigned vs. unsigned instructions larger constantslarger constants accessing memoryaccessing memory branches and jumpsbranches and jumps multiply, dividemultiply, divide comparisonscomparisons logical instructionslogical instructions

ReadingReading Book Chapter 2.1-2.7Book Chapter 2.1-2.7 Study the inside green flap (“Green Card”)Study the inside green flap (“Green Card”)

2

Page 3: Computer Organization and Design Instruction Sets

Recap: MIPS Instruction FormatsRecap: MIPS Instruction Formats All MIPS instructions fit into a single 32-bit wordAll MIPS instructions fit into a single 32-bit word Every instruction includes various Every instruction includes various ““fieldsfields””::

a 6-bit operation or a 6-bit operation or ““OPCODEOPCODE”” specifies which operation to execute (fewer than 64)specifies which operation to execute (fewer than 64)

up to three 5-bit OPERAND fieldsup to three 5-bit OPERAND fields each specifies a register (one of 32) as source/destinationeach specifies a register (one of 32) as source/destination

embedded constantsembedded constants also called “literals” or “immediates”also called “literals” or “immediates” 16-bits, 5-bits or 26-bits long16-bits, 5-bits or 26-bits long sometimes treated as signed values, sometimes unsignedsometimes treated as signed values, sometimes unsigned

There are three basic instruction formats:There are three basic instruction formats:

• R-type, 3 register operands (2 sources, destination)

• I-type, 2 register operands, 16-bit constant

OP rs

rt rd

OP rs

rt 16-bit constant

funcshamt

• J-type, no register operands, 26-bit constant OP 26-bit constant

3

Page 4: Computer Organization and Design Instruction Sets

Working with ConstantsWorking with Constants Immediate instructions allow constants to be Immediate instructions allow constants to be

specified within the instructionspecified within the instruction ExamplesExamples

add 2000 to register $5add 2000 to register $5addi $5, $5, 2000addi $5, $5, 2000

subtract 60 from register $5subtract 60 from register $5addi $5, $5, -60addi $5, $5, -60

– … … no no subisubi instruction! instruction! logically AND $5 with 0x8723 and put the result in $7logically AND $5 with 0x8723 and put the result in $7andi $7, $5, 0x8723andi $7, $5, 0x8723

put the number 1234 in $10put the number 1234 in $10addi $10, $0, 1234addi $10, $0, 1234

But…But… these constants are limited to 16 bits only!these constants are limited to 16 bits only!

– Range is [-32768…32767] if signed, or [0…65535] if unsignedRange is [-32768…32767] if signed, or [0…65535] if unsigned4

Page 5: Computer Organization and Design Instruction Sets

Recap: ADDIRecap: ADDIaddi instruction: adds register contents, signed-constant:

Symbolic version: addi $9, $11, -3

“Add the contents of rs to const; store result in rt”

OP = 0x08, dictating

addirs = 11, Reg[11]source

rt = 9, Reg[9]

destination

Reg[rt] Reg[rs] + sxt(imm)

constant field, indicating -3

as second operand

(sign-extended!)

addi rt, rs, imm:

00100001011010011111111111111101I-type:

5

Page 6: Computer Organization and Design Instruction Sets

ADDIU: Signed vs. Unsigned ADDIU: Signed vs. Unsigned ConstantsConstants

addiu instruction: adds register to unsigned-constant:

Symbolic version: addiu $9, $11, 65533

“Add the contents of rs to const; store result in rt”

OP = 0x09, dictating

addiurs = 11, Reg[11]source

rt = 9, Reg[9]

destination

Reg[rt] Reg[rs] + (imm) Logical operations are always “unsigned”, so always zero-extended

constant field, indicating 65533

as second operand

(zero-extended!)

addiu rt, rs, imm:

00100001011010011111111111111101I-type:

6

Page 7: Computer Organization and Design Instruction Sets

How About Larger Constants?How About Larger Constants? Problem: How do we work with bigger constants?Problem: How do we work with bigger constants?

Example: Put the 32-bit value 0x5678ABCD in $5Example: Put the 32-bit value 0x5678ABCD in $5 CLASS: How will you do it?CLASS: How will you do it?

One Solution:One Solution: put the upper half (0x5678) into $5put the upper half (0x5678) into $5 then shift it left by 16 positions (0x5678 0000)then shift it left by 16 positions (0x5678 0000) now “add” the lower half to it (0x5678 0000 + 0xABCD)now “add” the lower half to it (0x5678 0000 + 0xABCD)addi $5, $0, 0x5678addi $5, $0, 0x5678sll $5, $5, 16sll $5, $5, 16addi $5, $5, 0xABCDaddi $5, $5, 0xABCD

One minor problem with this:One minor problem with this: addiaddi can mess up by treating the constants are signed can mess up by treating the constants are signed use use addiuaddiu or or oriori instead instead

7

Page 8: Computer Organization and Design Instruction Sets

How About Larger Constants?How About Larger Constants? Observation: This sequence is very common!Observation: This sequence is very common!

so, a special instruction was introduced to make it so, a special instruction was introduced to make it shortershorter

the first two (the first two (addi + slladdi + sll) combo is performed by) combo is performed byluilui

“ “load upper immediate”load upper immediate”puts the puts the 16-bit16-bit immediate into the immediate into the upperupper half of a register half of a register

Example: Put the 32-bit value 0x5678ABCD in $5Example: Put the 32-bit value 0x5678ABCD in $5lui $5, 0x5678lui $5, 0x5678ori $5, $5, 0xABCDori $5, $5, 0xABCD

8

Page 9: Computer Organization and Design Instruction Sets

How About Larger Constants?How About Larger Constants? Look at this in more detail:Look at this in more detail:

““load upper immediateload upper immediate””lui $5, 0x5678 // 0101 0110 0111 1000 in lui $5, 0x5678 // 0101 0110 0111 1000 in

binarybinary

Then must get the lower order bits rightThen must get the lower order bits right ori $5, $5, 0xABCD // 1010 1011 1100 1101 ori $5, $5, 0xABCD // 1010 1011 1100 1101

0101011001111000 0000000000000000

0000000000000000 1010101111001101

0101011001111000 1010101111001101

ori

0101011001111000 0000000000000000

Reminder: In MIPS, Logical Immediate instructions (ANDI, ORI, XORI) do not sign-extend their constant operand

9

Page 10: Computer Organization and Design Instruction Sets

Accessing MemoryAccessing Memory MIPS is a “load-store” architectureMIPS is a “load-store” architecture

all operands for ALU instructions are in registers or all operands for ALU instructions are in registers or immediateimmediate

cannot directly add values residing in memorycannot directly add values residing in memorymust first bring values into registers from memory (called must first bring values into registers from memory (called

LOAD)LOAD)must store result of computation back into memory (called must store result of computation back into memory (called

STORE)STORE)

10

Page 11: Computer Organization and Design Instruction Sets

MIPS Load InstructionMIPS Load Instruction Load instruction is I-typeLoad instruction is I-type

Does the following:Does the following: takes the value stored in register $rstakes the value stored in register $rsadds to it the immediate value (signed)adds to it the immediate value (signed) this is the address where memory is looked upthis is the address where memory is looked upvalue found at this address in memory is brought in and value found at this address in memory is brought in and

stored in register $rtstored in register $rt

lw rt, imm(rs)

Meaning: Reg[rt] Mem[Reg[rs] + sign-ext(imm)]

Abbreviation: lw rt,imm for lw rt, imm($0)

OP rs rt 16-bit signed constant

I-type:

11

Page 12: Computer Organization and Design Instruction Sets

MIPS Store InstructionMIPS Store Instruction Store instruction is also I-typeStore instruction is also I-type

Does the following:Does the following: takes the value stored in register $rstakes the value stored in register $rsadds to it the immediate value (signed)adds to it the immediate value (signed) this is the address where memory is accessedthis is the address where memory is accessed reads the value from register $rt and writes it into the reads the value from register $rt and writes it into the

memory at the address computedmemory at the address computed

sw rt, imm(rs)

Meaning: Mem[Reg[rs] + sign-ext(imm)] = Reg[rt]

Abbreviation: sw rt,imm for sw rt, imm($0)

OP rs rt 16-bit signed constant

I-type:

12

Page 13: Computer Organization and Design Instruction Sets

MIPS Memory AddressesMIPS Memory Addresses lwlw and and swsw read whole 32-bit words read whole 32-bit words

so, addresses computed must be multiples of 4so, addresses computed must be multiples of 4Reg[rs] + sign-ext(imm) must end in “00” in binaryReg[rs] + sign-ext(imm) must end in “00” in binary

otherwise: runtime exceptionotherwise: runtime exception

There are also byte-sized flavors of these There are also byte-sized flavors of these instructionsinstructionslblb (load byte) (load byte)sbsb (store byte) (store byte)

work the same way, but their addresses do not have to be work the same way, but their addresses do not have to be multiples of 4multiples of 4

13

Page 14: Computer Organization and Design Instruction Sets

Storage ConventionsStorage Conventions

• Data and Variables are stored in memory• Operations done on registers• Registers hold Temporary results

1000:1004:1008:

1010:100C:

nrxy

Addr assigned at compile time int x, y;y = x + 37;

x=0x1008y=0x100Clw $t0, x($0)addiu $t0, $t0, 37sw $t0, y

or, morehumanely,

to

rs defaults to Reg[0] (0)

lw $t0, 0x1008($0)addiu $t0, $t0, 37sw $t0, 0x100C($0)

translatesto

Compilation approach:LOAD, COMPUTE, STORE

14

Page 15: Computer Organization and Design Instruction Sets

MIPS Branch InstructionsMIPS Branch Instructions

if (REG[RS] != REG[RT]) { PC = PC + 4 + 4*offset; }

bne rs, rt, label # Branch if not equal

if (REG[RS] == REG[RT]) { PC = PC + 4 + 4*offset; }

beq rs, rt, label # Branch if equal

NB: Branch targets are specified relative to the next instruction (which would be fetched by default). The assembler hides the calculation of these offset values from the user, by allowing them to specify a target address (usually a label) and it does the job of computing the offset’s value. The size of the constant field (16-bits) limits the range of branches.

OPCODE rs rt 16-bit signed constant

MIPS branch instructions provide a way of conditionally changing the PC to some nearby location...

I-type:

Notice on memory references offsets are multiplied by 4, so that branch targets are restricted to word boundaries.

15

Page 16: Computer Organization and Design Instruction Sets

MIPS JumpsMIPS Jumps The range of MIPS branch instructions is limited to approximately The range of MIPS branch instructions is limited to approximately

32K instructions ( 32K instructions ( 128K bytes) from the branch instruction. 128K bytes) from the branch instruction. To branch farther: an unconditional jump instruction is used.To branch farther: an unconditional jump instruction is used.

Instructions:Instructions:j labelj label # # jump to label (PC = PC[31-28] || CONST[25:0]*4)jump to label (PC = PC[31-28] || CONST[25:0]*4)jal labeljal label # # jump to label and jump to label and store PC+4 in $31store PC+4 in $31jr $t0jr $t0 # # jump to address specified by register’s contentsjump to address specified by register’s contentsjalr $t0, $rajalr $t0, $ra # # jump to address specified by first register’s contents jump to address specified by first register’s contents

and and store PC+4 in second registerstore PC+4 in second register

Formats:Formats:• J-type: used for j OP = 2 26-bit constant

• J-type: used for jal OP = 3 26-bit constant

• R-type, used for jr OP = 0 rs func = 8000

• R-type, used for jalr OP = 0 rs func = 900 rd

16

Page 17: Computer Organization and Design Instruction Sets

Multiply and DivideMultiply and Divide Slightly more complicated than add/subtractSlightly more complicated than add/subtract

multiply: product is twice as long!multiply: product is twice as long! if A, B are 32-bit long, A * B is how many bits?if A, B are 32-bit long, A * B is how many bits?

divide: dividing integer A by B gives two results!divide: dividing integer A by B gives two results!quotient and remainderquotient and remainder

Solution: two new special-purpose registersSolution: two new special-purpose registers ““Hi” and “Lo”Hi” and “Lo”

17

Page 18: Computer Organization and Design Instruction Sets

MultiplyMultiply MULT instructionMULT instruction

mult rs, rtmult rs, rt Meaning: multiply contents of registers $rs and $rt, Meaning: multiply contents of registers $rs and $rt,

and store the (64-bit result) in the pair of special and store the (64-bit result) in the pair of special registers registers {hi, lo}{hi, lo}

hi:lo = $rs * $rthi:lo = $rs * $rt upper 32 bits go into upper 32 bits go into hi, hi, lower 32 bits go into lower 32 bits go into lolo

To access result, use two new instructionsTo access result, use two new instructionsmfhi:mfhi: move from hi move from hi

mfhi rdmfhi rd– move the 32-bit half result from move the 32-bit half result from hi hi to $rdto $rd

mflo:mflo: move from lo move from lomflo rdmflo rd

– move the 32-bit half result from move the 32-bit half result from lo lo to $rdto $rd18

Page 19: Computer Organization and Design Instruction Sets

DivideDivide DIV instructionDIV instruction

div rs, rtdiv rs, rt Meaning: divide contents of register $rs by $rt, and Meaning: divide contents of register $rs by $rt, and

store the quotient in store the quotient in lolo, and remainder in , and remainder in hihilo = $rs / $rtlo = $rs / $rthi = $rs % $rthi = $rs % $rt

To access result, use To access result, use mfhimfhi and and mflomflo

NOTE: There are also unsigned versionsNOTE: There are also unsigned versionsmultumultudivudivu

19

Page 20: Computer Organization and Design Instruction Sets

NowNow we can do a real program: we can do a real program: Factorial...Factorial...

n: .word 123ans: .word 0

...addi $t0, $0, 1 # t0 = 1lw $t1, n # t1 = n

loop: beq $t1, $0, done # while (t1 != 0)mult $t0, $t1 # hi:lo = t0 * t1mflo $t0 # t0 = t0 * t1addi $t1, $t1, -1 # t1 = t1 - 1j loop # Always loop back

done: sw $t0, ans # ans = r1

int n, ans, r1, r2;r1 = 1;r2 = n;while (r2 != 0) { r1 = r1 * r2; r2 = r2 – 1; }ans = r1;

Synopsis (in C):•Input in n, output in ans•r1, r2 used for

temporaries•assume n is small

MIPS code, in assembly language:

20

Page 21: Computer Organization and Design Instruction Sets

Comparison: Comparison: slt, sltislt, slti slt = set-if-less-thanslt = set-if-less-than

slt rd, rs, rtslt rd, rs, rt$rd = ($rs < $rt) // “1” $rd = ($rs < $rt) // “1” if true and “0” if falseif true and “0” if false

slti = set-if-less-than-immediateslti = set-if-less-than-immediateslt rt, rs, immslt rt, rs, imm

$rt = ($rs < sign-ext(imm))$rt = ($rs < sign-ext(imm))

also unsigned flavorsalso unsigned flavorssltusltusltiusltiu

21

Page 22: Computer Organization and Design Instruction Sets

Logical InstructionsLogical Instructions Boolean operations: bitwise on all 32 bitsBoolean operations: bitwise on all 32 bits

AND, OR, NOR, XORAND, OR, NOR, XORand, andiand, andior, orior, orinor nor // Note: There is no // Note: There is no nori! nori! Why?Why?xor, xorixor, xori

Examples:Examples:and $1, $2, $3and $1, $2, $3

$1 = $2 & $3$1 = $2 & $3xori $1, $2, 0xFF12xori $1, $2, 0xFF12

$1 = $2 ^ 0x0000FF12$1 = $2 ^ 0x0000FF12 See all in textbook!See all in textbook!

22

Page 23: Computer Organization and Design Instruction Sets

Summary - 1Summary - 1

MIPS operandsName Example Comments

$s0-$s7, $t0-$t9, $zero, Fast locations for data. In MIPS, data must be in registers to perform 32 registers $a0-$a3, $v0-$v1, $gp, arithmetic. MIPS register $zero always equals 0. Register $at is

$fp, $sp, $ra, $at reserved for the assembler to handle large constants.

Memory[0], Accessed only by data transfer instructions. MIPS uses byte addresses, so

230 memory Memory[4], ..., sequential words differ by 4. Memory holds data structures, such as arrays,words Memory[4294967292] and spilled registers, such as those saved on procedure calls.

23

Page 24: Computer Organization and Design Instruction Sets

Summary - 2Summary - 2MIPS assembly language

Category Instruction Example Meaning Commentsadd add $s1, $s2, $s3 $s1 = $s2 + $s3 Three operands; data in registers

Arithmetic subtract sub $s1, $s2, $s3 $s1 = $s2 - $s3 Three operands; data in registers

add immediate addi $s1, $s2, 100 $s1 = $s2 + 100 Used to add constantsload word lw $s1, 100($s2) $s1 = Memory[$s2 + 100] Word from memory to registerstore word sw $s1, 100($s2) Memory[$s2 + 100] = $s1 Word from register to memory

Data transfer load byte lb $s1, 100($s2) $s1 = Memory[$s2 + 100] Byte from memory to registerstore byte sb $s1, 100($s2) Memory[$s2 + 100] = $s1 Byte from register to memoryload upper immediate lui $s1, 100 $s1 = 100 * 216 Loads constant in upper 16 bits

branch on equal beq $s1, $s2, 25 if ($s1 == $s2) go to PC + 4 + 100

Equal test; PC-relative branch

Conditional

branch on not equal bne $s1, $s2, 25 if ($s1 != $s2) go to PC + 4 + 100

Not equal test; PC-relative

branch set on less than slt $s1, $s2, $s3 if ($s2 < $s3) $s1 = 1; else $s1 = 0

Compare less than; for beq, bne

set less than immediate

slti $s1, $s2, 100 if ($s2 < 100) $s1 = 1; else $s1 = 0

Compare less than constant

jump j 2500 go to 10000 Jump to target address

Uncondi- jump register jr $ra go to $ra For switch, procedure return

tional jump jump and link jal 2500 $ra = PC + 4; go to 10000 For procedure call

24

Page 25: Computer Organization and Design Instruction Sets

MIPS Instruction Decoding RingMIPS Instruction Decoding Ring Top table summarizes Top table summarizes opcodesopcodes Bottom table summarizes Bottom table summarizes funcfunc field if opcode is field if opcode is

000000000000OP 000 001 010 011 100 101 110 111000 func j jal beq bne001 addi addi

uslti sltiu andi ori xori lui

010011100 lw101 sw110111func 000 001 010 011 100 101 110 111000 sll srl sra sllv srlv srav001 jr jalr010011 mult mult

udiv divu

100 add addu sub subu and or xor nor101 slt sltu110111

25

Page 26: Computer Organization and Design Instruction Sets

SummarySummary We will use a subset of MIPS instruction set in this We will use a subset of MIPS instruction set in this

classclass Sometimes called “miniMIPS”Sometimes called “miniMIPS” All instructions are 32-bitAll instructions are 32-bit 3 basic instruction formats3 basic instruction formats

R-type - Mostly 2 source and 1 destination registerR-type - Mostly 2 source and 1 destination register I-typeI-type - 1-source, a small (16-bit) constant, and a - 1-source, a small (16-bit) constant, and a

destination registerdestination register J-type - A large (26-bit) constant used for jumpsJ-type - A large (26-bit) constant used for jumps

Load/Store architectureLoad/Store architecture 31 general purpose registers, one hardwired to 0, and, by 31 general purpose registers, one hardwired to 0, and, by

convention, several are used for specific purposes.convention, several are used for specific purposes. ISA design requires tradeoffs, usually based on ISA design requires tradeoffs, usually based on

History, Art, EngineeringHistory, Art, Engineering Benchmark resultsBenchmark results

26