Inst.eecs.berkeley.edu/~cs61c UCB CS61C : Machine Structures Lecture 12 Instruction Format III and Compilation 2010-07-12 Instructor Paul Pearce.

Slides:



Advertisements
Similar presentations
1 Lecture 3: MIPS Instruction Set Today’s topic:  More MIPS instructions  Procedure call/return Reminder: Assignment 1 is on the class web-page (due.
Advertisements

Lecture 5: MIPS Instruction Set
CS/COE0447 Computer Organization & Assembly Language
Wannabe Lecturer Alexandre Joly inst.eecs.berkeley.edu/~cs61c-te
Lecture 8: MIPS Instruction Set
CS61C L17 Introduction to MIPS: Instruction Representation III (1) Garcia © UCB Lecturer PSOE Dan Garcia inst.eecs.berkeley.edu/~cs61c.
CS 61C L17Introduction to MIPS: Instruction Representation III (1) Garcia, Spring 2004 © UCB Lecturer PSOE Dan Garcia inst.eecs.berkeley.edu/~cs61c.
CS61C L10 : MIPS Instruction Representation II (1) Pearce, Summer 2010 © UCB inst.eecs.berkeley.edu/~cs61c UCB CS61C : Machine Structures Lecture 10 MIPS.
CS61C L18 Running a Program I (1) Garcia, Spring 2007 © UCB Router Security Hole!  Huge security hole has been found – if you have a home router, crackers.
CS61C L14 Introduction to MIPS: Instruction Representation II (1) Garcia © UCB Lecturer PSOE Dan Garcia inst.eecs.berkeley.edu/~cs61c.
CS 61C L09 Instruction Format (1) A Carle, Summer 2005 © UCB inst.eecs.berkeley.edu/~cs61c/su05 CS61C : Machine Structures Lecture #9: MIPS Instruction.
Instruction Representation III (1) Fall 2007 Lecture 11: Disassembly and Pseudo-instructions.
CS61C L14 MIPS Instruction Representation II (1) Garcia, Spring 2007 © UCB Lecturer SOE Dan Garcia inst.eecs.berkeley.edu/~cs61c.
CS 61C L18 Running a Program aka Compiling, Assembling, Loading, Linking (CALL) I (1) Garcia, Fall 2004 © UCB Lecturer PSOE Dan Garcia
CS61C L18 Running a Program aka Compiling, Assembling, Loading, Linking (CALL) I (1) Garcia © UCB Lecturer PSOE Dan Garcia
Instruction Representation II (1) Fall 2007 Lecture 10: Instruction Representation II.
New Direction Service Announced
CS 61C L17 Introduction to MIPS: Instruction Representation III (1) Garcia, Fall 2004 © UCB Lecturer PSOE Dan Garcia inst.eecs.berkeley.edu/~cs61c.
1 Lecture 2: MIPS Instruction Set Today’s topic:  MIPS instructions Reminder: sign up for the mailing list cs3810 Reminder: set up your CADE accounts.
Decoding Machine Language 反組譯 Jen-Chang Liu, Spring 2006 Adapted from
CS61C L16 Floating Point II (1) Garcia, Fall 2006 © UCB Search your code!  Google just released new /* Code Search */, which allows you to specify regular.
Lecture 5 Sept 14 Goals: Chapter 2 continued MIPS assembly language instruction formats translating c into MIPS - examples.
Instruction Representation II (1) Fall 2005 Lecture 10: Instruction Representation II.
CS61C L18 Running a Program I (1) Garcia, Fall 2006 © UCB Berkeley beat-down  #10 Cal bears ate the OU ducks They’ve scored 35, 42, 42, 49, 41.
CS61C L11 MIPS Instruction Rep III, Running a Program I (1) Garcia, Fall 2005 © UCB Lecturer PSOE, new dad Dan Garcia inst.eecs.berkeley.edu/~cs61c.
CS61C L14 MIPS Instruction Representation II (1) Garcia, Fall 2006 © UCB Intel: 80 cores/chip in 5 yrs!  At their developer’s forum in SF on Tuesday,
Inst.eecs.berkeley.edu/~cs61c UCB CS61C : Machine Structures Lecture 14 MIPS Instruction Representation II IBM wants to use “self-assembling”
MIPS Instruction Set Advantages
ISA-2 CSCE430/830 MIPS: Case Study of Instruction Set Architecture CSCE430/830 Computer Architecture Instructor: Hong Jiang Courtesy of Prof. Yifeng Zhu.
CSCI-365 Computer Organization Lecture Note: Some slides and/or pictures in the following are adapted from: Computer Organization and Design, Patterson.
IT253: Computer Organization Lecture 4: Instruction Set Architecture Tonga Institute of Higher Education.
inst.eecs.berkeley.edu/~cs61c UCB CS61C : Machine Structures Lecture 18 – Running a Program I (Compiling, Assembling, Linking, Loading) Researchers.
inst.eecs.berkeley.edu/~cs61c UCB CS61C : Machine Structures Lecture 18 – Running a Program I (Compiling, Assembling, Linking, Loading)
Chapter 10 The Assembly Process. What Assemblers Do Translates assembly language into machine code. Assigns addresses to all symbolic labels (variables.
April 23, 2001Systems Architecture I1 Systems Architecture I (CS ) Lecture 9: Assemblers, Linkers, and Loaders * Jeremy R. Johnson Mon. April 23,
Lecture 4: MIPS Instruction Set
L10 Instruction Representation III (1) Search your code!  Google just released new /* Code Search */, which allows you to specify regular expressions.
CS61C L17 MIPS Instruction Format III (1) Spring 2010 © UCB Lecturer SOE Dan Garcia inst.eecs.berkeley.edu/~cs61c CS61C :
9/29: Lecture Topics Conditional branch instructions
CENG 311 Instruction Representation
EET 4250 Instruction Representation & Formats Acknowledgements: Some slides and lecture notes for this course adapted from Prof. Mary Jane Penn.
CS 61C: Great Ideas in Computer Architecture Running a Program - CALL (Compiling, Assembling, Linking, and Loading) 1 Instructors: Nick Weaver & Vladimir.
Dan Garcia 1 CS 61C: Great Ideas in Computer Architecture MIPS Instruction Representation II.
Lecture 16: 10/29/2002CS170 Fall CS170 Computer Organization and Architecture I Ayman Abdel-Hamid Department of Computer Science Old Dominion University.
CSCI-365 Computer Organization Lecture Note: Some slides and/or pictures in the following are adapted from: Computer Organization and Design, Patterson.
Inst.eecs.berkeley.edu/~cs61c UCB CS61C : Machine Structures Lecture 08 MIPS Instruction Representation I Guest Lecturer Alan Christopher
Inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structures Lecture 14 – Introduction to MIPS Instruction Representation II Lecturer PSOE.
MIPS Instruction Set Advantages
COMPUTER ARCHITECTURE & OPERATIONS I
MIPS Coding Continued.
Lecture 4: MIPS Instruction Set
RISC Concepts, MIPS ISA Logic Design Tutorial 8.
youtube.com/watch?v=hy0ptZisr70
Lecturer PSOE Dan Garcia
MIPS coding.
“Full Throttled” TA Brian Nguyen inst.eecs.berkeley.edu/~cs61c-tc
Lecture 4: MIPS Instruction Set
Computer Architecture & Operations I
Inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structures Lecture 17 – Introduction to MIPS Instruction Representation III Lecturer PSOE.
The University of Adelaide, School of Computer Science
ECE232: Hardware Organization and Design
Instruction encoding The ISA defines Format = Encoding
Lecture 5: Procedure Calls
Instructions and Conditional Execution
CS61C : Machine Structures Lecture 3. 1
Lecturer SOE Dan Garcia
MIPS Coding Continued.
MIPS coding.
Lecturer PSOE Dan Garcia
Inst.eecs.berkeley.edu/~cs61c/su05 CS61C : Machine Structures Lecture #11: FP II & Pseudo Instructions Andy Carle Greet class.
Presentation transcript:

inst.eecs.berkeley.edu/~cs61c UCB CS61C : Machine Structures Lecture 12 Instruction Format III and Compilation 2010-07-12 Instructor Paul Pearce UC Berkeley to offer genetic testing for incoming students This week UCB will begin mailing genetic testing kits to incoming students as part of an orientation program on the topic of personalized medicine. Privacy issues abound. http://tinyurl.com/2c3z8zv

In Review MIPS Machine Language Instruction: 32 bits representing a single instruction Branches use PC-relative addressing, Jumps use absolute addressing. Disassembly is simple and starts by decoding opcode field. (Right now!) opcode rs rt immediate rd funct shamt R I J target address

Outline Disassembly Pseudo-instructions “True” Assembly Language (TAL) vs. “MIPS” Assembly Language (MAL) Begin discussing Compilation

Decoding Machine Language How do we convert 1s and 0s to assembly language and to C code? Machine language  assembly  C? For each 32 bits: Look at opcode to distinquish between R-Format, J-Format, and I-Format. Use instruction format to determine which fields exist. Write out MIPS assembly code, converting each field to name, register number/name, or decimal/hex number. Logically convert this MIPS code into valid C code. Always possible? Unique?

Decoding Example (1/7) Here are six machine language instructions in hexadecimal: 00001025hex 0005402Ahex 11000003hex 00441020hex 20A5FFFFhex 08100001hex Let the first instruction be at address 4,194,304ten (0x00400000hex). Next step: convert hex to binary

Decoding Example (2/7) The six machine language instructions in binary: 00000000000000000001000000100101 00000000000001010100000000101010 00010001000000000000000000000011 00000000010001000001000000100000 00100000101001011111111111111111 00001000000100000000000000000001 1, 4-62 rs rt immediate rd funct shamt R I J target address 2 or 3

Decoding Example (3/7) Select the opcode (first 6 bits) to determine the format: 00000000000000000001000000100101 00000000000001010100000000101010 00010001000000000000000000000011 00000000010001000001000000100000 00100000101001011111111111111111 00001000000100000000000000000001 Look at opcode: 0 means R-Format, 2 or 3 mean J-Format, otherwise I-Format.  Next step: separation of fields Format: R R I R I J

Decoding Example (4/7) Fields separated based on format/opcode: Format: R 2 37 5 8 42 4 +3 32 -1 1,048,577 R I R I J Next step: translate (“disassemble”) to MIPS assembly instructions

Decoding Example (5/7) MIPS Assembly (Part 1): Address: Assembly instructions: 0x00400000 or $2,$0,$0 0x00400004 slt $8,$0,$5 0x00400008 beq $8,$0,3 0x0040000c add $2,$2,$4 0x00400010 addi $5,$5,-1 0x00400014 j 0x100001 0x00400018 Better solution: translate to more meaningful MIPS instructions (fix the branch/jump and add labels, registers)

Decoding Example (6/7) MIPS Assembly (Part 2): or $v0,$0,$0 Loop: slt $t0,$0,$a1 #t0 = 1 if $0 < $a0 #t0 = 0 if $0>= $a0 beq $t0,$0,Exit # goto exit # if $a0 <= 0 add $v0,$v0,$a0 addi $a1,$a1,-1 j Loop Exit: Next step: translate to C code (must be creative!)

Decoding Example (7/7) Before Hex: 00001025hex 0005402Ahex 11000003hex 00441020hex 20A5FFFFhex 08100001hex After C code $v0: product $a0: multiplicand $a1: multiplier product = 0; while (multiplier > 0) { product += multiplicand; multiplier -= 1; } or $v0,$0,$0 Loop: slt $t0,$0,$a1 beq $t0,$0,Exit add $v0,$v0,$a0 addi $a1,$a1,-1 j Loop Exit: Demonstrated Big 61C Idea: Instructions are just numbers, code is treated like data

Review from before: lui So how does lui help us? Example: addi $t0,$t0, 0xABABCDCD becomes: lui $at, 0xABAB ori $at, $at, 0xCDCD add $t0,$t0,$at Now each I-format instruction has only a 16-bit immediate. Wouldn’t it be nice if the assembler would this for us automatically? If number too big, then just automatically replace addi with lui, ori, add

Administrivia Midterm is Friday! 9:30am-12:30 in 100 Lewis! Midterm covers material up to and including Tuesday July 13th. Old midterms online (link at top of page) Lectures and reading materials fair game Bring 1 sheet of notes (front and back) and a pencil. We’ll provide the green sheet. Review session tonight, 6:30pm in 306 Soda There are “CS Illustrated” posters on floating point at the end of today’s handout. Be sure to check them out!

True Assembly Language (1/3) Pseudoinstruction: A MIPS instruction that doesn’t turn directly into a machine language instruction, but into other MIPS instructions What happens with pseudo-instructions? They’re broken up by the assembler into 1 or more “real” MIPS instructions. Some examples follow

Example Pseudoinstructions Register Move move reg2,reg1 Expands to: add reg2,$zero,reg1 Load Immediate li reg,value If value fits in 16 bits: addi reg,$zero,value else: lui reg, upper_16_bits_of_value ori reg,$zero, lower_16_bits

Example Pseudoinstructions Load Address: How do we get the address of an instruction or global variable into a register? la reg,label Again if value fits in 16 bits: addi reg,$zero,label_value else: lui reg, upper_16_bits_of_value ori reg,$zero, lower_16_bits

True Assembly Language (2/3) Problem: When breaking up a pseudo-instruction, the assembler may need to use an extra register If it uses any regular register, it’ll overwrite whatever the program has put into it. Solution: Reserve a register ($1, called $at for “assembler temporary”) that assembler will use to break up pseudo-instructions. Since the assembler may use this at any time, it’s not safe to code with it.

Example Pseudoinstructions Rotate Right Instruction ror reg, value Expands to: srl $at, reg, value sll reg, reg, 32-value or reg, reg, $at “No OPeration” instruction nop Expands to instruction = 0ten, sll $0, $0, 0

Example Pseudoinstructions Wrong operation for operand addu reg,reg,value # should be addiu If value fits in 16 bits, addu is changed to: addiu reg,reg,value else: lui $at, upper 16_bits_of_value ori $at,$at, lower_16_bits addu reg,reg, $at How do we avoid confusion about whether we are talking about MIPS assembler with or without pseudoinstructions?

True Assembly Language (3/3) MAL (MIPS Assembly Language): the set of instructions that a programmer may use to code in MIPS; this includes pseudoinstructions TAL (True Assembly Language): set of instructions (which exist in the MIPS ISA) that can actually get directly translated into a single machine language instruction (32-bit binary string). Green sheet is TAL! A program must be converted from MAL into TAL before translation into 1s & 0s.

Questions on Pseudoinstructions How does MIPS assembler / Mars recognize pseudo-instructions? Answer: It looks for officially defined pseudo-instructions, such as ror and move It looks for special cases where the operand is incorrect for the operation and tries to handle it gracefully

Rewrite TAL as MAL TAL: This time convert to MAL or $v0,$0,$0 Loop: slt $t0,$0,$a1 beq $t0,$0,Exit # goto exit # if $a0 <= 0 add $v0,$v0,$a0 addi $a1,$a1,-1 j Loop Exit: This time convert to MAL It’s OK for this exercise to make up MAL instructions

Rewrite TAL as MAL (Answer) TAL: or $v0,$0,$0 Loop: slt $t0,$0,$a1 beq $t0,$0,Exit add $v0,$v0,$a0 addi $a1,$a1,-1 j Loop Exit: MAL: li $v0,0 Loop: ble $a1,$zero,Exit add $v0,$v0,$a0 sub $a1,$a1,1 j Loop Exit:

Review Disassembly is simple and starts by decoding opcode field. Be creative, efficient when authoring C Assembler expands real instruction set (TAL) with pseudoinstructions (MAL) Only TAL can be converted to raw binary Assembler’s job to do conversion Assembler uses reserved register $at MAL makes it much easier to write MIPS

Overview Interpretation vs Translation Translating C Programs Compiler (next time) Assembler (next time) Linker (next time) Loader (next time) An Example (next time)

Language Execution Continuum An Interpreter is a program that executes other programs. Language translation gives us another option. In general, we interpret a high level language when efficiency is not critical and translate to a lower level language to up performance C Assembly machine language Java bytecode Scheme Java C++ Easy to program Inefficient to interpret Difficult to program Efficient to interpret

Interpretation vs Translation How do we run a program written in a source language? Interpreter: Directly executes a program in the source language Translator: Converts a program from the source language to an equivalent program in another language For example, consider a Scheme program foo.scm

Scheme program: foo.scm Interpretation Scheme Interpreter is just a program that reads a scheme program and performs the functions of that scheme program. Scheme interpreter Scheme program: foo.scm

Translation Scheme Compiler is a translator from Scheme to machine language. The processor is a hardware interpeter of machine language. Hardware Executable (mach lang pgm): a.out Scheme Compiler Scheme program: foo.scm

Interpretation Any good reason to interpret machine language in software? MARS– useful for learning / debugging Apple Macintosh conversion Switched from Motorola 680x0 instruction architecture to PowerPC. Similar issue with switch to x86. Could require all programs to be re-translated from high level language Instead, let executables contain old and/or new machine code, interpret old code in software if necessary (emulation)

Interpretation vs. Translation? (1/2) Generally easier to write interpreter Interpreter closer to high-level, so can give better error messages (e.g., MARS, stk) Translator reaction: add extra information to help debugging (line numbers, names) Interpreter slower (10x?), code smaller (2x?) Interpreter provides instruction set independence: run on any machine

Interpretation vs. Translation? (2/2) Translated/compiled code almost always more efficient and therefore higher performance: Important for many applications, particularly operating systems. Translation/compilation helps “hide” the program “source” from the users: One model for creating value in the marketplace (eg. Microsoft keeps all their source code secret) Alternative model, “open source”, creates value by publishing the source code and fostering a community of developers.

Steps to Starting a Program (translation) Memory Loader Executable (mach lang pgm): a.out Linker Object (mach lang module): foo.o Assembler Assembly program: foo.s Compiler C program: foo.c lib.o

Peer Instruction addi $t0, $t1, 40000 beq $s0, 10, Exit Which of the instructions below are MAL and which are TAL? addi $t0, $t1, 40000 beq $s0, 10, Exit 12 a) MM b) MT c) TM d) TT

Peer Instruction Answer Which of the instructions below are MAL and which are TAL? addi $t0, $t1, 40000 beq $s0, 10, Exit 40,000 > +32,767 =>lui,ori Beq: both must be registers Exit: if > 215, then MAL 12 a) MM b) MT c) TM d) TT

In Conclusion Disassembly is simple and starts by decoding opcode field. Be creative, efficient when authoring C Assembler expands real instruction set (TAL) with pseudoinstructions (MAL) Only TAL can be converted to raw binary Assembler’s job to do conversion Assembler uses reserved register $at MAL makes it much easier to write MIPS Interpretation vs translation

Bonus slides These are extra slides that used to be included in lecture notes, but have been moved to this, the “bonus” area to serve as a supplement. The slides will appear in the order they would have in the normal presentation Bonus

jump example (1/5) j J-Format: opcode = 2 (look up in table) address (shown in hex) 2345ABC4 addi $s3,$zero,1016 2345ABC8 j LABEL 2345ABCC add $t0, $t0, $t0 … 2ABCDE10 LABEL: add $s0,$s0,$s1 … j J-Format: opcode = 2 (look up in table) target address = ??? PC

jump example (2/5) j J-Format: address (shown in hex) 2345ABC4 addi $s3,$zero,1016 2345ABC8 j LABEL 2345ABCC add $t0, $t0, $t0 … 2ABCDE10 LABEL: add $s0,$s0,$s1 … j J-Format: We want to jump to 0x2ABCDE10. As binary: 00101010101111001101111000010000 Note: The first 4 bits of PC+4 and the target are the same! That’s why we can do this! PC Target address 31

jump example (3/5) j J-Format: binary representation: 000010 address (shown in hex) 2345ABC4 addi $s3,$zero,1016 2345ABC8 j LABEL 2345ABCC add $t0, $t0, $t0 … 2ABCDE10 LABEL: add $s0,$s0,$s1 … j J-Format: PC binary representation: 000010 10101011110011011110000100 hexadecimal representation: 0AAF 3784hex

jump example (4/5) J How do we reconstruct the PC?: address (shown in hex) 2345ABC4 22D5 FFCEhex # addi … 2345ABC8 0AAF 3784hex # jump … 2345ABCC 012A 4020hex # add … … PC Machine level Instruction (binary representation): 000010 10101011110011011110000100 Target address Jump

jump example (5/5) J How do we reconstruct the PC?: address (shown in hex) 2345ABC4 22D5 FFCEhex # addi … 2345ABC8 0AAF 3784hex # jump … 2345ABCC 012A 4020hex # add … … PC New PC = { (PC+4)[31..28], target address, 00 } 10101011110011011110000100 Target address 31 0010 00