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

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

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

Lecture #6 Intro MIPS; Load & Store

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

UCB CS61C : Machine Structures

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

CS61C : Machine Structures

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

CS430 - Computer Architecture William J. Taffe Fall 2002 using slides from. CS61C - Machine Structures Dave Patterson Fall 2000

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

CS61C Machine Structures. Lecture 1 Introduction. 8/27/2006 John Wawrzynek (Warzneck)

CS61C Machine Structures. Lecture 1 Introduction. 8/25/2003 Brian Harvey. John Wawrzynek (Warznek) www-inst.eecs.berkeley.

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

ECE232: Hardware Organization and Design

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

I ve been getting this a lot lately So, what are you teaching this term? Computer Organization. Do you mean, like keeping your computer in place?

CS61C : Machine Structures

ECE232: Hardware Organization and Design

CMPE324 Computer Architecture Lecture 2

Reduced Instruction Set Computer (RISC)

Reduced Instruction Set Computer (RISC)

Math 230 Assembly Programming (AKA Computer Organization) Spring 2008

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

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

Levels in memory hierarchy

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

Announcements HW1 is due on this Friday (Sept 12th) Appendix A is very helpful to HW1. Check out system calls

Math 230 Assembly Programming (AKA Computer Organization) Spring MIPS Intro

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

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

CS 110 Computer Architecture Lecture 5: Intro to Assembly Language, MIPS Intro

Operations, Operands, and Instructions

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

Overview COMP Microprocessors and Embedded Systems. Lecture 11: Memory Access - I. August, 2003

UCB CS61C : Machine Structures

Levels of Programming. Registers

ECE 154A Introduction to. Fall 2012

CSEE 3827: Fundamentals of Computer Systems

IT 252 Computer Organization and Architecture. Introduction. Chia-Chi Teng

Computer Organization MIPS ISA

Chapter 2 Instruction: Language of the Computer

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

CPS104 Computer Organization Lecture 1. CPS104: Computer Organization. Meat of the Course. Robert Wagner

Instructors: Randy H. Katz David A. PaHerson hhp://inst.eecs.berkeley.edu/~cs61c/fa10. Fall Lecture #1. Agenda

Instruction Set Architecture part 1 (Introduction) Mehran Rezaei

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

CPS104 Computer Organization Lecture 1

Instructions: Language of the Computer

EECE 321: Computer Organization

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

Chapter 2A Instructions: Language of the Computer

Computer Architecture

ECE 15B COMPUTER ORGANIZATION

Chapter 2. Instructions:

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

14:332:331. Lecture 1

Alternate definition: Instruction Set Architecture (ISA) What is Computer Architecture? Computer Organization. Computer structure: Von Neumann model

UCB CS61C : Machine Structures

Memory, Data, & Addressing I

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

CS 110 Computer Architecture. Lecture 2: Introduction to C, Part I. Instructor: Sören Schwertfeger.

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

CS3350B Computer Architecture

CS 110 Computer Architecture. Lecture 2: Introduction to C, Part I. Instructor: Sören Schwertfeger.

Computer Architecture. Lecture 2 : Instructions

Agenda. Old School CS61c. Agenda. New School CS61c 8/26/10. CS 61C: Great Ideas in Computer Architecture (Machine Structures)

Processor. Lecture #2 Number Rep & Intro to C classic components of all computers Control Datapath Memory Input Output

CISC 360. Computer Architecture. Seth Morecraft Course Web Site:

EEC 581 Computer Architecture Lecture 1 Review MIPS

ECE369. Chapter 2 ECE369

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

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

CS61C Review of Cache/VM/TLB. Lecture 26. April 30, 1999 Dave Patterson (http.cs.berkeley.edu/~patterson)

CPE300: Digital System Architecture and Design. Fall 2011 MW 17:30-18:45 CBC C316

ECE331: Hardware Organization and Design

Intro to Math 230 Assembly Language Programming. Lecture # 01 01/15/08

ECE 486/586. Computer Architecture. Lecture # 6

EECS Computer Organization Fall Based on slides by the author and prof. Mary Jane Irwin of PSU.

Computer Systems and Networks. ECPE 170 Jeff Shafer University of the Pacific. MIPS Assembly

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

Lecture 3: The Instruction Set Architecture (cont.)

Lecture 3: The Instruction Set Architecture (cont.)

Hardware Level Organization

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

Stack. Heap. Static. Code

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

378: Machine Organization and Assembly Language

CENG3420 Lecture 03 Review

Chapter 1. Computer Abstractions and Technology. Lesson 3: Understanding Performance

CISC 662 Graduate Computer Architecture. Lecture 4 - ISA

Inf2C - Computer Systems Lectures 3-4 Assembly Language

Chapter 2. Instruction Set Architecture (ISA)

Part II Instruction-Set Architecture. Jan Computer Architecture, Instruction-Set Architecture Slide 1

CS61C : Machine Structures

Chapter 1. Computer Abstractions and Technology

Course Administration

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

Lecture 17 Introduction to Memory Hierarchies" Why it s important " Fundamental lesson(s)" Suggested reading:" (HP Chapter

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

Transcription:

CS61C C/Assembler Operators and Operands Lecture 2 January 22, 1999 Dave Patterson (http.cs.berkeley.edu/~patterson) www-inst.eecs.berkeley.edu/~cs61c/schedule.html cs 61C L2 Asm Ops.1

Machine Structures Review #1/3 Software Hardware Application (Explorer) Compiler Assembler Processor Memory Operating System (Windows 98) Datapath & Control I/O system 61C Instruction Set Architecture Digital Design Circuit Design transistors Coordination of many levels of abstraction cs 61C L2 Asm Ops.2

Review #2/3 Continued Rapid Improvement in Computing 2X every 1.5 years; processor speed, memory size, disk capacity; Moore s Law as enabler (2X transistors/chip/1.5 yrs) 5 classic components of all computers 1. Control 2. Datapath 3. Memory 4. Input 5. Output } Processor cs 61C L2 Asm Ops.3

Review #3/3 15 weeks to learn big ideas in CS&E Principle of abstraction, used to build systems as layers Compilation v. interpretation to move down layers of system Pliable Data: a program determines what it is Stored program concept: instructions are data Principle of Locality, exploited via a memory hierarchy (cache) Greater performance by exploiting parallelism Principles/pitfalls of performance measurement cs 61C L2 Asm Ops.4

Overview C operators, operands (2 min) MIPS Assembly Instructions (5 min) Compilation (5 min) MIPS Assembly Operands: Registers (5) Administrivia, Computers in the News (5 min) MIPS Assembly Operands: Memory (20) C/Assembly Examples (5 min) Conclusion (2 min) cs 61C L2 Asm Ops.5

C Operators/Operands Arithmetic operators: +, -, *, /, % (mod) Assignment: Variable = expression Operands: Variables: lower, upper, fahr, celsius Constants: e.g., 0, 1000, -17, 15 In C (and most High Level Languages) variables declared 1st and given a type Example: int fahr, celsius; int a, b, c, d, e; cs 61C L2 Asm Ops.6

C Operators/Operands Examples a = b + c; a = b + c + d - e; celsius = 5 * (fahr - 32) / 9; Called Assignment statements cs 61C L2 Asm Ops.7

Assembly Operators Syntax of Assembly Operator 1) operation by name 2) operand getting result 3) 1st operand for operation 4) 2nd operand for operation Ex. add b to c and put the result in a: add a, b, c Called an (assembly language) Instruction Equivalent assignment statement in C: cs 61C L2 Asm Ops.8 a = b + c;

Assembly Operators/Instructions MIPS Assembly Syntax is rigid: 1 operation, 3 variables cs 61C L2 Asm Ops.9 Why? Keep Hardware simple via regularity How do following C statement? a = b + c + d - e; Break into multiple instructions add a, b, c # a = sum of b & c add a, a, d # a = sum of b,c,d sub a, a, e # a = b+c+d-e To right of sharp (#) is a comment terminated by end of the line C comments have format /* comment */, can span many lines

Assembly Operators/Intructions Note: Unlike C (and most other HLL), each line of assembly contains at most 1 instruction cs 61C L2 Asm Ops.10

Compilation How turn notation programmers prefer into notation computer understands? Program to translate C statements into Assembly Language instructions; called a compiler Example: compile by hand this C code: a = b + c; d = a - e; Easy: cs 61C L2 Asm Ops.11 add a, b, c sub d, a, e Big Idea: compiler translates notation from 1 level of abstraction to lower level

Compilation 2 Example: compile by hand this C code: f = (g + h) - (i + j); First sum of g and h. Where put result? add f,g,h # f contains g+h Now sum of i and j. Where put result? Cannot use f! Compiler creates temporary variable to hold sum: t1 add t1,i,j # t1 contains i+j Finally produce difference sub f,f,t1 # f=(g+h)-(i+j) cs 61C L2 Asm Ops.12

Compilation 2 Summary C statement (5 operands, 3 operators): f = (g + h) - (i + j); Becomes 3 assembly instructions (6 unique operands, 3 operators): add f,g,h # f contains g+h add t1,i,j # t1 contains i+j sub f,f,t1 # f=(g+h)-(i+j) In general, each line of C produces many assembly instructions One reason why people program in C vs. Assembly; fewer lines of code Other reasons? cs 61C L2 Asm Ops.13

Assembly Operands Unlike HLL, assembly instructions cannot use variables Why not? Keep Hardware Simple Instruction operands are registers: limited number of special locations; 32 registers in MIPS Why 32? Smaller is faster Each MIPS register is 32 bits wide Groups of 32 bits called a word in MIPS cs 61C L2 Asm Ops.14

Assembly Operands: Registers Naming of 32 registers: instead of r0, r1,, r31, use $s0, $s1, for registers corresponding to C variables $t0, $t1, for registers corresponding to temporary variables Will explain mapping convention later of $s0, $s1,, $t0, $t1,, to r0, r1, Note: whereas C declares its operands, Assembly operands (registers) are fixed and not declared cs 61C L2 Asm Ops.15

Compilation using Registers Compile by hand using register names: f = (g + h) - (i + j); f maps onto $s0 g maps onto $s1 h maps onto $s2 i maps onto $s3 j maps onto $s4 MIPS Instructions: Try this yourself during Adminstrivia cs 61C L2 Asm Ops.16

Administrivia Grading: fixed scale, not on a curve Class voted cheating penalty: cs 61C L2 Asm Ops.17 0 for problem on lab, assignment 0 for project, exam Per university rules, contact Office of Student Conduct to report cheating To try to switch sections go to old and new sections to ask for TAs OK Viewing lectures again: 100 Wheeler T/T 5-6 (old tapes in 205 McLaughlin) Readings: Ch.3 COD 3.1-3.3,3.5,3.8

Administrivia Read web page: Intro, FAQ, Schedule www-inst.eecs/~cs61c Midterm 3/17 5-8 PM, Final 5/12 5-8 PM 1st homework: COD Exercises 1.1-1.16, 1.18, 1.21-1.23, 1.25, 1.27-1.30, 1.34-1.41,1.43-1.44, 1.56; Due Wed. 1/27 7PM (do by yourself); readings all but 1.4,1.5 1st project: C spelling checker philspel Due Wed. 2/3 7PM (do by yourself) www-inst.eecs/~cs61c/handouts/proj1.pdf 1st lab: Read SPIM (A-39 to A-48); see newsgroup for what to do before lab cs 61C L2 Asm Ops.18

Computers in the News (see slide #2) Browsers and Borders Are Argued at the Microsoft Trial, N.Y. Times 1/20/99... the Government spent most of today attacking the company's central defense-- that its Internet browsing software is a seamless feature of its Windows operating system and not a stand-alone product. The Government is trying to prove that the browser and operating system are two products, illegally bundled together mainly to stifle competition.... even Michael Dertouzos[MIT],... who was initially on Microsoft's witness list but was later dropped -- had testified in a deposition that he considered the browser an application program, separate from the operating system. cs 61C L2 Asm Ops.19

Compilation using Registers Compile by hand using registers: f = (g + h) - (i + j); f: $s0, g: $s1, h: $s2, i: $s3, j: $s4 MIPS Instructions: add $s0,$s1,$s2 # $s0 = g+h add $t1,$s3,$s4 # $t1 = i+j sub $s0,$s0,$t1 # f=(g+h)-(i+j) cs 61C L2 Asm Ops.20

Assembly Operands: Memory C variables map onto registers; what about data structures like arrays? 1 of 5 components of a computer: memory contains such data structures But arithmetic instructions only operate on registers? Data transfer instructions transfer data between registers and memory Think of memory as a large single dimensioned array, starting at 0 cs 61C L2 Asm Ops.21

Data Transfer Instruction: Memory to Reg Load: moves instruction from memory to register Syntax: 1) operation name 2) register to be loaded 3) constant and register to access memory MIPS name, lw for load word: Example: lw $t0, 8($s3) Called offset Called base register cs 61C L2 Asm Ops.22

Compilation when Operand is in Memory Compile by hand using registers: g = h + A[8]; g: $s1, h: $s2, $s3: starting address (base address) of array A Since A[8] is in memory, 1st transfer from memory to (temporary) register: lw $t0,8($s3) # $t0 gets A[8] Adds 8 to $s3 to select A[8], puts into $t0 Next add it to h and place in g add $s1,$s2,$t0 # $s1 = h+a[8] cs 61C L2 Asm Ops.23

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 word addresses differ by 4 Memory[0], Memory[4], Memory[8], cs 61C L2 Asm Ops.24

Notes about Memory Pitfall: Forgetting that sequential word addresses in machines with byte addressing do not differ by 1. Many an assembly language programmer has toiled over errors made by assuming that the address of the next word can be found by incrementing the address in a register by 1 instead of by the word size in bytes. Another advantage of compilers: they use proper byte address for words cs 61C L2 Asm Ops.25

Compilation with Memory Revisited 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 L2 Asm Ops.26

More Notes about Memory How are bytes numbered in a word? little endian byte 0 3 2 1 0 msb lsb 0 1 2 3 big endian byte 0 Gulliver s Travels: Which end of egg to open? Cohen, D. On holy wars and a plea for peace (data transmission). Computer, vol.14, (no.10), Oct. 1981. p.48-54. Little Endian address of least significant byte: Intel 80x86, DEC Alpha Big Endian address of most significant byte HP PA, IBM/Motorola PowerPC, SGI, Sparc Russian Czar to settle arbitrary decision? cs 61C L2 Asm Ops.27

More Notes about Memory: Alignment MIPS requires that all words start at addresses that are multiples of 4 Aligned 0 1 2 3 Not Aligned cs 61C L2 Asm Ops.28 Called Alignment: objects must fall on address that is multiple of their size. (Later we ll see how alignment helps performance)

Data transfer: Register to Memory Store: complementary instruction to load MIPS: sw for Store Word, same syntax as lw Example: A[12] = h; base address of A: $s3, h: $s2 MIPS assembly instructions: sw $s2,48($s3) # h into A[12] cs 61C L2 Asm Ops.29

Compile with variable index What if array index not a constant? g = h + A[i]; g: $s1, h: $s2, i: $s4, $s3:base address of A To load A[i] into a register, first turn i into a byte address; multiply by 4 How multiply using adds? i + i = 2i, 2i + 2i = 4i add $t1,$s4,$s4 # $t1 = 2*i add $t1,$t1,$t1 # $t1 = 4*i cs 61C L2 Asm Ops.30

Compile with variable index, con t Next add to base of A: add $t1,$t1,$s3 #$t1=address of #A[i] (4*i+$s3) Now load A[i] into a temporary register: lw $t0,0($t1) # Temp $t0 = A[i] Finally add to h and put sum in g: add $s1,$s2,$t0 # g = h + A[i] cs 61C L2 Asm Ops.31

Compile with variable index: Summary C statement: g = h + A[i]; Compiled MIPS assembly instructions: add $t1,$s4,$s4 # $t1 = 2*i add $t1,$t1,$t1 # $t1 = 4*i add $t1,$t1,$s3 #$t1=addr A[i] lw $t0,0($t1) # $t0 = A[i] add $s1,$s2,$t0 # g = h + A[i] cs 61C L2 Asm Ops.32

Role of Registers vs. Memory What if more variables than registers? Compiler trys to keep most frequently used variable in registers Writing less common to memory: spilling Why not keep all variables in memory? Smaller is faster: registers are faster than memory Registers more versatile: - MIPS arithmetic instruction 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 cs 61C L2 Asm Ops.33

(If time allows) Do it yourself: Compile this MIPS code: B[i] = h + A[i]; h: $s2, i: $s4, $s3:base address of A, $s5:base address of B cs 61C L2 Asm Ops.34

(If time allows) Do it yourself: Compile this C code into MIPS: B[i] = h + A[i]; h: $s2, i: $s4, $s3:base address of A, $s5:base address of B add $t1,$s4,$s4 # $t1 = 2*i add $t1,$t1,$t1 # $t1 = 4*i add $t2,$t1,$s3 #$t2=addr A[i] lw $t0,0($t2) # $t0 = A[i] add $t0,$s2,$t0 # $t0 = h+a[i] add $t3,$t1,$s5 #$t3=addr B[i] sw $t0,0($t3) # B[i]= h+a[i] cs 61C L2 Asm Ops.35

And in Conclusion (2 slides)... 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 L2 Asm Ops.36

And in Conclusion (last slide)... 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] Next: difference between computers and calculators: Making decisions cs 61C L2 Asm Ops.37