Presentation is loading. Please wait.

Presentation is loading. Please wait.

Instructor: Dr. Mike Turi Department of Computer Science and Computer Engineering Pacific Lutheran University Lecture slides adapted from Part 8, EE 334.

Similar presentations


Presentation on theme: "Instructor: Dr. Mike Turi Department of Computer Science and Computer Engineering Pacific Lutheran University Lecture slides adapted from Part 8, EE 334."— Presentation transcript:

1 Instructor: Dr. Mike Turi Department of Computer Science and Computer Engineering Pacific Lutheran University Lecture slides adapted from Part 8, EE 334 Dr. Valeriu Beiu (Washington State University) Spring 2005

2  Big idea: stored program  Consequences of stored program  MIPS instruction format for Add instructions  MIPS instruction format for Immediate, Data transfer instructions  MIPS instruction format for Jump instructions 2

3  Computers built on 2 key principles:  Instructions are represented as numbers  Thus, entire programs can be stored in memory to be read or written just like numbers (data)  Simplifies SW/HW of computer systems:  Memory technology for data also used for programs 3

4  Since all instructions and data are stored in memory as numbers, everything has a memory address:  Instruction words and data words ▪ Branches and jumps use instruction words  In C, pointers are just memory addresses: they can point to anything in memory  One register keeps address of instruction being executed: “Program Counter” (PC)  Basically a pointer to memory  Intel calls it Instruction Address Pointer, a better name 4

5  Programs are distributed in binary form  Programs bound to specific instruction set  Different versions for Macintosh and IBM PC  New machines want to run old programs (“binaries”) as well as programs compiled to new instructions  Leads to instruction set evolving over time  Selection of Intel 8086 in 1981 for 1 st IBM PC is major reason latest PCs still use 80x86 instruction set  Could still run programs from 1981 PC today 5

6  Currently all data we work with is in words (32-bit blocks):  Each register is a word  lw and sw both access memory one word at a time  So how do we represent instructions?  Remember: Computer only understands 1s and 0s, so “add $t0,$0,$0” is meaningless  MIPS wants simplicity: since data is in words, make instructions be words too 6

7  One word is 32 bits, so divide instruction word into “fields”  Each field tells computer something about instruction  We could define different fields for each instruction, but MIPS is based on simplicity, so define 3 basic types of instruction formats:  R-format  I-format  J-format 7

8  I-format: used for instructions with immediates, lw and sw (since the offset counts as an immediate), and the branches (beq and bne)  but not the shift instructions  J-format: used for j and jal  R-format: used for all other instructions 8

9  Define “fields” of the following number of bits each: 6 + 5 + 5 + 5 + 5 + 6 = 32 bits  Each field has a name:  Each field is viewed as a 5- or 6-bit unsigned integer (not as part of a 32-bit integer) 9 655556 opcodersrtrdshamtfunct

10  What do these field integer values tell us?  opcode (6 bits)  Partly specifies what instruction it is  Note: Equal to 0 for all R-Format instructions!  funct (6 bits)  Combined with opcode, this number exactly specifies the instruction 10

11  More fields: (each 5 bits)  rs (Source Register):  Generally used to specify register containing 1 st operand  rt (Target Register):  Generally used to specify register containing 2 nd operand  Note that name is misleading  rd (Destination Register):  Generally used to specify register which will receive result of computation 11

12  Final field:  shamt (5 bits)  This field contains the amount a shift instruction will shift by  This field is set to 0 in all but the shift instructions  For a detailed description of field usage for each instruction, see textbook 12

13  MIPS Instruction: add $8,$9,$10 opcode 0(look up in table) funct32(look up in table) rs 9(first operand) rt10(second operand) rd 8(destination) shamt 0(not a shift) 13

14  MIPS Instruction: add $8,$9,$10  Decimal field representation:  Binary field representation:  Hex representation: 0x012A 4020  Decimal representation: 19,546,144  Called a Machine Language Instruction 14 09108032 00000001001010100100000000100000

15  What about instructions with immediates?  5-bit field only represents numbers up to 31 ▪ Immediates may be much larger than this  Ideally, MIPS would have only one instruction format (for simplicity) ▪ Unfortunately, we need to compromise  Define new instruction format that is partially consistent with R-format:  First notice that, if instruction has immediate, then it uses at most 2 registers 15

16  Define “fields” of the following number of bits each: 6 + 5 + 5 + 16 = 32 bits  Each field has a name:  Key Concept: Only one field is inconsistent with R-format  Most importantly, opcode is still in same location 16 655 opcodersrtimmediate

17  What do these fields mean?  opcode (6 bits)  Same as before except that, since there is no funct field, opcode uniquely specifies an instruction in I-format  This also answers the question:  Q: Why R-format has two 6-bit fields to identify instruction instead of a single 12-bit field?  A: In order to be consistent with other formats 17

18  More fields: (each 5 bits)  rs: specifies the only register operand (if there is one)  rt: specifies register which will receive result of computation (this is why it’s called the target register “rt”) 18

19  The Immediate Field:  addi, slti, sltiu, the immediate is sign-extended to 32 bits  Thus, it’s treated as a signed integer  16 bits can be used to represent immediate up to 2 16 different values  This is large enough to handle the offset in a typical lw or sw, plus a vast majority of values that will be used in the slti instruction 19

20  MIPS Instruction: addi $21,$22,-50 opcode 8(look up in table) rs 22(register containing operand) rt 21(target register) immediate-50(by default, this is decimal) 20

21  MIPS Instruction: add $21,$22,-50  Decimal field representation:  Binary field representation:  Hex representation: 0x22D5 FFCE  Decimal representation: 584,449,998 21 82221-50 00100010110101011111111111001110

22  Chances are that addi, lw, sw and slti will use immediates small enough to fit in the immediate field  What if too big?  We need a way to deal with a 32-bit immediate in any I-format instruction  Solution:  Handle it in software + new instruction  Don’t change the current instructions; instead, add a new instruction 22

23  lui register, immediate  Stands for Load Upper Immediate  Takes 16-bit immediate and puts these bits in the upper half (higher order half) of the specified register  Sets lower half to 0s  Example:addi $t0,$t0, 0xABABCDCD becomes:lui $at, 0xABAB ori $at, $at, 0xCDCD add $t0, $t0, $at  Now each I-format instruction has only a 16-bit immediate 23

24  Which instruction has same representation as decimal 35?  A. add $0, $0, $0  B. subu $s0,$s0,$s0  C. lw $0, 0($0)  D. addi $0, $0, 35  E. subu $0, $0, $0  F. Instructions are not numbers  Registers numbers and names:  0=$0, … 8=$t0, 9=$t1, … 15=$t7, 16=$s0, 17=$s1, … 23=$s7  Opcodes and function fields (if necessary)  add:opcode = 0,funct = 32  subu:opcode = 0,funct = 35  addi:opcode = 8  lw:opcode = 35 24

25  Simplifying MIPS: Define instructions to be same size as data word (one word) so that they can use the same memory (compiler can use lw and sw)  Machine Language Instruction: 32 bits representing a single instruction  Computer actually stores programs as a series of these 32-bit numbers 25 opcodersrtrdshamtfunct opcodersrtimmediate RIRI

26  Use I-Format  opcode specifies beq v. bne  rs and rt specify registers to compare  What can immediate specify?  Immediate is only 16 bits  PC is 32-bit pointer to memory  So immediate cannot specify entire address to branch to 26 opcodersrtimmediate

27  How do we usually use branches?  Answer: if-else, while, for  Loops are generally small: typically up to 50 instructions  Function calls and unconditional jumps are done using jump instructions (j and jal), not the branches  Though we may want to branch to anywhere in memory, a single branch will generally change the PC by a very small amount 27

28  Solution: PC-Relative Addressing  Let the 16-bit immediate field be a signed two’s complement integer to be added to the PC if we take the branch  Now we can branch +/- 2 15 bytes from the PC, which should be enough to cover any loop  Any ideas to further optimize this? 28

29  Note: Instructions are words, so they’re word aligned (byte address is always a multiple of 4, which means it ends with 00 in binary)  So, the number of bytes to add to the PC will always be a multiple of 4  So, specify the immediate in words  Now, we can branch +/- 2 15 words from the PC (or +/- 2 17 bytes), so we can handle loops 4 times as large 29

30  Branch Calculation:  If we don’t take the branch:PC = PC + 4 ▪ PC+4 = byte address of next instruction  If we do take the branch:PC = (PC + 4) + (immediate*4)  Observations  Immediate field specifies the number of words to jump, which is simply the number of instructions to jump  Immediate field can be positive or negative  Due to hardware, add immediate to (PC+4), not to PC ▪ We’ll examine this later 30

31  MIPS Code: Loop: beq $9,$0,End add $8,$8,$10 addi $9,$9,-1 j Loop End:  Branch is I-Format opcode 4(look up in table) rs9(first operand) rt0(second operand) immediate??? 31

32  MIPS Code: Loop: beq $9,$0,End add $8,$8,$10 addi $9,$9,-1 j Loop End:  Immediate Field:  Number of instructions to add to (or subtract from) the PC, starting at the instruction following the branch  In this case, immediate = 3 32

33  MIPS Code: Loop: beq $9,$0,End add $8,$8,$10 addi $9,$9,-1 j Loop End:  Decimal representation:  Binary representation: 33 4903 00010001001000000000000000000011

34  Does the value in branch field change if we move the code?  What do we do if its > 2 15 instructions?  Since its limited to +/- 2 15 instructions, doesn’t this generate lots of extra MIPS instructions?  Why do we need all these addressing modes?  Why not just one? 34

35  For branches, we assumed that we won’t want to branch too far, so we can specify only the change in PC  For general jumps (j and jal), we may jump to anywhere in memory  Ideally, we could specify a 32-bit memory address to jump to  Unfortunately, we can’t fit both a 6-bit opcode and a 32-bit address into a single 32-bit word, so we compromise 35

36  Define “fields” of the following number of bits each:  Each field has a name:  Key Concepts  Keep opcode field identical to R-format and I-format for consistency  Combine all other fields to make room for large target address 36 626 opcodetarget address

37  For now, we can specify 26 bits of the 32-bit address  Optimization:  Note that, just like with branches, jumps will only jump to word aligned addresses, so last two bits are always 00 (in binary)  So let’s just take this for granted and not even specify them  So, we can specify 28 bits of the 32-bit address 37

38  Where do we get the other 4 bits?  By definition, take the 4 highest order bits from the PC  Technically, this means that we cannot jump to anywhere in memory, but it’s adequate 99.9999…% of the time, since programs aren’t that long  If we absolutely need to specify a 32-bit address, we can always put it in a register and use the jr instruction 38

39  Summary:  New PC = PC[31..28] + target address + 00 4 bits + 26 bits + 00  Note: + means concatenation 39

40  Machine Language Instruction  32 bits representing a single instruction  Branches use PC-relative addressing  Jumps use absolute addressing 40 opcodersrtrdshamtfunct opcodersrtimmediate RIJRIJ opcodetarget address


Download ppt "Instructor: Dr. Mike Turi Department of Computer Science and Computer Engineering Pacific Lutheran University Lecture slides adapted from Part 8, EE 334."

Similar presentations


Ads by Google