CS61C - Machine Structures Lecture 4 - C/Assembler Arithmetic and Memory AccessOverviewReview C Operators/Operands (1/2)C Operators/Operands (1/2)Assembly Design: Key ConceptsAssembly Variables: Registers (1/4)Assembly Variables: Registers (2/4)Assembly Variables: Registers (3/4)Assembly Variables: Registers (4/4)Comments in AssemblyAssembly InstructionsAddition and Subtraction (1/4)Addition and Subtraction (2/4)Addition and Subtraction (3/4)Addition and Subtraction (4/4)AdministriviaImmediatesSlide 18Register ZeroAssembly Operands: MemoryData 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 Memory (1/2)Data Transfer: Reg to Memory (2/2)Pointers v. ValuesAddressing: Byte vs. wordCompilation with MemoryNotes about MemoryMore Notes about Memory: AlignmentRole of Registers vs. Memory“And in Conclusion…” (1/2)“And in Conclusion…”(2/2)cs61c L4 9/7/001CS61C - Machine StructuresLecture 4 - C/Assembler Arithmetic andMemory AccessSeptember 8, 2000David Pattersonhttp://www-inst.eecs.berkeley.edu/~cs61c/cs61c L4 9/7/002Overview°C operators, operands°Variables in Assembly: Registers°Comments in Assembly°Addition and Subtraction in Assembly°Memory Access in Assemblycs61c L4 9/7/003Review C Operators/Operands (1/2)°Operators: +, -, *, /, % (mod); •7/4==1, 7%4==3°Operands: •Variables: lower, upper, fahr, celsius•Constants: 0, 1000, -17, 15.4°Assignment Statement:Variable = expression•Examples:celsius = 5*(fahr-32)/9;a = b+c+d-e;cs61c L4 9/7/004C Operators/Operands (1/2)°In C (and most High Level Languages) variables declared first and given a type•Example: int fahr, celsius; char a, b, c, d, e;°Each variable can ONLY represent a value of the type it was declared as (cannot mix and match int and char variables).cs61c L4 9/7/005Assembly Design: Key Concepts°Keep it simple!•Limit what can be a variable and what can’t•Limit types of operations that can be done to absolute minimum -if an operation can be decomposed into a simpler operation, don’t include itcs61c L4 9/7/006Assembly Variables: Registers (1/4)°Unlike HLL, assembly cannot use variables•Why not? Keep Hardware Simple°Assembly Operands are registers•limited number of special locations built directly into the hardware•operations can only be performed on these!°Benefit: Since registers are directly in hardware, they are very fastcs61c L4 9/7/007Assembly Variables: Registers (2/4)°Drawback: Since registers are in hardware, there are a predetermined number of them•Solution: MIPS code must be very carefully put together to efficiently use registers°32 registers in MIPS•Why 32? Smaller is faster°Each MIPS register is 32 bits wide•Groups of 32 bits called a word in MIPScs61c L4 9/7/008Assembly Variables: Registers (3/4)°Registers are numbered from 0 to 31°Each register can be referred to by number or name°Number references:$0, $1, $2, … $30, $31cs61c L4 9/7/009Assembly Variables: Registers (4/4)°By convention, each register also has a name to make it easier to code°For now:$16 - $22 $s0 - $s7(correspond to C variables)$8 - $15 $t0 - $t7(correspond to temporary variables)°In general, use names to make your code more readablecs61c L4 9/7/0010Comments in Assembly°Another way to make your code more readable: comments!°Hash (#) is used for MIPS comments•anything from hash mark to end of line is a comment and will be ignored°Note: Different from C.•C comments have format /* comment */ , so they can span many linescs61c L4 9/7/0011Assembly Instructions°In assembly language, each statement (called an Instruction), executes exactly one of a short list of simple commands°Unlike in C (and most other High Level Languages), each line of assembly code contains at most 1 instructioncs61c L4 9/7/0012Addition and Subtraction (1/4)°Syntax of Instructions:1 2,3,4where:1) operation by name 2) operand getting result (“destination”)3) 1st operand for operation (“source1”)4) 2nd operand for operation (“source2”)°Syntax is rigid:•1 operator, 3 operands•Why? Keep Hardware simple via regularitycs61c L4 9/7/0013Addition and Subtraction (2/4)°Addition in Assembly•Example: add $s0,$s1,$s2 (in MIPS)Equivalent to: a = b + c (in C)where registers $s0,$s1,$s2 are associated with variables a, b, c °Subtraction in Assembly•Example: sub $s3,$s4,$s5 (in MIPS)Equivalent to: d = e - f (in C)where registers $s3,$s4,$s5 are associated with variables d, e, fcs61c L4 9/7/0014Addition and Subtraction (3/4)°How do the following C statement? a = b + c + d - e;°Break into multiple instructionsadd $s0, $s1, $s2 # a = b + cadd $s0, $s0, $s3 # a = a + dsub $s0, $s0, $s4 # a = a - e°Notice: A single line of C may break up into several lines of MIPS.°Notice: Everything after the hash mark on each line is ignored (comments)cs61c L4 9/7/0015Addition and Subtraction (4/4)°How do we do this?•f = (g + h) - (i + j);°Use intermediate temporary registeradd $s0,$s1,$s2 # f = g + hadd $t0,$s3,$s4 # t0 = i + j# need to save i+j, but can’t use # f, so use t0sub $s0,$s0,$t0 # f=(g+h)-(i+j)cs61c L4 9/7/0016Administrivia°Project 1 due Midnight°Lab 3: Your first MIPS program!°HW 2 (due Mon 9/11) and HW3 (9/18) online and available°Reading assignment:•P&H 3.1-3.3, 3.5, 3.8 (page 145)cs61c L4 9/7/0017Immediates°Immediates are numerical constants.°They appear often in code, so there are special instructions for them.°Add Immediate:addi $s0,$s1,10 (in MIPS)f = g + 10 (in C)where registers $s0,$s1 are associated with variables f, g °Syntax similar to add instruction, except that last argument is a number instead of a register.cs61c L4 9/7/0018Immediates°There is no Subtract Immediate in MIPS: Why?°Limit types of operations that can be done to absolute minimum •if an operation can be decomposed into a simpler operation, don’t include itaddi $s0,$s1,-10 (in MIPS)f = g - 10 (in C)where registers $s0,$s1 are associated with variables f, g °addi …, -X = subi …, X => so no subics61c L4 9/7/0019Register Zero°One particular immediate, the number zero (0), appears very often in code.°So we define register zero ($0 or $zero) to always have the value 0; egadd $s0,$s1,$zero (in MIPS)f = g (in C)where registers $s0,$s1 are associated with variables f, g°defined in hardware, so an instruction addi $0,$0,5will not do anything!cs61c L4 9/7/0020Assembly Operands: Memory°C variables map
View Full Document