Machine-Level Programming III: Procedures

Similar documents
CS213. Machine-Level Programming III: Procedures

Assembly III: Procedures. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

Assembly III: Procedures. Jo, Heeseung

Machine-level Programming (3)

ASSEMBLY III: PROCEDURES. Jo, Heeseung

The course that gives CMU its Zip! Machine-Level Programming III: Procedures Sept. 17, 2002

Region of memory managed with stack discipline Grows toward lower addresses. Register %esp contains lowest stack address = address of top element

X86 Assembly -Procedure II:1

Page 1. IA32 Stack CISC 360. Machine-Level Programming III: Procedures Sept. 22, IA32 Stack Popping Stack Bottom. IA32 Stack Pushing

IA32 Stack. Lecture 5 Machine-Level Programming III: Procedures. IA32 Stack Popping. IA32 Stack Pushing. Topics. Pushing. Popping

Giving credit where credit is due

IA32 Stack The course that gives CMU its Zip! Machine-Level Programming III: Procedures Sept. 17, IA32 Stack Popping. IA32 Stack Pushing

Machine Programming 3: Procedures

Sungkyunkwan University

IA32 Stack. Stack BoDom. Region of memory managed with stack discipline Grows toward lower addresses. Register %esp contains lowest stack address

Systems I. Machine-Level Programming V: Procedures

211: Computer Architecture Summer 2016

Machine- Level Programming III: Switch Statements and IA32 Procedures

Stack Discipline Jan. 19, 2018

An Experience Like No Other. Stack Discipline Aug. 30, 2006

University of Washington

Procedure Calls. Young W. Lim Sat. Young W. Lim Procedure Calls Sat 1 / 27

hnp://

Procedure Calls. Young W. Lim Mon. Young W. Lim Procedure Calls Mon 1 / 29

Machine- Level Programming III: Switch Statements and IA32 Procedures

CS241 Computer Organization Spring Addresses & Pointers

Assembly I: Basic Operations. Computer Systems Laboratory Sungkyunkwan University

Assembly Language: Function Calls

Assembly I: Basic Operations. Jo, Heeseung

1 /* file cpuid2.s */ 4.asciz "The processor Vendor ID is %s \n" 5.section.bss. 6.lcomm buffer, section.text. 8.globl _start.

ASSEMBLY I: BASIC OPERATIONS. Jo, Heeseung

Assembly Language: Function Calls" Goals of this Lecture"

Assembly Language: Function Calls" Goals of this Lecture"

Assembly Language: Function Calls. Goals of this Lecture. Function Call Problems

CS241 Computer Organization Spring 2015 IA

Assembly III: Procedures. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

X86 Stack Calling Function POV

CS 31: Intro to Systems Functions and the Stack. Martin Gagne Swarthmore College February 23, 2016

Turning C into Object Code Code in files p1.c p2.c Compile with command: gcc -O p1.c p2.c -o p Use optimizations (-O) Put resulting binary in file p

Function Calls COS 217. Reading: Chapter 4 of Programming From the Ground Up (available online from the course Web site)

Machine-Level Programming I: Introduction Jan. 30, 2001

Machine-Level Programming II: Control and Arithmetic

CSE 351: Week 4. Tom Bergan, TA

CMSC 313 Lecture 12. Project 3 Questions. How C functions pass parameters. UMBC, CMSC313, Richard Chang

Assembly Programmer s View Lecture 4A Machine-Level Programming I: Introduction

CISC 360. Machine-Level Programming I: Introduction Sept. 18, 2008

The course that gives CMU its Zip! Machine-Level Programming I: Introduction Sept. 10, 2002

This is a medical robot, guided by a skilled surgeon and designed to get to places doctors are unable to reach without opening a pacent up.

University*of*Washington*

4) C = 96 * B 5) 1 and 3 only 6) 2 and 4 only

Question 4.2 2: (Solution, p 5) Suppose that the HYMN CPU begins with the following in memory. addr data (translation) LOAD 11110

Machine-Level Programming II: Arithmetic & Control /18-243: Introduction to Computer Systems 6th Lecture, 5 June 2012

CPSC W Term 2 Problem Set #3 - Solution

Machine Programming 1: Introduction

Systems Programming and Computer Architecture ( )

Sungkyunkwan University

Data Representa/ons: IA32 + x86-64

Ge-ng at things on the chip you can t easily reach from C

CMSC 313 Fall2009 Midterm Exam 2 Section 01 Nov 11, 2009

COMP 210 Example Question Exam 2 (Solutions at the bottom)

CS 33: Week 3 Discussion. x86 Assembly (v1.0) Section 1G

Machine-Level Programming Introduction

Credits to Randy Bryant & Dave O Hallaron

CMSC 313 Lecture 12 [draft] How C functions pass parameters

Process Layout and Function Calls

Questions about last homework? (Would more feedback be useful?) New reading assignment up: due next Monday

Page # CISC 360. Machine-Level Programming I: Introduction Sept. 18, IA32 Processors. X86 Evolution: Programmerʼs View.

Machine Level Programming II: Arithmetic &Control

Instruction Set Architecture

CIT Week13 Lecture

Instruction Set Architecture

CAS CS Computer Systems Spring 2015 Solutions to Problem Set #2 (Intel Instructions) Due: Friday, March 20, 1:00 pm

Machine Program: Procedure. Zhaoguo Wang

Machine- level Programming

Implementing Threads. Operating Systems In Depth II 1 Copyright 2018 Thomas W. Doeppner. All rights reserved.

CS241 Computer Organization Spring Loops & Arrays

The Hardware/Software Interface CSE351 Spring 2015

IA32 Processors The course that gives CMU its Zip! Machine-Level Programming I: Introduction Sept. 10, X86 Evolution: Programmer s View

Machine-Level Programming II: Arithmetic & Control. Complete Memory Addressing Modes

X86 Assembly -Data II:1

CPEG421/621 Tutorial

Machine-Level Programming Introduction

Register Allocation, iii. Bringing in functions & using spilling & coalescing

Chapter 3 Machine-Level Programming II (Sections )

The Hardware/Software Interface CSE351 Spring 2013

x86 assembly CS449 Fall 2017

h"p://news.illinois.edu/news/12/0927transient_electronics_johnrogers.html

Lecture #16: Introduction to Runtime Organization. Last modified: Fri Mar 19 00:17: CS164: Lecture #16 1

Meet & Greet! Come hang out with your TAs and Fellow Students (& eat free insomnia cookies) When : TODAY!! 5-6 pm Where : 3rd Floor Atrium, CIT

! Starting in 1978 with ! Added more features as time goes on. ! Still support old features, although obsolete

Instruction Set Architecture

CISC 360 Instruction Set Architecture

Lab 10: Introduction to x86 Assembly

System Programming and Computer Architecture (Fall 2009)

Access. Young W. Lim Sat. Young W. Lim Access Sat 1 / 19

4/9/2018. Outline. Chapter 3 Machine-Level Programming II (Sections ) CISC instruction sets. RISC instruction sets. Compare Y86 and IA32

Stack -- Memory which holds register contents. Will keep the EIP of the next address after the call

CSC 2400: Computing Systems. X86 Assembly: Function Calls"

CS429: Computer Organization and Architecture

THEORY OF COMPILATION

Transcription:

Machine-Level Programming III: Procedures

IA32 Region of memory managed with stack discipline Grows toward lower addresses Register indicates lowest stack address address of top element Bottom Increasing Addresses Grows Down Top 2

IA32 Pushing Bottom Increasing Addresses -4 Grows Down Top 3

IA32 Popping Bottom Increasing Addresses +4 Grows Down Top 4

Operation Examples pushl %eax popl %edx 0x110 0x110 0x110 0x10c 0x10c 0x10c 0x108 123 0x108 123 0x108 123 0x104 213 0x104 213 %eax 213 %eax 213 %eax 213 %edx 555 %edx 555 %edx 555 213 0x108 0x108 0x104 0x104 0x108 5

Procedure Control Flow 6

Procedure Call Example 804854e: e8 3d 06 00 00 call 8048b90 <main> 8048553: 50 pushl %eax call 8048b90 0x110 0x110 0x10c 0x10c 0x108 123 0x108 123 0x104 0x8048553 0x108 0x108 0x104 %eip 0x804854e %eip 0x804854e 0x8048b90 %eip is program counter 7

Procedure Return Example 8048591: c3 ret ret 0x110 0x110 0x10c 0x10c 0x108 123 0x108 123 0x104 0x8048553 0x8048553 0x104 0x104 0x108 %eip 0x8048591 %eip 0x8048591 0x8048553 %eip is program counter 8

-Based Languages 9

Call Chain Example ( ) { who(); } 10 Procedure recursive who( ) { (); (); } ( ) { (); } Call Chain who

Frames who Frame proc Top 11

Operation ( ) { who(); } Call Chain Frame 12

Operation who( ) { (); (); } Call Chain who Frame who 13

Operation ( ) { (); } Call Chain who Frame who 14

Operation ( ) { (); } Call Chain who Frame who 15

Operation ( ) { (); } Call Chain who who 16 Frame

Operation ( ) { (); } Call Chain who Frame who 17

Operation ( ) { (); } Call Chain who Frame who 18

Operation who( ) { (); who (); } Call Chain Frame who 19

Operation ( ) { } Call Chain who Frame who 20

Operation who( ) { (); who (); } Call Chain Frame who 21

Operation ( ) { who(); } Call Chain who Frame 22

IA32/Linux Frame Caller Frame Frame () Arguments Return Addr Old Saved Registers + Local Variables () Argument Build 23

Revisiting swap int zip1 = 15213; int zip2 = 91125; void call_swap() { swap(&zip1, &zip2); } Calling swap from call_swap call_swap: pushl $zip2 # Global Var pushl $zip1 # Global Var call swap void swap(int *xp, int *yp) { int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; } High &zip2 &zip1 Resulting 24 Low

Revisiting swap void swap(int *xp, int *yp) { int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; } swap: pushl movl, pushl %ebx movl 12(),%ecx movl 8(),%edx movl (%ecx),%eax movl (%edx),%ebx movl %eax,(%edx) movl %ebx,(%ecx) movl -4(),%ebx movl, popl ret Set Up Body Finish 25

swap Setup #1 Entering Resulting &zip2 &zip1 yp xp Old swap: pushl movl, pushl %ebx 26

swap Setup #2 Entering Resulting 27 &zip2 &zip1 swap: pushl movl, pushl %ebx yp xp Old

swap Setup #3 Entering Resulting 28 &zip2 &zip1 swap: pushl movl, pushl %ebx yp xp Old Old %ebx

Effect of swap Setup Entering Offset (relative to ) Resulting &zip2 12 yp &zip1 8 xp 4 0 Old Old %ebx movl 12(),%ecx # get yp movl 8(),%edx # get xp... Body 29

swap Finish #1 swapʼs Offset Offset 12 8 4 0-4 yp xp Old Old %ebx 12 8 4 0-4 yp xp Old Old %ebx movl -4(),%ebx movl, popl ret 30

swap Finish #2 swapʼs Offset swapʼs Offset 12 8 4 0-4 yp xp Old Old %ebx 12 8 4 0 yp xp Old movl -4(),%ebx movl, popl ret 31

swap Finish #3 swapʼs Offset swapʼs Offset 12 8 4 0 yp xp Old 12 8 4 yp xp movl -4(),%ebx movl, popl ret 32

swap Finish #4 swapʼs Offset 12 8 4 yp xp &zip2 &zip1 Exiting movl -4(),%ebx movl, popl ret 33

Register Saving Conventions : movl $15213, %edx call who addl %edx, %eax ret who: movl 8(), %edx addl $91125, %edx ret 34

Register Saving Conventions 35

IA32/Linux Register Usage Caller-Save Temporaries Callee-Save Temporaries Special %eax %edx %ecx %ebx %esi %edi 36

Recursive Factorial 37 int rfact(int x) { int rval; if (x <= 1) return 1; rval = rfact(x-1); return rval * x; }.globl rfact.type rfact,@function rfact: pushl movl, pushl %ebx movl 8(),%ebx cmpl $1,%ebx jle.l78 leal -1(%ebx),%eax pushl %eax call rfact imull %ebx,%eax jmp.l79.align 4.L78: movl $1,%eax.L79: movl -4(),%ebx movl, popl ret

Rfact Setup Caller pre pre %ebx x Entering Caller 8 4 0 Callee -4 pre pre %ebx x Old Old %ebx rfact: pushl movl, pushl %ebx 38

Rfact Body movl 8(),%ebx # ebx = x cmpl $1,%ebx # Compare x : 1 jle.l78 # If <= goto Term Recursion leal -1(%ebx),%eax # eax = x-1 pushl %eax # Push x-1 call rfact # rfact(x-1) imull %ebx,%eax # rval * x jmp.l79 # Goto done.l78: # Term: movl $1,%eax # return val = 1.L79: # Done: int rfact(int x) { int rval; if (x <= 1) return 1; rval = rfact(x-1) ; return rval * x; } 39

Rfact Recursion leal -1(%ebx),%eax %eax %ebx x Old Old %ebx x-1 x pushl %eax x Old Old %ebx x-1 %eax x-1 %ebx x call rfact x Old Old %ebx x-1 %eax %ebx x-1 x 40

Rfact Result Return from Call imull %ebx,%eax x x Old Old Old %ebx Old %ebx x-1 x-1 %eax (x-1)! %eax (x-1)! x! %ebx x %ebx x 41 Assume that rfact(x-1) returns (x-1)! in register %eax

8 4 0-4 -8 %eax %ebx Rfact Completion movl -4(),%ebx pre pre %ebx x Old pre pre %ebx Old %ebx 8 x x-1 4 0 Old x! movl, popl ret Old x %ebx %eax x! %ebx Old %ebx %eax x! %ebx Old %ebx pre pre %ebx x 42

43 Summary