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

Similar documents
CS61C : Machine Structures

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

UCB CS61C : Machine Structures

CS61C : Machine Structures

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

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

Lecture #6 Intro MIPS; Load & Store

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

CS 110 Computer Architecture Lecture 6: More MIPS, MIPS 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

Review. Lecture #9 MIPS Logical & Shift Ops, and Instruction Representation I Logical Operators (1/3) Bitwise Operations

ECE 15B COMPUTER ORGANIZATION

Lecture 7: Procedures and Program Execution Preview

CS61C : Machine Structures

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

MIPS Functions and Instruction Formats

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

CS61C : Machine Structures

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

CS61C : Machine Structures

CS61C : Machine Structures

CS61C Machine Structures. Lecture 5 C Structs & Memory Mangement. 1/27/2006 John Wawrzynek. www-inst.eecs.berkeley.edu/~cs61c/

UCB CS61C : Machine Structures

And in Review. Register Conventions (2/4) saved. Register Conventions (1/4) Register Conventions (4/4) Register Conventions (3/4) volatile

Chapter 2. Instructions:

UCB CS61C : Machine Structures

Review: C Strings. A string in C is just an array of characters. Lecture #4 C Strings, Arrays, & Malloc

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

UCB CS61C : Machine Structures

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

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

Bonus slides. Garcia, Spring 2014 UCB. CS61C L11 Introduction to MIPS : Procedures II & Logical Ops (18)

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

Chapter 2A Instructions: Language of the Computer

CS 110 Computer Architecture MIPS Instruction Formats

Levels of Programming. Registers

Lecture 6 Decision + Shift + I/O

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

Lecture 5: Procedure Calls

CS 61c: Great Ideas in Computer Architecture

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

UCB CS61C : Machine Structures

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

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

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

ECE 15B Computer Organization Spring 2010

ú There are CONVENTIONS when calling procedures! Stack main ()! { a(0);! }! void a (int m)! frame" Garcia, Spring 2013 UCB printf() (y==?

COMPUTER ORGANIZATION AND DESIGN

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

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

Agenda. Peer Instruction Question 1. Peer Instruction Answer 1. Peer Instruction Question 2 6/22/2011

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

CS61C Machine Structures. Lecture 4 C Structs & Memory Management. 9/5/2007 John Wawrzynek. www-inst.eecs.berkeley.edu/~cs61c/

Reduced Instruction Set Computer (RISC)

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

Thomas Polzer Institut für Technische Informatik

CS61C : Machine Structures

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

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

COMP 303 Computer Architecture Lecture 3. Comp 303 Computer Architecture

Reduced Instruction Set Computer (RISC)

UCB CS61C : Machine Structures

CS61C : Machine Structures

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

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

Lectures 13 & 14. memory management

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

CS61C : Machine Structures

How about them A s!! Go Oaktown!! CS61C - Machine Structures. Lecture 4 C Structures Memory Management Dan Garcia.

CS61C : Machine Structures

MIPS Instruction Set Architecture (2)

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

Language of the Machine Recursive functions

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

Control Instructions

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

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

Lecture 7: Procedures

Lecture 5: Procedure Calls

Number Review. Lecture #3 More C intro, C Strings, Arrays, & Malloc Variables. Clarification about counting down

CS3350B Computer Architecture MIPS Introduction

CENG3420 Lecture 03 Review

Rui Wang, Assistant professor Dept. of Information and Communication Tongji University.

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

CS61C Machine Structures. Lecture 4 C Pointers and Arrays. 1/25/2006 John Wawrzynek. www-inst.eecs.berkeley.edu/~cs61c/

CS 61c: Great Ideas in Computer Architecture

CSE Lecture In Class Example Handout

Chapter 2. Instructions: Language of the Computer

Lecture 4: MIPS Instruction Set

Assembly Language Programming. CPSC 252 Computer Organization Ellen Walker, Hiram College

CS61C : Machine Structures

CS 61C: Great Ideas in Computer Architecture C Pointers. Instructors: Vladimir Stojanovic & Nicholas Weaver

Computer Architecture

Instructions: Assembly Language

ECE 154A Introduction to. Fall 2012

Computer Organization and Design

Faux Midterm 1: Review Session

CS 61C: Great Ideas in Computer Architecture. C Arrays, Strings, More Pointers

CMPE324 Computer Architecture Lecture 2

Transcription:

CS 61C Faux Midterm Review (1) CS61C Machine Structures Faux Midterm Review 2002-09-29 Jaein Jeong Cheng Tien Ee www-inst.eecs.berkeley.edu/~cs61c/ Numbers: positional notation Number Base B B symbols per digit: Base 10 (Decimal): 0 ~ 9 Base 2 (Binary): 0, 1 Base 16 (Hexadecimal): 0 ~ 9, A ~ F Base 8 (Octal): 0 ~ 7 Number representation: d 31 d 30... d 2 d 1 d 0 is a 32 digit number value = d 31 x B 31 +... + d 1 x B 1 + d 0 x B 0 Conversion: Binary <-> Hex, Oct 1 hex digit replaces 4 binary digits 1 oct digit replaces 3 binary digits Example: 1010 1100 0101 (binary) =? (hex),? (oct) CS 61C Faux Midterm Review (2) How to Represent Negative Numbers? Sign and magnitude One bit for sign, rest of bits for numerical value Arithmetic circuit more complicated Two zeros One s complement The negative number representation is a negation Arithmetic circuit more complicated Two zeros Two s complement d 31 x -2 31 + d 30 x 2 30 +... + d 2 x 2 2 + d 1 x 2 1 + d 0 x 2 0 Same arithmetic circuit for non-negative and negative One zeros Used by most computers CS 61C Faux Midterm Review (3) Two s complement shortcut Negation Change every 0 to 1 and 1 to 0 (invert or complement), then add 1 to the result Sign extension Convert 2 s complement number using n bits to more than n bits Simply replicate the most significant bit (sign bit) of smaller to fill new bits Overflow The result of an arithmetic operation cannot be represented by these rightmost HW bits What is the condition? CS 61C Faux Midterm Review (4) Pointers Pointer: A variable that contains the address of a variable. Pointer operations & operator: get address of a variable * dereference operator : get value pointed to Normally a pointer can only point to one type (int, char, a struct, etc.). void * is a type that can point to anything (generic pointer) Pointers and Parameter Passing Java and C pass a parameter by value procedure/function gets a copy of the parameter, so changing the copy cannot change the original How to get a function to change a value? Use pointer variable void addone(int x){ void addone(int *x){ x = x + 1; *x = *x + 1; => int y = 3; int y = 3; addone(y); addone(&y); CS 61C Faux Midterm Review (5) CS 61C Faux Midterm Review (6)

CS 61C Faux Midterm Review (7) Pointer Arithmetic Since a pointer is just a memory address, we can add to it to traverse an array. ptr+1 will return a pointer to the next array element. *ptr+1 vs. *ptr++ vs. *(ptr+1)? What if we have an array of large structs (objects)? C takes care of it: In reality, ptr+1 doesn t add 1 to the memory address, but rather adds the size of the array element. Pointers & Allocation After declaring a pointer: int *ptr; ptr doesn t actually point to anything yet. We can either: make it point to something that already exists, or allocate room in memory for something new that it will point to (next time) CS 61C Faux Midterm Review (8) Arrays (1/2) Arrays are (almost) identical to pointers char *string and char string[] are nearly identical declarations They differ in very subtle ways: incrementing, declaration of filled arrays Key Concept: An array variable is a pointer to the first element. Consequences: ar is a pointer ar[0] is the same as *ar ar[2] is the same as *(ar+2) Arrays (2/2) Declared arrays are only allocated while the scope is valid char *foo() { char string[32];...; return string; is incorrect An array in C does not know its own length, & bounds not checked! Consequence: We can accidentally access off the end of an array. Consequence: We must pass the array and its size to a procedure which is going to traverse it. CS 61C Faux Midterm Review (9) CS 61C Faux Midterm Review (10) C Strings Pointers to pointers A string in C is just an array of characters. char string[] = abc ; How do you tell how long a string is? Last character is followed by a 0 byte (null terminator) int strlen(char s[]) { int n = 0; while (s[n]!= 0) n++; return n; But what if what you want changed is a pointer? Solution! Pass a pointer to a pointer, called a handle, declared as **h One common mistake is to forget to allocate an extra byte for the null terminator. CS 61C Faux Midterm Review (11) CS 61C Faux Midterm Review (12)

CS 61C Faux Midterm Review (13) C structures : Overview A struct is a data structure composed for simpler data types. struct point { int x; int y; void PrintPoint(point p) { printf( (%d,%d), p.x, p.y); The C arrow operator (->) dereferences and extracts a structure field with a single operator. The following are equivalent: struct point *p; printf( x is %d\n, (*p).x); printf( x is %d\n, p->x); Sizeof() operator C has operator sizeof() which gives size in bytes (of type or variable) Assume size of objects can be misleading, so use sizeof(type) How big is sizeof(p)? struct p { char x; int y; ; 5 bytes? 8 bytes? Compiler may word align integer y CS 61C Faux Midterm Review (14) Dynamic Memory Allocation Where allocated? To allocate room for something new to point to, use malloc() (with the help of a typecast and sizeof): ptr = (int *) malloc (sizeof(int)); Once malloc() is called, use the memory location only after setting its value (due to garbage). After dynamically allocating space, we must dynamically free it: free(ptr); Structure declaration does not allocate memory Variable declaration does allocate memory If declare outside a procedure, allocated in static storage If declare inside procedure, allocated on the stack and freed when int myglobal; procedure returns main() { int temp; CS 61C Faux Midterm Review (15) CS 61C Faux Midterm Review (16) C Memory Management C has 3 pools of memory Static storage: global variable storage, basically permanent, entire program run The Stack: local variable storage, parameters, return address (location of "activation records" in Java or "stack frame" in C) The Heap (dynamic storage): data lives until deallocated by programmer C requires knowing where objects are in memory, otherwise don't work as expect Java hides location of objects Memory Management How do we manage memory? Code, Static storage are easy: they never grow or shrink Stack space is also easy: stack frames are created and destroyed in last-in, first-out (LIFO) order Managing the heap is tricky: memory can be allocated / deallocated at any time CS 61C Faux Midterm Review (17) CS 61C Faux Midterm Review (18)

CS 61C Faux Midterm Review (19) Choosing a block in malloc() If there are multiple free blocks of memory that are big enough for some request, how do we choose which one to use? best-fit: choose the smallest block that is big enough for the request first-fit: choose the first block we see that is big enough next-fit: like first-fit but remember where we finished searching and resume searching from there Internal vs. External Fragmentation With the slab allocator, difference between requested size and next power of 2 is wasted e.g., if program wants to allocate 20 bytes and we give it a 32 byte block, 12 bytes are unused. We also refer to this as fragmentation, but call it internal fragmentation since the wasted space is actually within an allocated block. External fragmentation: wasted space between allocated blocks. CS 61C Faux Midterm Review (20) Assembly Variables: Registers 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 fast (faster than 1 billionth of a second) Drawback: Since registers are in hardware, there are a predetermined number of them 32 registers in MIPS Each MIPS register is 32 bits wide CS 61C Faux Midterm Review (21) Register 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; eg add $s0,$s1,$zero (in MIPS) f = g (in C) where MIPS registers $s0,$s1 are associated with C variables f, g defined in hardware, so an instruction addi $zero,$zero,5 will not do anything! CS 61C Faux Midterm Review (22) Immediates 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 MIPS registers $s0,$s1 are associated with C variables f, g Syntax similar to add instruction, except that last argument is a number instead of a register. CS 61C Faux Midterm Review (23) Assembly Operands: Memory C variables map onto registers; what about large data structures like arrays? 1 of 5 components of a computer: memory contains such data structures But MIPS arithmetic instructions only operate on registers, never directly on memory. Data transfer instructions transfer data between registers and memory: Memory to register Register to memory CS 61C Faux Midterm Review (24)

CS 61C Faux Midterm Review (25) Data Transfer: Memory to Reg (1/2) To specify a memory address to copy from, specify two things: A register which contains a pointer to memory A numerical offset (in bytes) The desired memory address is the sum of these two values. Example: 8($t0) specifies the memory address pointed to by the value in $t0, plus 8 bytes Data Transfer: Memory to Reg (2/2) Example: lw $t0,12($s0) This instruction will take the pointer in $s0, add 12 bytes to it, and then load the value from the memory pointed to by this calculated sum into register $t0 Notes: $s0 is called the base register 12 is called the offset offset is generally used in accessing elements of array or structure: base reg points to beginning of array or structure CS 61C Faux Midterm Review (26) Data Transfer: Reg to Memory Pointers v. Values Also want to store value from a register into memory Store instruction syntax is identical to Load instruction syntax MIPS Instruction Name: sw (meaning Store Word, so 32 bits or one word are loaded at a time) Example: sw $t0,12($s0) This instruction will take the pointer in $s0, add 12 bytes to it, and then store the value from register $t0 into the memory address pointed to by the calculated sum Key Concept: A register can hold any 32-bit value. That value can be a (signed) int, an unsigned int, a pointer (memory address), and so on If you write add $t2,$t1,$t0 then $t0 and $t1 better contain values If you write lw $t2,0($t0) then $t0 better contain a pointer Don t mix these up! CS 61C Faux Midterm Review (27) CS 61C Faux Midterm Review (28) Addressing: Byte vs. word Every word in memory has an address, similar to an index in an array Early computers numbered words like C numbers elements of an array: Memory[0], Memory[1], Memory[2], Called the address of a word Computers needed to access 8-bit bytes as well as words (4 bytes/word) Today machines address memory as bytes, hence 32-bit (4 byte) word addresses differ by 4 Memory[0], Memory[4], Memory[8], CS 61C Faux Midterm Review (29) Compilation with Memory What offset in lw to select A[8] in C? 4x8=32 to select A[8]: byte v. word Compile by hand using registers: g = h + A[8]; g: $s1, h: $s2, $s3:base address of A 1st transfer from memory to register: lw $t0,32($s3) # $t0 gets A[8] Add 32 to $s3 to select A[8], put into $t0 Next add it to h and place in g add $s1,$s2,$t0 # $s1 = h+a[8] CS 61C Faux Midterm Review (30)

CS 61C Faux Midterm Review (31) Role of Registers vs. Memory What if more variables than registers? Compiler tries to keep most frequently used variable in registers Less common in memory: spilling Why not keep all variables in memory? Smaller is faster: registers are faster than memory Registers more versatile: - MIPS arithmetic instructions can read 2, operate on them, and write 1 per instruction - MIPS data transfer only read or write 1 operand per instruction, and no operation 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; goto L2; L1: clause1; L2: Not as elegant as if-else, but same meaning CS 61C Faux Midterm Review (32) MIPS branch instructions Conditional branches: beq register1, register2, L1 - if (register1==register2) goto L1 bne register1, register2, L1 - if (register1!=register2) goto L1 Unconditional branch: j label jump (or branch) directly to the given label Same meaning as (using C): goto label Compiling C if into MIPS Compile by hand if (i == j) f=g+h; else f=g-h; (true) i == j f=g+h i == j? f=g-h (false) i!= j Final compiled MIPS code: Exit beq $s3,$s4,true # branch i==j sub $s0,$s1,$s2 # f=g-h(false) j Fin # goto Fin True: add $s0,$s1,$s2 # f=g+h (true) Fin: CS 61C Faux Midterm Review (33) CS 61C Faux Midterm Review (34) Loops in C/Assembly (1/2) Simple loop in C; A[] is an array of ints do { 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 Loops in C/Assembly (2/2) Final compiled MIPS code: Loop: sll $t1,$s3,2 #$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 Faux Midterm Review (35) CS 61C Faux Midterm Review (36)

CS 61C Faux Midterm Review (37) Inequalities in MIPS Create a MIPS Inequality Instruction: Set on Less Than : slt reg1,reg2,reg3 Meaning: if (reg2 < reg3) reg1 = 1; else reg1 = 0; How do we implement >, <= and >=? Use BNE, BEQ or change reg2 and reg3 There is also an immediate version of slt to test against constants: slti Steps for Making a Procedure Call 1) Save necessary values onto stack. 2) Assign argument(s), if any. 3) jal call 4) Restore values from stack. CS 61C Faux Midterm Review (38) Rules for Procedures MIPS Registers Called with a jal instruction, returns with a jr $ra Accepts up to 4 arguments in $a0, $a1, $a2 and $a3 Return value is always in $v0 (and if necessary in $v1) Must follow register conventions (even in functions that only you will call)! So what are they? The constant 0 $0 $zero Reserved for Assembler $1 $at Return Values $2-$3 $v0-$v1 Arguments $4-$7 $a0-$a3 Temporary $8-$15 $t0-$t7 Saved $16-$23 $s0-$s7 More Temporary $24-$25 $t8-$t9 Used by Kernel $26-27 $k0-$k1 Global Pointer $28 $gp Stack Pointer $29 $sp Frame Pointer $30 $fp Return Address $31 $ra (From COD 2nd Ed. p. A-23) Use names for registers -- code is clearer! CS 61C Faux Midterm Review (39) CS 61C Faux Midterm Review (40) Register Conventions Note that, if the callee is going to use some s registers, it must: save those s registers on the stack use the registers restore s registers from the stack jr $ra With the temp registers, the callee doesn t need to save onto the stack. The caller must save those temp registers that it would like to preserve though the call. Basic Structure of a Function Prologue entry_label: addi $sp,$sp, -framesize sw $ra, framesize-4($sp)# save $ra save other regs if need be Body... (call other functions ) Epilogue memory restore other regs if need be lw $ra, framesize-4($sp)# restore $ra addi $sp,$sp, framesize jr $ra ra CS 61C Faux Midterm Review (41) CS 61C Faux Midterm Review (42)

CS 61C Faux Midterm Review (43) Example: Fibonacci Numbers 1/2 The Fibonacci numbers are defined as follows: F(n) = F(n 1) + F(n 2), F(0) and F(1) are defined to be 1 Rewriting this in C we have: int fib(int n) { if(n == 0) { return 1; if(n == 1) { return 1; return (fib(n - 1) + fib(n - 2)); Example: Fibonacci Numbers 2/2 Here s the complete code for reference: fib: lw $a0, 0($sp) addi $sp, $sp, -12 addi $a0, $a0, -1 sw $ra, 8($sp) add $s0, $v0, $zero sw $s0, 4($sp) jal fib addi $v0, $zero, 1 add $v0, $v0, $s0 beq $a0, $zero, fin addi $t0, $zero, 1 fin: beq $a0, $t0, fin lw $s0, 4($sp) addi $a0, $a0, -1 lw $ra, 8($sp) sw $a0, 0($sp) addi $sp, $sp, 12 jal fib jr $ra CS 61C Faux Midterm Review (44) Bitwise Operations Logical Operators Since registers are composed of 32 bits, we may want to access individual bits (or groups of bits) rather than the whole. Introduce two new classes of instructions: Logical Operators Shift Instructions Two basic logical operators: AND: outputs 1 only if both inputs are 1 OR: outputs 1 if at least one input is 1 Note that anding a bit with 0 produces a 0 at the output while anding a bit with 1 produces the original bit (masking). Similarly, note that oring a bit with 1 produces a 1 at the output while oring a bit with 0 produces the original bit. CS 61C Faux Midterm Review (45) CS 61C Faux Midterm Review (46) Shift Instructions (1/3) Move (shift) all the bits in a word to the left or right by a number of bits. MIPS shift instructions: 1. sll (shift left logical): shifts left and fills emptied bits with 0s 2. srl (shift right logical): shifts right and fills emptied bits with 0s 3. sra (shift right arithmetic): shifts right and fills emptied bits by sign extending Shift Instructions (2/3) In binary: Multiplying by 2 is same as shifting left by 1: - 11 2 x 10 2 = 110 2-1010 2 x 10 2 = 10100 2 Multiplying by 4 is same as shifting left by 2: - 11 2 x 100 2 = 1100 2-1010 2 x 100 2 = 101000 2 Multiplying by 2 n is same as shifting left by n CS 61C Faux Midterm Review (47) CS 61C Faux Midterm Review (48)

CS 61C Faux Midterm Review (49) Shift Instructions (3/3) Since shifting may be faster than multiplication, a good compiler usually notices when C code multiplies by a power of 2 and compiles it to a shift instruction: a *= 8; (in C) would compile to: sll $s0,$s0,3 (in MIPS) Likewise, shift right to divide by powers of 2 remember to use sra Loading, Storing bytes In addition to word data transfers (lw, sw), MIPS has byte data transfers: load byte: lb,lbu lb: sign extends to fill upper 24 bits lbu: zero fills upper 24 bits store byte: sb same format as lw, sw CS 61C Faux Midterm Review (50) Big Idea: Stored-Program Concept Computers built on 2 key principles: 1) Instructions are represented as numbers. 2) Therefore, entire programs can be stored in memory to be read or written just like numbers (data). Simplifies SW/HW of computer systems: Memory technology for data also used for programs What if we modify the numbers for instructions? It modifies the program code (selfmodifying code) Consequence #1: Everything Addressed Since all instructions and data are stored in memory as numbers, everything has a memory address: instructions, data words both branches and jumps use these C pointers are just memory addresses: they can point to anything in memory Unconstrained use of addresses can lead to nasty bugs; up to you in C; limits in Java One register keeps address of instruction being executed: Program Counter (PC) Basically a pointer to memory: Intel calls it Instruction Address Pointer, a better name CS 61C Faux Midterm Review (51) CS 61C Faux Midterm Review (52) Instructions as Numbers Instruction Formats One word is 32 bits, so divide instruction word into fields. Each field tells computer something about instruction. We could define different fields for each instruction, but MIPS is based on simplicity, so define 3 basic types of instruction formats: R-format I-format J-format (next lecture) I-format: used for instructions with immediates, lw and sw (since the offset counts as an immediate), and the branches (beq and bne), (but not the shift instructions; later) J-format: used for j and jal (see Friday) R-format: used for all other instructions It will soon become clear why the instructions have been partitioned in this way. CS 61C Faux Midterm Review (53) CS 61C Faux Midterm Review (54)