CS61C - Machine Structures Lecture 5 - Decisions in C/Assembly LanguageReview (1/2)Review (2/2)OverviewSo Far...C Decisions: if StatementsMIPS Decision InstructionsMIPS Goto InstructionCompiling C if into MIPS (1/2)Compiling C if into MIPS (2/2)Loops in C/Assembly (1/3)Loops in C/Assembly (2/3)Administrivia“What’s This Stuff Good For?”Loops in C/Assembly (3/3)Inequalities in MIPS (1/4)Inequalities in MIPS (2/4)Inequalities in MIPS (3/4)Inequalities in MIPS (4/4)Immediates in InequalitiesWhat about unsigned numbers?Example: The C Switch Statement (1/3)Example: The C Switch Statement (2/3)Example: The C Switch Statement (3/3)Things to Remember (1/2)Things to Remember (2/2)cs61c L5 Decisions 9/13/001CS61C - Machine StructuresLecture 5 - Decisions in C/Assembly Language September 13, 2000David Pattersonhttp://www-inst.eecs.berkeley.edu/~cs61c/cs61c L5 Decisions 9/13/002Review (1/2)°In MIPS Assembly Language:•Registers replace C variables•One Instruction (simple operation) per line•Simpler is Better•Smaller is Faster°Memory is byte-addressable, but lw and sw access one word at a time.°A pointer (used by lw and sw) is just a memory address, so we can add to it or subtract from it (using offset).cs61c L5 Decisions 9/13/003Review (2/2)°New Instructions:add, addi, sub, lw, sw°New Registers:C Variables: $s0 - $s7Temporary Variables: $t0 - $t9Zero: $zerocs61c L5 Decisions 9/13/004Overview°C/Assembly Decisions: if, if-else°C/Assembly Loops: while, do while, for°Inequalities°C Switch Statementcs61c L5 Decisions 9/13/005So Far...°All instructions have allowed us to manipulate data.°So we’ve built a calculator.°In order to build a computer, we need ability to make decisions…°Heads up: pull out some papers and pens, you’ll do some in-class exercises today!cs61c L5 Decisions 9/13/006C Decisions: if Statements°2 kinds of if statements in C•if (condition) clause•if (condition) clause1 else clause2°Rearrange 2nd if into following:if (condition) goto L1; clause2; go to L2;L1: clause1; L2:•Not as elegant as if-else, but same meaningcs61c L5 Decisions 9/13/007MIPS Decision Instructions°Decision instruction in MIPS:•beq register1, register2, L1•beq is “Branch if (registers are) equal” Same meaning as (using C): if (register1==register2) goto L1°Complementary MIPS decision instruction•bne register1, register2, L1•bne is “Branch if (registers are) not equal” Same meaning as (using C): if (register1!=register2) goto L1°Called conditional branchescs61c L5 Decisions 9/13/008MIPS Goto Instruction°In addition to conditional branches, MIPS has an unconditional branch:j label°Called a Jump Instruction: jump (or branch) directly to the given label without needing to satisfy any condition°Same meaning as (using C): goto label°Technically, it’s the same as:beq $0,$0,labelsince it always satisfies the condition.cs61c L5 Decisions 9/13/009Compiling C if into MIPS (1/2)°Compile by handif (i == j) f=g+h; else f=g-h;°Use this mapping: f: $s0, g: $s1, h: $s2, i: $s3, j: $s4Exiti == j?f=g+h f=g-h(false) i != j(true) i == jcs61c L5 Decisions 9/13/0010Compiling C if into MIPS (2/2)°Final compiled MIPS code(fill in the blank):Exiti == j?f=g+h f=g-h(false) i != j(true) i == jcs61c L5 Decisions 9/13/0012Loops in C/Assembly (1/3)°Simple loop in Cdo { g = g + A[i]; i = i + j; } while (i != h);°Rewrite this as:Loop: g = g + A[i];i = i + j;if (i != h) goto Loop;°Use this mapping:g: $s1, h: $s2, i: $s3, j: $s4, base of A:$s5cs61c L5 Decisions 9/13/0013Loops in C/Assembly (2/3)°Final compiled MIPS code (fill in the blank):cs61c L5 Decisions 9/13/0015Administrivia°Kurt Meinz and Steve Tu heroically volunteer to add to their worloads, save Tu/Th 5-6 sectioncs61c L5 Decisions 9/13/0016“What’s This Stuff Good For?”Breathing Observation Bubble: BOB pipes air from a tank under the handlebars into an acrylic dome, replacing a diver's face mask and breathing apparatus. Wireless technology lets riders talk to other BOBsters darting through the water nearby, as well as to armchair divers above in a boat or back on shore. Saving energy from not having to kick, divers can stay submerged almost an hour with the BOB. Like most modern scuba gear, the BOB features a computer that tells riders when to come up and calculates decompression times for a safe return to the surface.One Digital Day, 1998www.intel.com/onedigitaldayWhat do applications (“apps”) like these mean for reliability requirements of our technology?cs61c L5 Decisions 9/13/0017Loops in C/Assembly (3/3)°There are three types of loops in C:•while•do… while•for°Each can be rewritten as either of the other two, so the method used in the previous example can be applied to while and for loops as well.°Key Concept: Though there are multiple ways of writing a loop in MIPS, conditional branch is key to decision makingcs61c L5 Decisions 9/13/0018Inequalities in MIPS (1/4)°Until now, we’ve only tested equalities (== and != in C). General programs need to test < and > as well.°Create a MIPS Inequality Instruction:•“Set on Less Than”•Syntax: slt reg1,reg2,reg3•Meaning:if (reg2 < reg3) reg1 = 1; else reg1 = 0; •In computereeze, “set” means “set to 1”, “reset” means “set to 0”.cs61c L5 Decisions 9/13/0019Inequalities in MIPS (2/4)°How do we use this?°Compile by hand:if (g < h) goto Less;°Use this mapping:g: $s0, h: $s1cs61c L5 Decisions 9/13/0020Inequalities in MIPS (3/4)°Final compiled MIPS code (fill in the blank):cs61c L5 Decisions 9/13/0022Inequalities in MIPS (4/4)°Now, we can implement <, but how do we implement >, <= and >= ?°We could add 3 more instructions, but:•MIPS goal: Simpler is Better°Can we implement <= in one or more instructions using just slt and the branches?°What about >?°What about >=?cs61c L5 Decisions 9/13/0023Immediates in Inequalities°There is also an immediate version of slt to test against constants: slti•Helpful in for loopsif (g >= 1) goto LoopCMIPScs61c L5 Decisions 9/13/0025What about unsigned numbers?°there are unsigned inequality instructions:sltu, sltiu°which set result to 1 or 0 depending on unsigned comparisons°$s0 = FFFF FFFAhex, $ s1 = 0000 FFFAhex °What is value of $t0, $t1?°slt $t0, $s0, $s1°sltu $t1, $s0, $s1cs61c L5 Decisions 9/13/0026Example: The C Switch Statement (1/3)°Choose among four alternatives depending on whether k has the value 0, 1, 2 or 3. Compile this C code:switch (k)
View Full Document