CS61C Constants and Making Decisions in C/Assembly Language. Lecture 3. January 27, 1999 Dave Patterson (http.cs.berkeley.

Similar documents
Review 1/2 Big idea in CS&E; compilation to translate from one level of abstraction to lower level

CS61C : Machine Structures

CS61C Machine Structures. Lecture 10 - MIPS Branch Instructions II. 2/8/2006 John Wawrzynek. (

Review. Lecture #7 MIPS Decisions So Far...

CS61C : Machine Structures

CMPE324 Computer Architecture Lecture 2

Levels of Programming. Registers

UCB CS61C : Machine Structures

UCB CS61C : Machine Structures

UCB CS61C : Machine Structures

CS61C C/Assembler Operators and Operands Lecture 2 January 22, 1999 Dave Patterson (http.cs.berkeley.edu/~patterson)

Reduced Instruction Set Computer (RISC)

Reduced Instruction Set Computer (RISC)

CS 110 Computer Architecture Lecture 6: More MIPS, MIPS Functions

CS 430 Computer Architecture. C/Assembler Arithmetic and Memory Access William J. Taffe. David Patterson

Numbers: positional notation. CS61C Machine Structures. Faux Midterm Review Jaein Jeong Cheng Tien Ee. www-inst.eecs.berkeley.

Chapter 2. Instructions:

CS 61C: Great Ideas in Computer Architecture Introduction to Assembly Language and MIPS Instruction Set Architecture

מבנה מחשבים Amar Lior Based on lectures notes from Arie Schlesinger

Inequalities in MIPS (2/4) Inequalities in MIPS (1/4) Inequalities in MIPS (4/4) Inequalities in MIPS (3/4) UCB CS61C : Machine Structures

Control MIPS unconditional branch instruction (i.e., jump)

Lecture #6 Intro MIPS; Load & Store

Chapter 2: Instructions:

Computer Architecture

Computer Organization and Structure. Bing-Yu Chen National Taiwan University

Review 1/2 MIPS assembly language instructions mapped to numbers in 3 formats. CS61C Negative Numbers and Logical Operations R I J.

Stored Program Concept. Instructions: Characteristics of Instruction Set. Architecture Specification. Example of multiple operands

Computer Organization and Structure. Bing-Yu Chen National Taiwan University

Outline. Homework. Assembly Language. Instructions. Instruction Set Architectures. Csci 136 Computer Architecture II MIPS Instruction Set Architecture

Stored Program Concept. Instructions: Characteristics of Instruction Set. Architecture Specification. Example of multiple operands

ECE232: Hardware Organization and Design

CS 61C: Great Ideas in Computer Architecture Intro to Assembly Language, MIPS Intro. Machine Interpreta4on

Chapter 3. Instructions:

Introduction to the MIPS. Lecture for CPSC 5155 Edward Bosworth, Ph.D. Computer Science Department Columbus State University

CS61C : Machine Structures

ECE369. Chapter 2 ECE369

Quick Review. lw $t0, 4($a0) Registers x Memory. $a0 is simply another name for register 4 $t0 is another name for register (green sheet)

Chapter 2. Computer Abstractions and Technology. Lesson 4: MIPS (cont )

Lecture 6 Decision + Shift + I/O

Machine Language Instructions Introduction. Instructions Words of a language understood by machine. Instruction set Vocabulary of the machine

Chapter 3 MIPS Assembly Language. Ó1998 Morgan Kaufmann Publishers 1

Instructions: MIPS arithmetic. MIPS arithmetic. Chapter 3 : MIPS Downloaded from:

COMPSCI 313 S Computer Organization. 7 MIPS Instruction Set

CS 61C: Great Ideas in Computer Architecture. Lecture 5: Intro to Assembly Language, MIPS Intro. Instructor: Sagar Karandikar

Computer Science 324 Computer Architecture Mount Holyoke College Fall Topic Notes: MIPS Instruction Set Architecture

CS 61C: Great Ideas in Computer Architecture More MIPS, MIPS Functions

COE608: Computer Organization and Architecture

MIPS R-format Instructions. Representing Instructions. Hexadecimal. R-format Example. MIPS I-format Example. MIPS I-format Instructions

Branch Addressing. Jump Addressing. Target Addressing Example. The University of Adelaide, School of Computer Science 28 September 2015

Control Instructions. Computer Organization Architectures for Embedded Computing. Thursday, 26 September Summary

Control Instructions

ELEC / Computer Architecture and Design Fall 2013 Instruction Set Architecture (Chapter 2)

CS3350B Computer Architecture MIPS Instruction Representation

Instructions: MIPS ISA. Chapter 2 Instructions: Language of the Computer 1

Decoding example Binary=>Decimal=>Assembly=>C? Start at program at address 4,194,304 (2 22 )

Brought to you by CalLUG (UC Berkeley GNU/Linux User Group). Tuesday, September 20, 6-8 PM in 100 GPB.

Lecture #6 Intro MIPS; Load & Store Assembly Variables: Registers (1/4) Review. Unlike HLL like C or Java, assembly cannot use variables

5/17/2012. Recap from Last Time. CSE 2021: Computer Organization. The RISC Philosophy. Levels of Programming. Stored Program Computers

Do-While Example. In C++ In assembly language. do { z--; while (a == b); z = b; loop: addi $s2, $s2, -1 beq $s0, $s1, loop or $s2, $s1, $zero

Recap from Last Time. CSE 2021: Computer Organization. Levels of Programming. The RISC Philosophy 5/19/2011

CISC 662 Graduate Computer Architecture. Lecture 4 - ISA

CS31001 COMPUTER ORGANIZATION AND ARCHITECTURE. Debdeep Mukhopadhyay, CSE, IIT Kharagpur. Instructions and Addressing

CS 61C: Great Ideas in Computer Architecture Intro to Assembly Language, MIPS Intro

CISC 662 Graduate Computer Architecture. Lecture 4 - ISA MIPS ISA. In a CPU. (vonneumann) Processor Organization

CS 61C: Great Ideas in Computer Architecture Intro to Assembly Language, MIPS Intro

Computer Architecture

ECE232: Hardware Organization and Design. Computer Organization - Previously covered

bits 5..0 the sub-function of opcode 0, 32 for the add instruction

CS 61C: Great Ideas in Computer Architecture. MIPS Instruction Formats

MIPS Memory Access Instructions

CSE 141 Computer Architecture Spring Lecture 3 Instruction Set Architecute. Course Schedule. Announcements

Chapter 2. Instruction Set Architecture (ISA)

Today s topics. MIPS operations and operands. MIPS arithmetic. CS/COE1541: Introduction to Computer Architecture. A Review of MIPS ISA.

Computer Science 324 Computer Architecture Mount Holyoke College Fall Topic Notes: MIPS Instruction Set Architecture

Topic Notes: MIPS Instruction Set Architecture

All instructions have 3 operands Operand order is fixed (destination first)

EEC 581 Computer Architecture Lecture 1 Review MIPS

1 5. Addressing Modes COMP2611 Fall 2015 Instruction: Language of the Computer

ENGN1640: Design of Computing Systems Topic 03: Instruction Set Architecture Design

ECE468 Computer Organization & Architecture. MIPS Instruction Set Architecture

Chapter 2A Instructions: Language of the Computer

Architecture II. Computer Systems Laboratory Sungkyunkwan University

Chapter 2. Instructions: Language of the Computer. Adapted by Paulo Lopes

EE108B Lecture 2 MIPS Assembly Language I. Christos Kozyrakis Stanford University

CS61C Machine Structures. Lecture 12 - MIPS Procedures II & Logical Ops. 2/13/2006 John Wawrzynek. www-inst.eecs.berkeley.

Lecture 4: MIPS Instruction Set

CSCI 402: Computer Architectures. Instructions: Language of the Computer (3) Fengguang Song Department of Computer & Information Science IUPUI.

Instructions: Language of the Computer

CSCI 402: Computer Architectures. Instructions: Language of the Computer (4) Fengguang Song Department of Computer & Information Science IUPUI

COMP MIPS instructions 2 Feb. 8, f = g + h i;

CS222: MIPS Instruction Set

Computer Architecture. Lecture 2 : Instructions

Today s lecture. Translating an if-then statement

CS61C Machine Structures. Lecture 8 - Introduction to the MIPS Processor and Assembly Language. 9/14/2007 John Wawrzynek

Chapter 2. lw $s1,100($s2) $s1 = Memory[$s2+100] sw $s1,100($s2) Memory[$s2+100] = $s1

CS61C - Machine Structures. Lecture 6 - Instruction Representation. September 15, 2000 David Patterson.

ENE 334 Microprocessors

CS 61c: Great Ideas in Computer Architecture

CS 61C: Great Ideas in Computer Architecture Intro to Assembly Language, MIPS Intro

Instruction Set Design and Architecture

Transcription:

CS61C Constants and Making Decisions in C/Assembly Language Lecture 3 January 27, 1999 Dave Patterson (http.cs.berkeley.edu/~patterson) www-inst.eecs.berkeley.edu/~cs61c/schedule.html cs 61C L3 Decisions.1

Review 1/2 Big idea in CS&E; compilation to translate from one level of abstraction to lower level Generally single HLL statement produces many assembly instructions Also hides address calculations (byte vs. word addressing) Design of an Assembly Language like MIPS shaped by 1) Desire to keep hardware simple: e.g., each operation has 3 operands 2) Smaller is faster: e.g., MIPS has 32 registers cs 61C L3 Decisions.2

Review 2/2 MIPS assembly language thus far: Instructions: add, sub, lw, sw At most one assembly instruction per line Comments start with # to end of line Operands: registers $s0, $s1,... ; $t0, $t1,... Operands: memory Memory[0], Memory[4], Memory[8],,..., Memory[4294967292] cs 61C L3 Decisions.3

Overview Constants (3 minutes) C/Assembly if, goto, if-else (7 min) C /Assembly Loops: goto, while (10 min) Administrivia, What s this good for (5) Test for less (6 min) C/Assembly case/switch statement (12) C/Assembly for Example (6 minutes) Conclusion (1 minute) cs 61C L3 Decisions.4

Assembly Constants C expressions can have constants: i = i + 10; How get them using instructions so far? Constants kept in memory with program lw $t0, 0($s0) # load 10 from memory add $s3,$s3,$t0 # i = i + 10 So common, have instruction to add constants (called immediate instructions ) addi $s3,$s3,10 # i = i + 10 cs 61C L3 Decisions.5

Assembly Constants Why include immediate instructions? Design principle: Make the common case fast Why faster? - Don t need to access memory - 2 instructions v. 1 instruction Also,perhaps most popular constant is zero MIPS designers reserved 1 of 32 registers to always have the value 0; called $zero Useful in making additional operations from existing instructions; e.g., $s0 s1 add $s0, $s1, $zero # $s0 = $s1 + 0 cs 61C L3 Decisions.6

C Decisions (Control Flow): if statements 2 kinds of if statements in C if (condition) statement if (condition) statement1 else statement2 Following code is same as 2nd if if (condition) go to L1; statement2; go to L2; L1: statement1; L2: Not as elegant as if-else, but same meaning cs 61C L3 Decisions.7

MIPS decision instructions (control flow) Decision instruction in MIPS: beq register1, register2, L1 beq is Branch if (registers are) equal Same meaning as (using C): if (register1==register2) go to 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) go to L1 Called conditional branches cs 61C L3 Decisions.8

Compiling C if into MIPS Assembly Compile by hand if (i == j) f=g+h; else f=g-h; Mapping f: $s0, g: $s1, h: $s2, i: $s3, j: $s4 (true) i == j f=g+h i == j? f=g-h Exit Start with branch: beq $s3,s4, True # branch to True # if i==j (false) i!= j Follow with false part sub $s0,$s1,$s2 # f=g-h(skip if i==j) cs 61C L3 Decisions.9

Compiling C if into MIPS Assembly Next must skip over true part Need instruction that always branches (unconditional branch) MIPS has jump: j Exit # go to Exit Next is true part True: add $s0,$s1,$s2 # f=g+h Followed by exit branch label Exit: cs 61C L3 Decisions.10

C M I P S Compiling C if into MIPS: Summary Compile by hand if (i == j) f=g+h; else f=g-h; Mapping f: $s0, g: $s1, h: $s2, i: $s3, j: $s4 beq $s3,s4, True # branch i==j sub $s0,$s1,$s2 # f=g-h(false) j Exit # go to Exit True: add $s0,$s1,$s2 # f=g+h (true) Exit: Note:Compiler supplies labels, branches not found in HLL code; often it flips the condition to branch to false part cs 61C L3 Decisions.11 (true) i == j f=g+h i == j? f=g-h (false) i!= j

Loops in C/Assembly Simple loop in C Loop: g = g + A[i]; i = i + j; if (i!= h) goto Loop; 1st fetch A[i] (g,h,i,j:$s1,$s2,$s3,$s4;base of A[]:$s5): Loop: add $t1,$s3,$s3 #$t1= 2*i add $t1,$t1,$t1 #$t1= 4*i add $t1,$t1,$s5 #$t1=addr A lw $t1,0($t1) #$t1=a[i] cs 61C L3 Decisions.12

Loops in C /Assembly Add A[i] to g and then j to i (g,h,i,j:$s1,$s2,$s3,$s4): add $s1,$s1,$t1 # g = g+a[i] add $s3,$s3,$s4 # i = i + j The final instruction branches back to Loop if i!= h : bne $s3,$s2,loop # goto Loop # if i!=h cs 61C L3 Decisions.13

Loops in C/Assembly: Summary C M I P S Loop: g = g + A[i]; i = i + j; if (i!= h) goto Loop; (g,h,i,j:$s1,$s2,$s3,$s4 : base of A[]:$s5) Loop: add $t1,$s3,$s3 #$t1= 2*i add $t1,$t1,$t1 #$t1= 4*i add $t1,$t1,$s5 #$t1=addr A lw $t1,0($t1) #$t1=a[i] add $s1,$s1,$t1 #g=g+a[i] add $s3,$s3,$s4 #i=i + j bne $s3,$s2,loop# goto Loop # if i!=h cs 61C L3 Decisions.14

While in C/Assembly: Although legal C, almost never write loops with if, goto: use while, for loops Syntax: while(condition) statement while (save[i]==k) i = i + j; 1st load save[i] into a temporary register (i,j,k: $s3,$s4,$s5: base of save[]:$s6): Loop: add $t1,$s3,$s3#$t1 = 2*i add $t1,$t1,$t1 #$t1 = 4*i add $t1,$t1,$s6 #$t1=addr lw $t1,0($t1) #$t1=save[i] cs 61C L3 Decisions.15

While in C/Assembly: Loop test, exiting if save[i]!= k (i,j,k: $s3,$s4,$s5: base of save[]:$s6): bne $t1,$s5,exit#goto Exit #if save[i]!=k The next instruction adds j to i: add $s3,$s3,$s4 # i = i + j End of loop branches back to the while test at top of loop. Add the Exit label after: j Loop Exit: # goto Loop cs 61C L3 Decisions.16

While in C/Assembly: Summary C cs 61C L3 Decisions.17 while (save[i]==k) i = i + j; (i,j,k: $s3,$s4,$s5: base of save[]:$s6) Loop: add $t1,$s3,$s3 #$t1 = 2*i add $t1,$t1,$t1 #$t1 = 4*i add $t1,$t1,$s6 #$t1=addr lw $t1,0($t1) #$t1=save[i] bne $t1,$s5,exit#goto Exit #if save[i]!=k M I P S Exit: add $s3,$s3,$s4 # i = i + j j Loop # goto Loop

Administrivia Change in what said last time: teams of 1-2, not 3 Much less chance of being third wheel if team size is 2; OK to do by yourself 1-2 people for Labs, Exercises, Projects May change and work with different people 1st homework: Due today (1/27) 7PM (grace period until 8AM tomorrow) 1st project: C spelling checker philspel Due Wed. 2/3 7PM (do by yourself) www-inst.eecs/~cs61c/handouts/proj1.pdf cs 61C L3 Decisions.18

Administrivia 2nd homework: Due Wed 2/3 7PM Exercises 3.1, 3.2, 3.4, 3.6, 3.9 Which instruction set inside? Search WWW Apple imac Casio PalmPC Cisco Network Routers HP LaserJet 4000 IBM PC Kodak DC260 Digital Camera Discussion section moved: Th 4-5 to 247 Cory NASA Mars Rover Nintendo 64 Sony Playstation Web TV set top box cs 61C L3 Decisions.19

Administrivia Classroom Decorum If need to leave before end of class, sit at end of row near door? Disrupting attention of your classmates And in Conclusion Thus far it has been as sign to start shuffling papers : too much noise to hear? As it is only 1 minute before end of class, please wait for 60 seconds before making noise? New option on lecture notes: 4/page in pdf format; fast to download and print at home cs 61C L3 Decisions.20

What s This Stuff Good For? cs 61C L3 Decisions.21 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, 1998 www.intel.com/onedigitalday What do applications ( apps ) like these mean for reliability requirements of our technology?

Beyond equality tests in MIPS Assembly So far =, ; what about < or >? MIPS instruction Set Less Than slt register1,register2,register3 Meaning of slt in C if (register2 < register 3) register1 = 1; else register1 = 0; Branches then test result in register 1 Try if (g < h) go to Less cs 61C L3 Decisions.22

If less in C/Assembly C M I P S if (g < h) go to Less slt $t0,$s0,$s1 # $t0 = 1 if # $s0<$s1 (g<h) bne $t0,$zero, Less # goto Less # if $t0!=0... # (if (g <h)) Less: A branch if $t0!= 0 branches if g < h. Register $zero always 0, so use bne comparing register $t0 to register $zero How test if (g >= h)? cs 61C L3 Decisions.23

Set Less Than Immediate in C/Assembly C M I P S Also immediate version of slt to test against constants: slti Helpful in for loops if (g >= 1) go to Loop Loop:... slti $t0,$s0,1 # $t0 = 1 if # $s0<1 (g<1) beq $t0,$zero,loop # goto Loop # if $t0==0 # (if (g>=1)) cs 61C L3 Decisions.24

C case/switch statement Choose among four alternatives depending on whether k has the value 0, 1, 2, or 3 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*/ cs 61C L3 Decisions.25

C M I P S Case/switch via chained if-else, C/Asm. Could be done like chain of if-else 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; bne $s5,$zero, L1 # branch k!=0 add $s0,$s3,$s4 #k=0 so f=i+j j Exit # end of case so Exit L1:subi $t0,$s5,1 # $t0=k-1 bne $t1,$zero,l2 # branch k!=1 add $s0,$s1,$s2 #k=1 so f=g+h j Exit # end of case so Exit L2:subi $t0,$s5,2 # $t0=k-2 bne $t1,$zero,l3 # branch k!=2 sub $s0,$s1,$s2 #k=2 so f=g-h j Exit # end of case so Exit L3:sub $s0,$s3,$s4 #k=3 so f=i-j Exit: cs 61C L3 Decisions.26

Case/Switch via Jump Address Table Notice that last case must wait for n-1 tests before executing, making it slow Alternative tries to go to all cases equally fast: jump address table Idea: encode alternatives as a table of addresses of the cases - Table an array of words with addresses corresponding to case labels Program indexes into table and jumps MIPS instruction jump register (jr) unconditionally branches to address in register; use load to get address cs 61C L3 Decisions.27

Case/Switch via Jump Address Table 1/3 Use k to index a jump address table, and then jump via the value loaded 1st test that k matches 1 of cases (0<=k<=3); if not, the code exits slti $t3,$s5,0 #Test if k < 0 bne $t3,$zero,exit #if k<0,goto Exit slti $t3,$s5,4 # Test if k < 4 beq $t3,$zero,exit #if k>=4,goto Exit Multiply k by 4 to index table of words: add $t1,$s5,$s5 # Temp reg $t1 = 2*k add $t1,$t1,$t1 # Temp reg $t1 = 4*k cs 61C L3 Decisions.28

Case/Switch via Jump Address Table 2/3 Assume 4 sequential words in memory, base address in $t2, have addresses corresponding to labels L0, L1, L2, L3. add $t1,$t1,$t2# $t1=addr JumpTable[k] lw $t1,0($t1) # $t1 = JumpTable[k] Now jump using address in register $t1: jr $t1 # jump based on reg. $t1 cs 61C L3 Decisions.29

Case/Switch via Jump Address Table 3/3 Cases jumped to by jr: L0:add $s0,$s3,$s4 # k=0 so f = i + j j Exit # end case, goto Exit L1:add $s0,$s1,$s2 # k=1 so f = g + h j Exit # end case, goto Exit L2:sub $s0,$s1,$s2 # k=2 so f = g h j Exit # end case, goto Exit L3:sub $s0,$s3,$s4 # k=3 so f = i j Exit: # end of switch statement cs 61C L3 Decisions.30

Jump Address Table: Summary slti $t3,$s5,0 #Test if k < 0 bne $t3,$zero,exit #if k<0,goto Exit slti $t3,$s5,4 # Test if k < 4 beq $t3,$zero,exit #if k>=4,goto Exit add $t1,$s5,$s5 # Temp reg $t1 = 2*k add $t1,$t1,$t1 # Temp reg $t1 = 4*k add $t1,$t1,$t2 # $t1=addr JumpTable[k] lw $t1,0($t1) # $t1 = JumpTable[k] jr $t1 # jump based on $t1 L0:add $s0,$s3,$s4 # k=0 so f = i + j j Exit # end case, goto Exit L1:add $s0,$s1,$s2 # k=1 so f = g + h j Exit # end case, goto Exit L2:sub $s0,$s1,$s2 # k=2 so f = g h j Exit # end case, goto Exit L3:sub $s0,$s3,$s4 # k=3 so f = i j Exit: # end of switch statement cs 61C L3 Decisions.31

If there is time, do it yourself: Compile this MIPS code: sum = 0; for (i=0;i<10;i=i+1) sum = sum + A[i]; sum:$s3, i:$s4, base address of A:$s5 cs 61C L3 Decisions.32

And in Conclusion 1/1 Constants so common have special version of arithmetic, registers addi, subi; register $zero (always 0) Principle: Making common case fast HLL decisions (if, case) and loops (while, for) use same assembly instructions Conditional branches: beq, bne in MIPS Unconditional branches: j, jr in MIPS Relative test: slt, slti in MIPS Case/Switch: either jump table + jr or simply chained if-else Next: procedures, functions cs 61C L3 Decisions.34