University of Amsterdam Computer Systems – Control in C Arnoud Visser 1 Computer Systems New to C?

Slides:



Advertisements
Similar presentations
0 - 0.
Advertisements

MULT. INTEGERS 1. IF THE SIGNS ARE THE SAME THE ANSWER IS POSITIVE 2. IF THE SIGNS ARE DIFFERENT THE ANSWER IS NEGATIVE.
Addition Facts
– 1 – , F02 ICS05 Instructor: Peter A. Dinda TA: Bin Lin Recitation 3.
Addition 1’s to 20.
Fabián E. Bustamante, Spring 2007 Machine-Level Programming II: Control Flow Today Condition codes Control flow structures Next time Procedures.
Chapter 7Louden, Programming Languages1 Chapter 7 - Control I: Expressions and Statements "Control" is the general study of the semantics of execution.
Machine-Level Programming II: Control Flow Today Condition codes Control flow structures Next time Procedures.
Machine-Level Programming II: Control Flow Sept. 12, 2002 Topics Condition Codes Setting Testing Control Flow If-then-else Varieties of Loops Switch Statements.
Machine-Level Programming II Control Flow Sept. 13, 2001 Topics Condition Codes –Setting –Testing Control Flow –If-then-else –Varieties of Loops –Switch.
Machine-Level Programming II: Control Flow September 1, 2008 Topics Condition Codes Setting Testing Control Flow If-then-else Varieties of Loops Switch.
– 1 – Homework 1 Count 25 Mean 73.8 Std Min 22 Max 96 Mode 66 Median80.5.
Lecture 25 Generating Code for Basic Blocks Topics Code Generation Readings: April 19, 2006 CSCE 531 Compiler Construction.
Chapter 7Louden, Programming Languages1 Chapter 7 - Control I: Expressions and Statements "Control" is the general study of the semantics of execution.
Machine-Level Programming 3 Control Flow Topics Control Flow Switch Statements Jump Tables.
Machine-Level Programming II: Control Flow Topics Condition codes Conditional branches Loops Switch statements CS 105 “Tour of the Black Holes of Computing”
University of Washington x86 Programming III The Hardware/Software Interface CSE351 Winter 2013.
Machine-Level Programming V: Switch Statements Comp 21000: Introduction to Computer Systems & Assembly Lang Systems book chapter 3* * Modified slides from.
Machine-Level Programming II: Control Flow Topics Condition Codes Setting Testing Control Flow If-then-else Varieties of loops Switch statements CS 105.
University of Washington Today Lab 2 due next Monday! Finish-up control flow Switch statements 1.
Machine-Level Programming 3 Control Flow Topics Control Flow Switch Statements Jump Tables.
Machine-Level Programming II: Control Flow Topics Condition Codes Setting Testing Control Flow If-then-else Varieties of loops Switch statements CS 105.
1 Machine-Level Programming IV: Control: loops Comp 21000: Introduction to Computer Organization & Systems March 2015 Systems book chapter 3* * Modified.
תרגול 5 תכנות באסמבלי, המשך
Machine-Level Programming II Control Flow Sept. 10, 1998 Topics Control Flow –Varieties of Loops –Switch Statements class06.ppt “The course that.
1 Machine-Level Programming V: Control: loops Comp 21000: Introduction to Computer Organization & Systems March 2016 Systems book chapter 3* * Modified.
IA32: Control Flow Topics –Condition Codes Setting Testing –Control Flow If-then-else Varieties of Loops Switch Statements.
Machine-Level Programming II: Control Flow Topics Condition Codes Setting Testing Control Flow If-then-else Varieties of loops Switch statements CS 105.
Machine-Level Programming II Control Flow Sept. 14, 2000 Topics Condition Codes –Setting –Testing Control Flow –If-then-else –Varieties of Loops –Switch.
Machine-Level Programming 2 Control Flow Topics Condition Codes Setting Testing Control Flow If-then-else Varieties of Loops Switch Statements.
Machine-Level Programming II: Control Flow Topics Condition Codes Setting Testing Control Flow If-then-else Varieties of Loops Switch Statements class06.ppt.
Reading Condition Codes (Cont.)
Machine-Level Programming 2 Control Flow
Conditional Branch Example
Recitation 2 – 2/4/01 Outline Machine Model
Machine-Level Programming II: Arithmetic & Control
Machine-Level Programming II Control Flow Sept. 9, 1999
Machine-Level Programming II: Control
Chapter 3 Machine-Level Representation of Programs
Machine-Level Representation of Programs II
Ch. 2 Two’s Complement Boolean vs. Logical Floating Point
Machine-Level Programming II: Control Flow
Machine-Level Programming III: Switch Statements and IA32 Procedures
Instructors: Majd Sakr and Khaled Harras
Machine-Level Programming 4 Procedures
Condition Codes Single Bit Registers
Machine-Level Programming: Control Flow
Carnegie Mellon Wrap-up of Machine-Level Programming II: Control : Introduction to Computer Systems Sept. 18, 2018.
Machine-Level Programming 2 Control Flow
Machine-Level Programming V: Control: loops Comp 21000: Introduction to Computer Organization & Systems Systems book chapter 3* * Modified slides from.
Machine-Level Programming II: Control Flow
Machine-Level Programming 2 Control Flow
Machine-Level Programming III: Procedures Sept 18, 2001
Machine-Level Representation of Programs III
Today Control flow if/while/do while/for/switch
Machine-Level Programming 2 Control Flow
x86 Programming III CSE 351 Autumn 2016
Chapter 3 Machine-Level Representation of Programs
Machine-Level Programming II: Control Flow
X86 Assembly - Control.
Machine-Level Programming II: Control Flow Sept. 12, 2007
Machine-Level Programming V: Control: loops Comp 21000: Introduction to Computer Organization & Systems Systems book chapter 3* * Modified slides from.
CS201- Lecture 8 IA32 Flow Control
Credits and Disclaimers
Presentation transcript:

University of Amsterdam Computer Systems – Control in C Arnoud Visser 1 Computer Systems New to C?

University of Amsterdam Computer Systems – Control in C Arnoud Visser 2 Contents Control Flow –If-then-else –Varieties of Loops –Switch Statements

University of Amsterdam Computer Systems – Control in C Arnoud Visser 3 If-then-else int max(int x, int y) { if (x > y) return x; else return y; } _max: pushl %ebp movl %esp,%ebp movl 8(%ebp),%edx movl 12(%ebp),%eax cmpl %eax,%edx jle L9 movl %edx,%eax L9: movl %ebp,%esp popl %ebp ret Body Set Up Finish

University of Amsterdam Computer Systems – Control in C Arnoud Visser 4 Goto version movl 8(%ebp),%edx# edx = x movl 12(%ebp),%eax# eax = y cmpl %eax,%edx# x : y jle L9# if <= goto L9 movl %edx,%eax# eax = x L9:# Done: int goto_max(int x, int y) { int rval = y; int ok = (x <= y); if (ok) goto done; rval = x; done: return rval; } Skipped when x  y C allows “goto” as means of transferring control Closer to machine-level programming style Generally considered bad coding style

University of Amsterdam Computer Systems – Control in C Arnoud Visser 5 C Code int fact_do (int x) { int result = 1; do { result *= x; x = x-1; } while (x > 1); return result; } Goto Version int fact_goto(int x) { int result = 1; loop: result *= x; x = x-1; if (x > 1) goto loop; return result; } “Do-While” Loop –Use backward branch to continue looping –Only take branch when “while” condition holds

University of Amsterdam Computer Systems – Control in C Arnoud Visser 6 C Code int fact_while (int x) { int result = 1; while (x > 1) { result *= x; x = x-1; }; return result; } First Goto Version int fact_while_goto (int x) { int result = 1; loop: if (!(x > 1)) goto done; result *= x; x = x-1; goto loop; done: return result; } Naïve “While” Loop Translation –Is this code equivalent to the do-while version? –Must jump out of loop if test fails

University of Amsterdam Computer Systems – Control in C Arnoud Visser 7 C Code int fact_while(int x) { int result = 1; while (x > 1) { result *= x; x = x-1; }; return result; } Second Goto Version int fact_while_goto2 (int x) { int result = 1; if (!(x > 1)) goto done; loop: result *= x; x = x-1; if (x > 1) goto loop; done: return result; } Actual “While” Loop Translation –Uses same inner loop as do-while version –Guards loop entry with extra test

University of Amsterdam Computer Systems – Control in C Arnoud Visser 8 C Code while ( Test ) Body Do-While Version if (! Test ) goto done; do Body while( Test ); done: General “While” Translation Goto Version if (! Test ) goto done; loop: Body if ( Test ) goto loop; done:

University of Amsterdam Computer Systems – Control in C Arnoud Visser 9 “For” Loop Example Algorithm –Exploit property that p = p 0 + 2p 1 + 4p 2 + … 2 n–1 p n–1 –Gives: x p = z 0 · z 1 2 · (z 2 2 ) 2 · … · (…((z n –1 2 ) 2 )…) 2 z i = 1 when p i = 0 z i = x when p i = 1 –Complexity O(log p) /* Compute x raised to nonnegative power p */ int ipwr_for(int x, unsigned p) { int result; for (result = 1; p != 0; p = p>>1) { if (p & 0x1) result *= x; x = x*x; } return result; } n–1 times Example 3 10 = 3 2 * 3 8 = 3 2 * ((3 2 ) 2 ) 2

University of Amsterdam Computer Systems – Control in C Arnoud Visser 10 for ( Init ; Test ; Update ) Body int result; for (result = 1; p != 0; p = p>>1) { if (p & 0x1) result *= x; x = x*x; } General Form Init result = 1 Test p != 0 Update p = p >> 1 Body { if (p & 0x1) result *= x; x = x*x; } “For” Loop Example

University of Amsterdam Computer Systems – Control in C Arnoud Visser 11 for ( Init ; Test ; Update ) Body Init ; while ( Test ) { Body Update ; } Goto Version Init ; if (! Test ) goto done; loop: Body Update ; if ( Test ) goto loop; done: While VersionFor Version Do-While Version Init ; if (! Test ) goto done; do { Body Update ; } while ( Test ) done: “For”  “While”

University of Amsterdam Computer Systems – Control in C Arnoud Visser 12 Compiler Implements this –Series of conditionals Good if few cases Slow if many –Jump Table Lookup branch target Possible when cases are small integer constants Prediction = default typedef enum {ADD, MULT, MINUS, DIV, MOD, BAD} op_type; char unparse_symbol(op_type op) { switch (op) { case ADD : return '+'; case MULT: return '*'; case MINUS: return '-'; case DIV: return '/'; case MOD: return '%'; case BAD: return '?'; } Switch Statements

University of Amsterdam Computer Systems – Control in C Arnoud Visser 13 Jump Table Structure Code Block 0 Targ0: Code Block 1 Targ1: Code Block 2 Targ2: Code Block n–1 Targn-1: Targ0 Targ1 Targ2 Targn-1 jtab: target = JTab[op]; goto *target; switch(op) { case val_0: Block 0 case val_1: Block 1 case val_n-1: Block n–1 } Switch Form Approx. Translation Jump Table Jump Targets

University of Amsterdam Computer Systems – Control in C Arnoud Visser 14 Branching Possibilities Setup: unparse_symbol: pushl %ebp# Setup movl %esp,%ebp# Setup movl 8(%ebp),%eax# eax = op cmpl $5,%eax# Compare op : 5 ja.L49# If > goto done jmp *.L57(,%eax,4)# goto Table[op] Enumerated Values ADD0 MULT1 MINUS2 DIV3 MOD4 BAD5 typedef enum {ADD, MULT, MINUS, DIV, MOD, BAD} op_type; char unparse_symbol(op_type op) { switch (op) { } Switch Statement Example

University of Amsterdam Computer Systems – Control in C Arnoud Visser 15 Enumerated Values ADD0 MULT1 MINUS2 DIV3 MOD4 BAD5.section.rodata.align 4.L57:.long.L51#Op = 0.long.L52#Op = 1.long.L53#Op = 2.long.L54#Op = 3.long.L55#Op = 4.long.L56#Op = 5 Table Contents.L51: movl $43,%eax# ’+’ jmp.L49.L52: movl $42,%eax# ’*’ jmp.L49.L53: movl $45,%eax# ’-’ jmp.L49.L54: movl $47,%eax# ’/’ jmp.L49.L55: movl $37,%eax# ’%’ jmp.L49.L56: movl $63,%eax# ’?’ # Fall Through to.L49 Targets & Completion Jump Table

University of Amsterdam Computer Systems – Control in C Arnoud Visser 16 Sparse Switch Example –Not practical to use jump table Would require 1000 entries –Obvious translation into if-then-else would have max. of 9 tests /* Return x/111 if x is multiple && <= otherwise */ int div111(int x) { switch(x) { case 0: return 0; case 111: return 1; case 222: return 2; case 333: return 3; case 444: return 4; case 555: return 5; case 666: return 6; case 777: return 7; case 888: return 8; case 999: return 9; default: return -1; }

University of Amsterdam Computer Systems – Control in C Arnoud Visser 17 Sparse Switch Code Structure –Organizes cases as binary tree –Logarithmic performance <  = > = <> = <> = <> =  =  =  =  =  =

University of Amsterdam Computer Systems – Control in C Arnoud Visser 18 Summarizing C Control –if-then-else –do-while –while –switch Assembler Control –jump –Conditional jump Compiler –Must generate assembly code to implement more complex control Standard Techniques –All loops converted to do- while form –Large switch statements use jump tables

University of Amsterdam Computer Systems – Control in C Arnoud Visser 19 Assignment Practice Problem 3.11