PowerPoint PresentationReviewClarification to Friday’s lecture/PRSAssembly 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…”CS 61C L09 Introduction to MIPS: Data Transfer & Decisions I (1)Garcia, Fall 2004 © UCBLecturer PSOE Dan Garciawww.cs.berkeley.edu/~ddgarciainst.eecs.berkeley.edu/~cs61c CS61C : Machine Structures Lecture 9 – Introduction to MIPS Data Transfer & Decisions I 2004-09-20Barry…700!Barry Bondshits #s 700 & 701 over the weekend. The wait is over, next stop 715 (next Apr?)http://sports.espn.go.com/mlb/news/story?id=1883862CS 61C L09 Introduction to MIPS: Data Transfer & Decisions I (2)Garcia, Fall 2004 © UCBReview•In MIPS Assembly Language:•Registers replace C variables•One Instruction (simple operation) per line•Simpler is Better, Smaller is Faster•New Instructions:add, addi, sub•New Registers:C Variables: $s0 - $s7Temporary Variables: $t0 - $t7Zero: $zeroCS 61C L09 Introduction to MIPS: Data Transfer & Decisions I (3)Garcia, Fall 2004 © UCBClarification to Friday’s lecture/PRS•I said several times:“There are no types in MIPS”•What I should have said is: “There are no types associated with variables – the types are associated with the instructions”. Said another way:•“In Assembly Language, the registers have no type; the operation determines how register contents are treated”CS 61C L09 Introduction to MIPS: Data Transfer & Decisions I (4)Garcia, Fall 2004 © UCBAssembly Operands: Memory•C variables map onto registers; what about large data structures like arrays?•1 of 5 components of a computer: memory contains such data structures•But 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 memoryCS 61C L09 Introduction to MIPS: Data Transfer & Decisions I (5)Garcia, Fall 2004 © UCBAnatomy: 5 components of any ComputerPersonal Computer Processor ComputerControl(“brain”)DatapathRegistersMemory DevicesInputOutputLoad (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.CS 61C L09 Introduction to MIPS: Data Transfer & Decisions I (6)Garcia, Fall 2004 © 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 difficult-Think 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”CS 61C L09 Introduction to MIPS: Data Transfer & Decisions I (7)Garcia, Fall 2004 © UCBData Transfer: Memory to Reg (2/4)•To specify a memory address to copy from, specify two things:•A register containing a pointer to memory•A 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 bytesCS 61C L09 Introduction to MIPS: Data Transfer & Decisions I (8)Garcia, Fall 2004 © 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 memory•MIPS Instruction Name:•lw (meaning Load Word, so 32 bits or one word are loaded at a time)CS 61C L09 Introduction to MIPS: Data Transfer & Decisions I (9)Garcia, Fall 2004 © 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 $t0•Notes:•$s0 is called the base register•12 is called the offset•offset is generally used in accessing elements of array or structure: base reg points to beginning of array or structureData flowCS 61C L09 Introduction to MIPS: Data Transfer & Decisions I (10)Garcia, Fall 2004 © UCBData Transfer: Reg to Memory•Also want to store from register into memory•Store instruction syntax is identical to Load’s•MIPS Instruction Name:sw (meaning Store Word, so 32 bits or one word are loaded 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 address•Remember: “Store INTO memory”Data flowCS 61C L09 Introduction to MIPS: Data Transfer & Decisions I (11)Garcia, Fall 2004 © UCBPointers v. Values•Key Concept: A register can hold any 32-bit value. That value can be a (signed) int, an unsigned int, a pointer (memory address), and so on•If you write add $t2,$t1,$t0 then $t0 and $t1 better contain values•If you write lw $t2,0($t0) then $t0 better contain a pointer•Don’t mix these up!CS 61C L09 Introduction to MIPS: Data Transfer & Decisions I (12)Garcia, Fall 2004 © UCBAddressing: Byte vs. word•Every word in memory has an address, similar to an index in an array•Early computers numbered words like C numbers elements of an array:•Memory[0], Memory[1], Memory[2], …Called the “address” of a word•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], …CS 61C L09 Introduction to MIPS: Data Transfer & Decisions I (13)Garcia, Fall 2004 © UCBCompilation with Memory•What 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
View Full Document