CS 61C: Great Ideas in Computer Architecture. Lecture 6: More MIPS, MIPS Func.ons. Instructor: Sagar Karandikar

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

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

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

CS 61C: Great Ideas in Computer Architecture More RISC-V Instructions and How to Implement Functions

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

CS 61C: Great Ideas in Computer Architecture (Machine Structures) More MIPS Machine Language

CS61C : Machine Structures

UCB CS61C : Machine Structures

CS 61C: Great Ideas in Computer Architecture Strings and Func.ons. Anything can be represented as a number, i.e., data or instruc\ons

Lecture 7: Procedures

CS61C : Machine Structures

MIPS Functions and Instruction Formats

CS 110 Computer Architecture MIPS Instruction Formats

CS61C : Machine Structures

ECE 15B Computer Organization Spring 2010

CS 61C: Great Ideas in Computer Architecture Func%ons and Numbers

Instructor: Randy H. Katz hap://inst.eecs.berkeley.edu/~cs61c/fa13. Fall Lecture #7. Warehouse Scale Computer

CS 61c: Great Ideas in Computer Architecture

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

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

COMP 303 Computer Architecture Lecture 3. Comp 303 Computer Architecture

Agenda. Strings: C vs. Java. Loading, Storing bytes. Support for Characters and Strings 6/29/2011

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

Reduced Instruction Set Computer (RISC)

Lecture 7: Procedures and Program Execution Preview

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

Reduced Instruction Set Computer (RISC)

CENG3420 Lecture 03 Review

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

EEM 486: Computer Architecture. Lecture 2. MIPS Instruction Set Architecture

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

COE608: Computer Organization and Architecture

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

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

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

Control Instructions

CS 61C: Great Ideas in Computer Architecture. Machine Interpreta4on

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

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

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

Lecture 5: Procedure Calls

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

CS61C : Machine Structures

Thomas Polzer Institut für Technische Informatik

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

ECE331: Hardware Organization and Design

Lecture 5: Procedure Calls

Architecture II. Computer Systems Laboratory Sungkyunkwan University

More C functions and Big Picture [MIPSc Notes]

I-Format Instructions (3/4) Define fields of the following number of bits each: = 32 bits

Lecture 2. Instructions: Language of the Computer (Chapter 2 of the textbook)

Chapter 2A Instructions: Language of the Computer

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

CS61C : Machine Structures

ECE232: Hardware Organization and Design

UCB CS61C : Machine Structures

CSE Lecture In Class Example Handout

Lecture 6: Assembly Programs

Computer Architecture

9/9/12. New- School Machine Structures (It s a bit more complicated!) CS 61C: Great Ideas in Computer Architecture IntroducMon to Machine Language

CENG3420 L03: Instruction Set Architecture

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

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

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

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

MIPS Functions and the Runtime Stack

CS 61C: Great Ideas in Computer Architecture (Machine Structures) Introduc)on to Machine Language

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

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

ECE260: Fundamentals of Computer Engineering

CS 61c: Great Ideas in Computer Architecture

Computer Architecture. Chapter 2-2. Instructions: Language of the Computer

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

Instruction Set Design and Architecture

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

Instruction Set Architecture part 1 (Introduction) Mehran Rezaei

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

Overview. Introduction to the MIPS ISA. MIPS ISA Overview. Overview (2)

Computer Architecture. The Language of the Machine

CS61C : Machine Structures

CS61CL : Machine Structures

UCB CS61C : Machine Structures

CISC 662 Graduate Computer Architecture. Lecture 4 - ISA

comp 180 Lecture 10 Outline of Lecture Procedure calls Saving and restoring registers Summary of MIPS instructions

101 Assembly. ENGR 3410 Computer Architecture Mark L. Chang Fall 2009

CS 110 Computer Architecture Review for Midterm I

Course Administration

Final 9am instead of 9:30! Your grade will be ed by autograder! Jeremy Huddleston sb $t1 0($s2)!

CSE Lecture In Class Example Handout

UCB CS61C : Machine Structures

Prof. Kavita Bala and Prof. Hakim Weatherspoon CS 3410, Spring 2014 Computer Science Cornell University. See P&H 2.8 and 2.12, and A.

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

Procedure Calling. Procedure Calling. Register Usage. 25 September CSE2021 Computer Organization

MIPS Instruction Set

Chapter 2. Instructions: Language of the Computer

1/26/2014. Previously. CSE 2021: Computer Organization. The Load/Store Family (1) Memory Organization. The Load/Store Family (2)

Lec 10: Assembler. Announcements

CS153: Compilers Lecture 8: Compiling Calls

EE 361 University of Hawaii Fall

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

Transcription:

CS 61C: Great Ideas in Computer Architecture Lecture 6: More MIPS, MIPS Func.ons Instructor: Sagar Karandikar sagark@eecs.berkeley.edu hap://inst.eecs.berkeley.edu/~cs61c 1

Machine Interpreta4on Levels of RepresentaGon/ InterpretaGon High Level Language Program (e.g., C) Compiler Assembly Language Program (e.g., MIPS) Assembler Machine Language Program (MIPS) Hardware Architecture DescripCon (e.g., block diagrams) Architecture Implementa4on temp = v[k]; v[k] = v[k+1]; v[k+1] = temp; lw $t0, 0($2) lw $t1, 4($2) sw $t1, 0($2) sw $t0, 4($2) Anything can be represented as a number, i.e., data or instrucgons 0000 1001 1100 0110 1010 1111 0101 1000 1010 1111 0101 1000 0000 1001 1100 0110 1100 0110 1010 1111 0101 1000 0000 1001 0101 1000 0000 1001 1100 0110 1010 1111 Logic Circuit DescripCon (Circuit SchemaCc Diagrams) 2

From last lecture Computer words and vocabulary are called instruc.ons and instruc.on set respecgvely MIPS is example RISC instrucgon set used in CS61C Rigid format: 1 operagon, 2 source operands, 1 desgnagon add,sub,mul,div,and,or,sll,srl,sra lw,sw,lb,sb to move data to/from registers from/to memory beq, bne, j, slt, slti for decision/flow control Simple mappings from arithmegc expressions, array access, in C to MIPS instrucgons 3

Review: Components of a Computer Processor Control Enable? Read/Write Memory Input Datapath Program Counter Address Program Bytes Registers Write Data ArithmeGc & Logic Unit (ALU) Read Data Data Output Processor- Memory Interface I/O- Memory Interfaces 4

How Program is Stored Memory Program Bytes One MIPS InstrucGon = 32 bits Data 5

Assembler to Machine Code foo.s (more later in course) bar.s Assembler source files (text) Assembler foo.o Assembler bar.o Assembler converts human- readable assembly code to instruc.on bit paberns Machine code object files Linker lib.o Pre- built object file libraries a.out Machine code executable file 6

ExecuGng a Program Processor Control Datapath PC Registers ArithmeGc & Logic Unit (ALU) Read InstrucGon Bits InstrucGon Address Memory Program Bytes Data The PC (program counter) is internal register inside processor holding byte address of next instrucgon to be executed. InstrucGon is fetched from memory, then control unit executes instrucgon using datapath and memory system, and updates program counter (default is add +4 bytes to PC, to move to next sequengal instrucgon) 7

Computer Decision Making Based on computagon, do something different In programming languages: if- statement MIPS: if- statement instrucgon is beq register1,register2,l1 means: go to statement labeled L1 if (value in register1) == (value in register2).otherwise, go to next statement beq stands for branch if equal Other instrucgon: bne for branch if not equal 8

Types of Branches CondiConal Branch change control flow depending on outcome of comparison branch if equal (beq) or branch if not equal (bne) UncondiConal Branch always branch a MIPS instrucgon for this: jump (j) 9

Example if Statement Assuming translagons below, compile if block f $s0 g $s1 h $s2 i $s3 j $s4 if (i == j) bne $s3,$s4,exit f = g + h; add $s0,$s1,$s2 Exit: Note, may need to negate branch condigon 10

Example if- else Statement Assuming translagons below, compile f $s0 g $s1 h $s2 i $s3 j $s4 if (i == j) bne $s3,$s4,else f = g + h; add $s0,$s1,$s2 else j Exit f = g h; Else: sub $s0,$s1,$s2 Exit: 11

Control- flow Graphs: A visualizagon bne $s3,$s4,else add $s0,$s1,$s2 j Exit Else: sub $s0,$s1,$s2 Exit: bne $s3, $s4, Else add $s0, $s1, $s2 j Exit Else: sub $s0, $s1, $s2 Exit: 12

Inequalities in MIPS UnGl now, we ve only tested equaliges (== and!= in C). General programs need to test < and > as well. Introduce MIPS Inequality InstrucGon: Set on Less Than Syntax: slt reg1,reg2,reg3 Meaning: if (reg2 < reg3) reg1 = 1; else reg1 = 0; set means change to 1, reset means change to 0. 13

Inequalities in MIPS Cont. How do we use this? Compile by hand: if (g < h) goto Less; #g:$s0, h:$s1 Answer: compiled MIPS code slt $t0,$s0,$s1 # $t0 = 1 if g<h bne $t0,$zero,less # if $t0!=0 goto Less Register $zero always contains the value 0, so bne and beq owen use it for comparison awer an slt instrucgon sltu treats registers as unsigned 14

Immediates in Inequalities slti an immediate version of slt to test against constants Loop:... slti $t0,$s0,1 # $t0 = 1 if # $s0<1 beq $t0,$zero,loop # goto Loop # if $t0==0 # (if ($s0>=1)) 15

Clickers/Peer Instruction Label: sll $t1,$s3,2 addu $t1,$t1,$s5 lw $t1,0($t1) add $s1,$s1,$t1 addu $s3,$s3,$s4 bne $s3,$s2,label What is the code above? A: while loop B: do while loop C: for loop D: Not a loop E: None of the above 16

HW1 out Proj 1 out Administrivia Make sure you test your code on hive machines, that s where we ll grade them First Guerrilla Session this Thursday (07/02) from 5-7pm in the Woz OpGonal (not part of EPA) Covers Number Rep and MIPS 17

Administrivia Midterm one week from Thursday In this room, at this Gme One 8.5 x11 handwriaen cheatsheet We ll provide a MIPS green sheet No electronics Covers up to and including this Thursday s lecture (07/02) TA- led review session on Monday 07/06 from 5-8pm in HP Auditorium Feedback form at the end of lab 2 tell us how lecture, disc, and lab are going Proj 2 Team RegistraGon on Piazza 18

CS61C In the News MIPS Creator CI20 dev board now available A lot like Raspberry Pi but with MIPS CPU Supports Linux and Android 1.2GHz 32- bit MIPS with integrated graphics http://liliputing.com/2015/01/mips-creator-ci20-dev-boardnow-available-for-65.html 19

CS61C In the News pt. 2 RISC- V ANGEL: Try RISC- V in a browser hap://riscv.org/angel/ 20

Break 21

Six Fundamental Steps in Calling a FuncGon 1. Put parameters in a place where funcgon can access them 2. Transfer control to funcgon 3. Acquire (local) storage resources needed for funcgon 4. Perform desired task of the funcgon 5. Put result value in a place where calling code can access it and restore any registers you used 6. Return control to point of origin, since a funcgon can be called from several points in a program 22

MIPS FuncGon Call ConvenGons Registers faster than memory, so use them $a0 $a3: four argument registers to pass parameters $v0 $v1: two value registers to return values $ra: one return address register to return to the point of origin 23

InstrucGon Support for FuncGons (1/4) C M I P S... sum(a,b);... /* a,b:$s0,$s1 */ } int sum(int x, int y) { return x+y; } address (shown in decimal) 1000 1004 1008 1012 1016 2000 2004 In MIPS, all instructions are 4 bytes, and stored in memory just like data. So here we show the addresses of where the programs are stored.

InstrucGon Support for FuncGons (2/4) C M I P S... sum(a,b);... /* a,b:$s0,$s1 */ } int sum(int x, int y) { return x+y; } address (shown in decimal) 1000 add $a0,$s0,$zero # x = a 1004 add $a1,$s1,$zero # y = b 1008 addi $ra,$zero,1016 #$ra=1016 1012 j sum #jump to sum 1016 # next instruction 2000 sum: add $v0,$a0,$a1 2004 jr $ra # new instruction

InstrucGon Support for FuncGons (3/4) C M I P S... sum(a,b);... /* a,b:$s0,$s1 */ } int sum(int x, int y) { return x+y; } Question: Why use jr here? Why not use j? Answer: sum might be called by many places, so we can t return to a fixed place. The calling proc to sum must be able to say return here somehow. 2000 sum: add $v0,$a0,$a1 2004 jr $ra # new instruction

InstrucGon Support for FuncGons (4/4) Single instruction to jump and save return address: jump and link (jal) Before: 1008 addi $ra,$zero,1016 #$ra=1016 1012 j sum #goto sum After: 1008 jal sum # $ra=1012,goto sum Why have a jal? Make the common case fast: funcgon calls very common. Don t have to know where code is in memory with jal!

MIPS FuncGon Call InstrucGons Invoke funcgon: jump and link instrucgon (jal) (really should be laj link and jump ) link means form an address or link that points to calling site to allow funcgon to return to proper address Jumps to address and simultaneously saves the address of the following instrucgon in register $ra jal FunctionLabel Return from funcgon: jump register instrucgon (jr) UncondiGonal jump to address specified in register jr $ra 28

Notes on FuncGons Calling program (caller) puts parameters into registers $a0-$a3 and uses jal X to invoke (callee) at address X Must have register in computer with address of currently execugng instrucgon Instead of Instruc.on Address Register (beaer name), historically called Program Counter (PC) It s a program s counter; it doesn t count programs! What value does jal X place into $ra????? jr $ra puts address inside $ra back into PC 29

Where Are Old Register Values Saved to Restore Them Awer FuncGon Call? Need a place to save old values before call funcgon, restore them when return, and delete Ideal is stack: last- in- first- out queue (e.g., stack of plates) Push: placing data onto stack Pop: removing data from stack Stack in memory, so need register to point to it $sp is the stack pointer in MIPS ConvenGon is grow from high to low addresses Push decrements $sp, Pop increments $sp 30

Example int leaf_example (int g, int h, int i, int j) { int f; f = (g + h) (i + j); return f; } Parameter variables g, h, i, and j in argument registers $a0, $a1, $a2, and $a3, and f in $s0 Assume need one temporary register $t0 31

Stack Before, During, Awer FuncGon Need to save old values of $s0 and $t0 Contents of $t0 Contents of $s0 32

MIPS Code for leaf_example Leaf_example addi $sp,$sp,-8 # adjust stack for 2 items sw $t0, 4($sp) # save $t0 for use awerwards sw $s0, 0($sp) # save $s0 for use awerwards add $s0,$a0,$a1 # f = g + h add $t0,$a2,$a3 # t0 = i + j sub $v0,$s0,$t0 # return value (g + h) (i + j) lw $s0, 0($sp) # restore register $s0 for caller lw $t0, 4($sp) # restore register $t0 for caller addi $sp,$sp,8 # adjust stack to delete 2 items jr $ra # jump back to calling rougne 33

What If a FuncGon Calls a FuncGon? Recursive FuncGon Calls? Would clobber values in $a0 to $a3 and $ra What is the solugon? 34

Nested Procedures (1/2) int sumsquare(int x, int y) { return mult(x,x)+ y; } Something called sumsquare, now sumsquare is calling mult. So there s a value in $ra that sumsquare wants to jump back to, but this will be overwriaen by the call to mult. Need to save sumsquare return address before call to mult.

Nested Procedures (2/2) In general, may need to save some other info in addigon to $ra. When a C program is run, there are 3 important memory areas allocated: StaGc: Variables declared once per program, cease to exist only awer execugon completes - e.g., C globals Heap: Variables declared dynamically via malloc Stack: Space to be used by procedure during execugon; this is where we can save register values

OpGmized FuncGon ConvenGon To reduce expensive loads and stores from spilling and restoring registers, MIPS divides registers into two categories: 1. Preserved across funcgon call Caller can rely on values being unchanged $ra, $sp, $gp, $fp, saved registers $s0- $s7 2. Not preserved across funcgon call Caller cannot rely on values being unchanged Return value registers $v0,$v1, Argument registers $a0- $a3, temporary registers $t0- $t9 37

Clickers/Peer InstrucGon Which statement is FALSE? A: MIPS uses jal to invoke a funcgon and jr to return from a funcgon B: jal saves PC+1 in $ra C: The callee can use temporary registers ($t#) without saving and restoring them D: The caller can rely on saved registers ($s#) without fear of callee changing them 38

Break 39

AllocaGng Space on Stack C has two storage classes: automagc and stagc Automa.c variables are local to funcgon and discarded when funcgon exits Sta.c variables exist across exits from and entries to procedures Use stack for automagc (local) variables that don t fit in registers Procedure frame or ac.va.on record: segment of stack with saved registers and local variables Some MIPS compilers use a frame pointer ($fp) to point to first word of frame 40

Stack Before, During, Awer Call 41

Using the Stack (1/2) So we have a register $sp which always points to the last used space in the stack. To use stack, we decrement this pointer by the amount of space we need and then fill it with info. So, how do we compile this? int sumsquare(int x, int y) { return mult(x,x)+ y; }

Using the Stack (2/2) Hand-compile sumsquare: push pop mult:... int sumsquare(int x, int y) { return mult(x,x)+ y; } addi $sp,$sp,-8 # space on stack sw $ra, 4($sp) # save ret addr sw $a1, 0($sp) # save y add $a1,$a0,$zero # mult(x,x) jal mult # call mult lw $a1, 0($sp) # restore y add $v0,$v0,$a1 # mult()+y lw $ra, 4($sp) # get ret addr addi $sp,$sp,8 # restore stack jr $ra

Basic Structure of a FuncGon Prologue entry_label: addi $sp,$sp, -framesize sw $ra, framesize-4($sp) # save $ra save other regs if need be ra Body... (call other functions ) Epilogue restore other regs if need be lw $ra, framesize-4($sp) # restore $ra addi $sp,$sp, framesize jr $ra memory

Where is the Stack in Memory? MIPS convengon Stack starts in high memory and grows down Hexadecimal (base 16) : 7fff fffc hex MIPS programs (text segment) in low end 0040 0000 hex sta.c data segment (constants and other stagc variables) above text for stagc variables MIPS convengon global pointer ($gp) points to stagc Heap above stagc for data structures that grow and shrink ; grows up to high addresses 45

MIPS Memory AllocaGon 46

Register AllocaGon and Numbering 47

Example Recursive FuncGon: Factorial int fact (int n) { if (n < 1) return (1); else return (n * fact(n-1)); } 48

Example Recursive FuncGon: Factorial Fact: L1: # adjust stack for 2 items # Else part (n >= 1) addi $sp,$sp,-8 # arg. gets (n 1) # save return address addi $a0,$a0,-1 sw $ra, 4($sp) # call fact with (n 1) # save argument n jal fact sw $a0, 0($sp) # return from jal: restore n # test for n < 1 lw $a0, 0($sp) slti $t0,$a0,1 # restore return address # if n >= 1, go to L1 lw $ra, 4($sp) beq $t0,$zero,l1 # adjust sp to pop 2 items # Then part (n==1) return 1 addi $sp, $sp,8 addi $v0,$zero,1 # return n * fact (n 1) # pop 2 items off stack mul $v0,$a0,$v0 addi $sp,$sp,8 # return to the caller # return to caller jr $ra jr $ra mul is a pseudo instruc.on 49

iclicker QuesGon Which of the following are true?: 1. We are allowed to violate the calling convengon to opgmize code 2. jalr is a non- condigonal jump and link to an address stored in a register 3. For non- branch instrucgons, we always increment by 4 because our memory is word- addressed A: T, T, T B: T, T, F C: T, F, T D: F, T, T E: F, T, F 50

And in Conclusion FuncGons called with jal, return with jr $ra. The stack is your friend: Use it to save anything you need. Just leave it the way you found it! InstrucGons we know so far ArithmeGc: add, addi, sub, addu, addiu, subu Memory: lw, sw, lb, sb Decision: beq, bne, slt, slti, sltu, sltiu UncondiGonal Branches (Jumps): j, jal, jr Registers we know so far Most of them! $a0- $a3 for funcgon arguments, $v0- $v1 for return values $sp, stack pointer, $fp frame pointer, $ra return address