University of Washington x86 Programming III The Hardware/Software Interface CSE351 Winter 2013.

Slides:



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

Fabián E. Bustamante, Spring 2007 Machine-Level Programming II: Control Flow Today Condition codes Control flow structures Next time Procedures.
Instructor: Erol Sahin
University of Washington Announcements Lab 1 due last night Lab 2 release soon HW1 due Monday night 1.
Carnegie Mellon Instructors: Randy Bryant and Dave O’Hallaron Machine-Level Programming III: Switch Statements and IA32 Procedures : Introduction.
University of Washington Last Time For loops  for loop → while loop → do-while loop → goto version  for loop → while loop → goto “jump to middle” version.
Machine-Level Programming II: Control Flow Today Condition codes Control flow structures Next time Procedures.
Machine-Level Programming III: Procedures Apr. 17, 2006 Topics IA32 stack discipline Register saving conventions Creating pointers to local variables CS213.
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.
Stack Activation Records Topics IA32 stack discipline Register saving conventions Creating pointers to local variables February 6, 2003 CSCE 212H Computer.
Recitation 2: Assembly & gdb Andrew Faulring Section A 16 September 2002.
Machine-Level Programming 3 Control Flow Topics Control Flow Switch Statements Jump Tables.
Lee CSCE 312 TAMU 1 Based on slides provided by Randy Bryant and Dave O’Hallaron Machine-Level Programming III: Switch Statements and IA32 Procedures Instructor:
Machine-Level Programming II: Control Flow Topics Condition codes Conditional branches Loops Switch statements CS 105 “Tour of the Black Holes of Computing”
Machine-Level Programming III: Switch Statements and IA32 Procedures Seoul National University.
Machine-Level Programming V: Switch Statements Comp 21000: Introduction to Computer Systems & Assembly Lang Systems book chapter 3* * Modified slides from.
II:1 x86 Assembly - Control. II:2 Alternate reference source Go to the source: Intel 64 and IA32 
1 Bryant and O’Hallaron, Computer Systems: A Programmer’s Perspective, Third Edition Carnegie Mellon Machine-Level Programming II: Control : Introduction.
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.
Carnegie Mellon Machine-Level Programming III: Switch Statements, 1-D Array and IA32 Procedures Lecture, Mar. 7, 2013 These slides are from
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 III: Procedures Topics –IA32 stack discipline –Register saving conventions –Creating pointers to local variables.
תרגול 5 תכנות באסמבלי, המשך
MACHINE-LEVEL PROGRAMMING III: SWITCH STATEMENTS AND IA32 PROCEDURES.
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 II: Control Flow Topics Condition Codes Setting Testing Control Flow If-then-else Varieties of Loops Switch Statements class06.ppt.
Machine-Level Programming 2 Control Flow
X86 Assembly, and C-to-assembly
Conditional Branch Example
Recitation 2 – 2/4/01 Outline Machine Model
Machine-Level Programming II Control Flow Sept. 9, 1999
Carnegie Mellon Machine-Level Programming III: Switch Statements and IA32 Procedures / : Introduction to Computer Systems 7th Lecture, Sep.
Machine-Level Programming II: Control
Chapter 3 Machine-Level Representation of Programs
Machine-Level Representation of Programs II
Machine-Level Programming II: Control Flow
Machine-Level Programming III: Switch Statements and IA32 Procedures
Y86 Processor State Program Registers
Instructors: Majd Sakr and Khaled Harras
Machine-Level Programming 4 Procedures
Roadmap C: Java: Assembly language: OS: Machine code: Computer system:
Condition Codes Single Bit Registers
Machine-Level Programming: Control Flow
Machine-Level Programming 2 Control Flow
Machine-Level Programming II: Control Flow
Machine-Level Programming 2 Control Flow
x86-64 Programming III & The Stack CSE 351 Autumn 2017
Machine-Level Programming III: Procedures Sept 18, 2001
Machine-Level Representation of Programs III
Machine-Level Programming 2 Control Flow
Machine-Level Programming: Introduction
x86-64 Programming III CSE 351 Autumn 2018
Chapter 3 Machine-Level Representation of Programs
X86 Assembly - Control.
Machine-Level Programming II: Control Flow Sept. 12, 2007
CS201- Lecture 8 IA32 Flow Control
Presentation transcript:

University of Washington x86 Programming III The Hardware/Software Interface CSE351 Winter 2013

University of Washington Today’s Topics Switch statements 2 Winter 2013 x86 Programming III

University of Washington Switch Statement Example Multiple case labels  Here: 5, 6 Fall through cases  Here: 2 Missing cases  Here: 4 Lots to manage, we need a jump table long switch_eg (unsigned long x, long y, long z) { long w = 1; switch(x) { case 1: w = y*z; break; case 2: w = y/z; /* Fall Through */ case 3: w += z; break; case 5: case 6: w -= z; break; default: w = 2; } return w; } 3 Winter 2013 x86 Programming III

University of Washington 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[x]; goto *target; switch(x) { case val_0: Block 0 case val_1: Block 1 case val_n-1: Block n–1 } Switch Form Approximate Translation Jump Table Jump Targets 4 Winter 2013 x86 Programming III

University of Washington Jump Table Structure switch(x) { case 1: break; case 2: case 3: break; case 5: case 6: break; default: } 5 Winter 2013 x86 Programming III Jump Table Code Blocks Memory We can use the jump table when x <= 6: if (x <= 6) target = JTab[x]; goto *target; else goto default; C code: 5 6

University of Washington Jump Table.section.rodata.align 4.L62:.long.L61 # x = 0.long.L56 # x = 1.long.L57 # x = 2.long.L58 # x = 3.long.L61 # x = 4.long.L60 # x = 5.long.L60 # x = 6 Jump table switch(x) { case 1: //.L56 w = y*z; break; case 2: //.L57 w = y/z; /* Fall Through */ case 3: //.L58 w += z; break; case 5: case 6: //.L60 w -= z; break; default: //.L61 w = 2; } 6 Winter 2013 x86 Programming III

University of Washington Switch Statement Example (IA32) Setup: switch_eg: pushl %ebp# Setup movl %esp, %ebp# Setup pushl %ebx# Setup movl $1, %ebx# w = 1 movl 8(%ebp), %edx# edx = x movl 16(%ebp), %ecx# ecx = z cmpl $6, %edx# x:6 ja.L61# if > goto default jmp *.L62(,%edx,4)# goto JTab[x] long switch_eg(unsigned long x, long y, long z) { long w = 1; switch(x) {... } return w; } Translation? 7 Winter 2013 x86 Programming III Jump table.section.rodata.align 4.L62:.long.L61 # x = 0.long.L56 # x = 1.long.L57 # x = 2.long.L58 # x = 3.long.L61 # x = 4.long.L60 # x = 5.long.L60 # x = 6

University of Washington Switch Statement Example (IA32) Setup: switch_eg: pushl %ebp# Setup movl %esp, %ebp# Setup pushl %ebx# Setup movl $1, %ebx# w = 1 movl 8(%ebp), %edx# edx = x movl 16(%ebp), %ecx# ecx = z cmpl $6, %edx# x:6 ja.L61# if > goto default jmp *.L62(,%edx,4)# goto JTab[x] Indirect jump Jump table.section.rodata.align 4.L62:.long.L61 # x = 0.long.L56 # x = 1.long.L57 # x = 2.long.L58 # x = 3.long.L61 # x = 4.long.L60 # x = 5.long.L60 # x = 6 8 Winter 2013 x86 Programming III long switch_eg(unsigned long x, long y, long z) { long w = 1; switch(x) {... } return w; }

University of Washington Assembly Setup Explanation Table Structure  Each target requires 4 bytes  Base address at.L62 Jumping: different address modes for target Direct: jmp.L61  Jump target is denoted by label.L61 Indirect: jmp *.L62(,%edx,4)  Start of jump table:. L62  Must scale by factor of 4 (labels are 32-bits = 4 bytes on IA32)  Fetch target from effective address. L62 + edx*4  target = JTab[x]; goto *target; (only for 0  x  6).section.rodata.align 4.L62:.long.L61 # x = 0.long.L56 # x = 1.long.L57 # x = 2.long.L58 # x = 3.long.L61 # x = 4.long.L60 # x = 5.long.L60 # x = 6 Jump table 9 Winter 2013 x86 Programming III

University of Washington Code Blocks (Partial).L61: // Default case movl $2, %ebx # w = 2 movl %ebx, %eax # Return w popl %ebx leave ret.L57: // Case 2: movl 12(%ebp), %eax # y cltd # Div prep idivl %ecx # y/z movl %eax, %ebx # w = y/z # Fall through.L58: // Case 3: addl %ecx, %ebx # w+= z movl %ebx, %eax # Return w popl %ebx leave ret switch(x) {... case 2: //.L57 w = y/z; /* Fall Through */ case 3: //.L58 w += z; break;... default: //.L61 w = 2; } 10 Winter 2013 x86 Programming III

University of Washington Code Blocks (Rest).L60: // Cases 5&6: subl %ecx, %ebx # w –= z movl %ebx, %eax # Return w popl %ebx leave ret.L56: // Case 1: movl 12(%ebp), %ebx # w = y imull %ecx, %ebx # w*= z movl %ebx, %eax # Return w popl %ebx leave ret switch(x) { case 1: //.L56 w = y*z; break;... case 5: case 6: //.L60 w -= z; break;... } 11 Winter 2013 x86 Programming III

University of Washington IA32 Object Code Setup  Label.L61 becomes address 0x  Label.L62 becomes address 0x080488dc : : 77 0c ja : ff dc jmp *0x80488dc(,%edx,4) switch_eg:... ja.L61# if > goto default jmp *.L62(,%edx,4)# goto JTab[x] Assembly Code Disassembled Object Code 12 Winter 2013 x86 Programming III

University of Washington IA32 Object Code (cont.) Jump Table  Doesn’t show up in disassembled code  Can inspect using GDB gdb asm-cntl (gdb) x/7xw 0x080488dc  Examine 7 hexadecimal format “words” (4-bytes each)  Use command “ help x ” to get format documentation 0x080488dc: 0x x x a 0x x x Winter 2013 x86 Programming III

University of Washington Disassembled Targets : bb mov $0x2,%ebx : 89 d8 mov %ebx,%eax : 5b pop %ebx : c9 leave : c3 ret a: 8b 45 0c mov 0xc(%ebp),%eax d: 99 cltd e: f7 f9 idiv %ecx : 89 c3 mov %eax,%ebx : 01 cb add %ecx,%ebx : 89 d8 mov %ebx,%eax : 5b pop %ebx : c9 leave : c3 ret : 29 cb sub %ecx,%ebx b: 89 d8 mov %ebx,%eax d: 5b pop %ebx e: c9 leave f: c3 ret : 8b 5d 0c mov 0xc(%ebp),%ebx : 0f af d9 imul %ecx,%ebx : 89 d8 mov %ebx,%eax : 5b pop %ebx : c9 leave a: c3 ret 14 Winter 2013 x86 Programming III

University of Washington Matching Disassembled Targets : bb mov : 89 d8 mov : 5b pop : c9 leave : c3 ret a: 8b 45 0c mov d: 99 cltd e: f7 f9 idiv : 89 c3 mov : 01 cb add : 89 d8 mov : 5b pop : c9 leave : c3 ret : 29 cb sub b: 89 d8 mov d: 5b pop e: c9 leave f: c3 ret : 8b 5d 0c mov : 0f af d9 imul : 89 d8 mov : 5b pop : c9 leave a: c3 ret 0x x x a 0x x x Winter 2013 x86 Programming III

University of Washington Would you implement this with a jump table? Probably not:  Don’t want a jump table with entries (too big) Question switch(x) { case 0: break; case 10: break; case 52000: break; default: break; } 16 Winter 2013 x86 Programming III

University of Washington Winter x86 Programming III