# 编程代考 COMP-273 – cscodehelp代写

Slides From Patterson’s 61C 1
Decisions in C/Assembly Language

Review (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).
Slides From Patterson’s 61C 2

Review (2/2)
C Variables: \$s0 – \$s7
Temporary Variables: \$t0 – \$t9 Zero: \$zero
Slides From Patterson’s 61C 3

° C/Assembly Decisions: if, if-else ° C/Assembly Loops: while, do while,
° Inequalities
°C Switch Statement
Slides From Patterson’s 61C 4

°All instructions have allowed us to manipulate data.
°So we’ve built a calculator.
°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!
Slides From Patterson’s 61C 5

C 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;
• Not as elegant as if-else, but same meaning
Slides From Patterson’s 61C 6

MIPS 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 branches COMP-273
Slides From Patterson’s 61C 7

MIPS Goto Instruction
°In addition to conditional branches, MIPS has an unconditional branch:
°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,label
since it always satisfies the condition.
Slides From Patterson’s 61C 8

Compiling C if into MIPS (1/2)
°Compile by hand
if (i == j) f=g+h;
else f=g-h;
°Use this mapping:
f: \$s0, g: \$s1, h: \$s2, i: \$s3, j: \$s4
(true) i == j
(false) i != j
Slides From Patterson’s 61C 9

Compiling C if into MIPS (2/2) (true)
°Final compiled MIPS code (fill in the blank):
(false) i != j
Slides From Patterson’s 61C 10

Compiling C if into MIPS (2/2) (true)
°Final compiled MIPS code:
(false) i != j
beq \$s3,\$s4,True # branch i==j sub \$s0,\$s1,\$s2 # f=g-h(false) j Fin #gotoFin
True: add \$s0,\$s1,\$s2 # f=g+h (true) Fin:
Note: Compiler automatically creates labels to handle decisions (branches) appropriately. generally not found in HLL code.
Slides From Patterson’s 61C 11

Loops in C/Assembly (1/3)
°Simple loop in C
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:\$s5
Slides From Patterson’s 61C 12

Loops in C/Assembly (2/3)
°Final compiled MIPS code (fill in the blank):
Slides From Patterson’s 61C 13

Loops in C/Assembly (2/3)
°Final compiled MIPS code:
bne \$s3,\$s2,Loop# goto Loop # if i!=h
Slides From Patterson’s 61C 14

Loops 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 making
Slides From Patterson’s 61C 15

Inequalities in MIPS (1/5)
°Until now, we’ve only tested equalities (==and!=inC). Generalprogramsneed to test < and > as well.
°Create a MIPS Inequality Instruction: • “Set on Less Than”
•Syntax:slt reg1,reg2,reg3
• Meaning:
if (reg2 < reg3) else reg1 = 0; • In computereeze, “set” means “set to 1”, “reset” means “set to 0”. Slides From Patterson’s 61C 16 Inequalities in MIPS (2/5) °How do we use this? °Compile by hand: if (g < h) goto Less; °Use this mapping: g: \$s0, h: \$s1 Slides From Patterson’s 61C 17 Inequalities in MIPS (3/5) °Final compiled MIPS code (fill in the blank): Slides From Patterson’s 61C 18 Inequalities in MIPS (3/5) °Final compiled MIPS code: slt \$t0,\$s0,\$s1 # \$t0 = 1 if g, <= 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 >?
°4 combinations of slt & beq/bneq
Slides From Patterson’s 61C 20

Inequalities in MIPS (5/5)
°4 combinations of slt & beq/bneq:
slt \$t0,\$s0,\$s1 # \$t0 = 1 if gh
bne \$t0,\$0,Grtr # if(g>h) goto Grtr slt \$t0,\$s0,\$s1 # \$t0 = 1 if g=h) goto Gteq slt \$t0,\$s1,\$s0 # \$t0 = 1 if g>h
beq \$t0,\$0,Lteq # if(g<=h) goto Lteq Slides From Patterson’s 61C 21 Immediates in Inequalities °There is also an immediate version of slt to test against constants: slti • Helpful in for loops if (g >= 1) goto Loop
Slides From Patterson’s 61C 22

Immediates in Inequalities
°There is also an immediate version of slt to test against constants: slti
if (g >= 1) goto Loop
Loop: . . . M
slti \$t0,\$s0,1
# \$t0 = 1 if
# \$s0<1 (g<1) beq \$t0,\$0,Loop # goto Loop # if \$t0==0 # (if (g>=1))
Slides From Patterson’s 61C 23

°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, \$s1
Slides From Patterson’s 61C 24

Example: 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) {
case 0: f=i+j; break; /* k=0*/ case 1: f=g+h; break; /* k=1*/ case 2: f=g–h; break; /* k=2*/ case 3: f=i–j; break; /* k=3*/ }
Slides From Patterson’s 61C 25

Example: The C Switch Statement (2/3)
°This is complicated, so simplify.
°Rewrite it as a chain of if-else statements, which we already know how to compile:
if(k==0) f=i+j;
else if(k==1) f=g+h;
else if(k==2) f=g–h;
else if(k==3) f=i–j;
°Use this mapping:
f: \$s0, g: \$s1, h: \$s2, i: \$s3, j: \$s4, k: \$s5
Slides From Patterson’s 61C 26

Example: The C Switch Statement (3/3)
°Final compiled MIPS code (fill in the blank):
Slides From Patterson’s 61C 27

Example: The C Switch Statement (3/3)
°Final compiled MIPS code:
bne \$s5,\$0,L1 # branch k!=0 add \$s0,\$s3,\$s4 #k==0 so f=i+j j Exit # end of case so Exit
bne \$t0,\$0,L2 # branch k!=1
add \$s0,\$s1,\$s2 #k==1 so f=g+h j Exit # end of case so Exit
bne \$t0,\$0,L3 # branch k!=2 sub \$s0,\$s1,\$s2 #k==2 so f=g-h
j Exit # end of case so Exit
bne \$t0,\$0,Exit # branch k!=3
sub \$s0,\$s3,\$s4 #k==3 so f=i-j Exit:
Slides From Patterson’s 61C 28

Things to Remember (1/2)
° A Decision allows us to decide which pieces of code to execute at run-time rather than at compile-time.
°C Decisions are made using conditional statements within an if, while, do while or for.
°MIPS Decision making instructions are the conditional branches: beq and bne.
°To help the conditional branches make decisions concerning inequalities, we introduce a single instruction: “Set on Less Than”called slt, slti, sltu, sltiu
Slides From Patterson’s 61C 29

Things to Remember (2/2)
° : beq, bne
slt, slti, sltu, sltiu
Slides From Patterson’s 61C 30

Posted in Uncategorized