Videophilia?ReviewAssembly Operands: MemoryAnatomy: 5 components of any ComputerData Transfer: Memory to Reg (1/4)Data Transfer: Memory to Reg (2/4)Data Transfer: Memory to Reg (3/4)Data Transfer: Memory to Reg (4/4)Data Transfer: Reg to MemoryPointers v. ValuesAddressing: Byte vs. WordCompilation with MemoryNotes about MemoryMore Notes about Memory: AlignmentRole of Registers vs. MemoryAdministriviaSo Far...C Decisions: if StatementsMIPS Decision InstructionsMIPS Goto InstructionCompiling C if into MIPS (1/2)Compiling C if into MIPS (2/2)Peer Instruction“And in Conclusion…”inst.eecs.berkeley.edu/~cs61c UCB CS61C : Machine Structures Lecture 9 – Introduction to MIPS Data Transfer & Decisions I 2008-02-11Study finds more and more people prefer to stay indoors with computers & TVs. This has been termed “videophilia”, and has been shown to be a cause for “obesity, lack of socialization, attention disorders and poor academic performance”. Take a walk, folks! Lecturer SOE Dan Garciawww.sfgate.com/cgi-bin/article.cgi?f=/c/a/2008/02/10/MNHUURU6R.DTLCS61C L09 Introduction to MIPS : Data Transfer and Decisions (2)Garcia, Spring 2008 © UCBReviewIn MIPS Assembly Language:Registers replace variablesOne Instruction (simple operation) per lineSimpler is Better, Smaller is FasterNew Instructions:add, addi, subNew Registers:C Variables: $s0 - $s7Temporary Variables: $t0 - $t7Zero: $zeroCS61C L09 Introduction to MIPS : Data Transfer and Decisions (3)Garcia, Spring 2008 © UCBAssembly Operands: MemoryC variables map onto registers; what about large data structures like arrays?1 of 5 components of a computer: memory contains such data structuresBut MIPS arithmetic instructions only operate on registers, never directly on memory.Data transfer instructions transfer data between registers and memory:Memory to register Register to memoryCS61C L09 Introduction to MIPS : Data Transfer and Decisions (4)Garcia, Spring 2008 © UCBAnatomy: 5 components of any Computer Processor ComputerControl(“brain”)DatapathRegistersMemoryDevicesInputOutputLoad (from)Load (from)Store (to)Store (to)These are “data transfer” instructions…Registers are in the datapath of the processor; if operands are in memory, we must transfer them to the processor to operate on them, and then transfer back to memory when done.CS61C L09 Introduction to MIPS : Data Transfer and Decisions (5)Garcia, Spring 2008 © UCBData Transfer: Memory to Reg (1/4)To transfer a word of data,we need to specify two things:Register: specify this by # ($0 - $31) or symbolic name ($s0,…,$t0,…)Memory address: more difficultThink of memory as a single one-dimensional array, so we can address it simply by supplying a pointer to a memory address.Other times, we want to be able to offset from this pointer.Remember: “Load FROM memory”CS61C L09 Introduction to MIPS : Data Transfer and Decisions (6)Garcia, Spring 2008 © UCBData Transfer: Memory to Reg (2/4)To specify a memory address to copy from, specify two things:A register containing a pointer to memoryA numerical offset (in bytes)The desired memory address is the sum of these two values.Example: 8($t0)specifies the memory address pointed to by the value in $t0, plus 8 bytesCS61C L09 Introduction to MIPS : Data Transfer and Decisions (7)Garcia, Spring 2008 © UCBData Transfer: Memory to Reg (3/4)Load Instruction Syntax:1 2,3(4)where1) operation name2) register that will receive value3) numerical offset in bytes4) register containing pointer to memoryMIPS Instruction Name:lw (meaning Load Word, so 32 bits or one word are loaded at a time)CS61C L09 Introduction to MIPS : Data Transfer and Decisions (8)Garcia, Spring 2008 © UCBData Transfer: Memory to Reg (4/4)Example: lw $t0,12($s0)This instruction will take the pointer in $s0, add 12 bytes to it, and then load the value from the memory pointed to by this calculated sum into register $t0Notes: $s0 is called the base register 12 is called the offsetoffset is generally used in accessing elements of array or structure: base reg points to beginning of array or structure (note offset must be a constant known at assembly time)Data flowCS61C L09 Introduction to MIPS : Data Transfer and Decisions (9)Garcia, Spring 2008 © UCBData Transfer: Reg to MemoryAlso want to store from register into memoryStore instruction syntax is identical to Load’sMIPS Instruction Name:sw (meaning Store Word, so 32 bits or one word is stored at a time)Example: sw $t0,12($s0)This instruction will take the pointer in $s0, add 12 bytes to it, and then store the value from register $t0 into that memory addressRemember: “Store INTO memory”Data flowCS61C L09 Introduction to MIPS : Data Transfer and Decisions (10)Garcia, Spring 2008 © UCBPointers v. ValuesKey Concept: A register can hold any 32-bit value. That value can be a (signed) int, an unsigned int, a pointer (memory addr), and so onE.g., If you write: add $t2,$t1,$t0then $t0 and $t1 better contain values that can be addedE.g., If you write: lw $t2,0($t0)then $t0 better contain a pointerDon’t mix these up!CS61C L09 Introduction to MIPS : Data Transfer and Decisions (11)Garcia, Spring 2008 © UCBAddressing: Byte vs. WordEvery word in memory has an address, similar to an index in an arrayEarly computers numbered words like C numbers elements of an array:Memory[0], Memory[1], Memory[2], …•Computers needed to access 8-bit bytes as well as words (4 bytes/word)•Today machines address memory as bytes, (i.e., “Byte Addressed”) hence 32-bit (4 byte) word addresses differ by 4•Memory[0], Memory[4], Memory[8]Called the “address” of a wordCS61C L09 Introduction to MIPS : Data Transfer and Decisions (12)Garcia, Spring 2008 © UCBCompilation with MemoryWhat offset in lw to select A[5] in C? 4x5=20 to select A[5]: byte v. word Compile by hand using registers:g = h + A[5]; g: $s1, h: $s2, $s3: base address of A 1st transfer from memory to register:lw $t0,20($s3) # $t0 gets A[5]Add 20 to $s3 to select A[5], put into $t0Next add it to h and place in gadd $s1,$s2,$t0 # $s1 = h+A[5]CS61C L09 Introduction to MIPS : Data Transfer and Decisions (13)Garcia, Spring 2008 © UCBNotes about MemoryPitfall: Forgetting that sequential word addresses in machines with byte addressing do not differ by 1. Many an assembly language programmer has toiled over
View Full Document