Machine Programming I: Basics

Similar documents
Instruction Set Architectures

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

Instruction Set Architectures

Today: Machine Programming I: Basics

Last Time: Floating Point. Intel x86 Processors. Lecture 4: Machine Basics Computer Architecture and Systems Programming ( )

MACHINE-LEVEL PROGRAMMING I: BASICS COMPUTER ARCHITECTURE AND ORGANIZATION

MACHINE-LEVEL PROGRAMMING I: BASICS

Carnegie Mellon. 5 th Lecture, Jan. 31, Instructors: Todd C. Mowry & Anthony Rowe

Machine- level Programming

Today: Machine Programming I: Basics. Machine Level Programming I: Basics. Intel x86 Processors. Intel x86 Evolution: Milestones

CS241 Computer Organization Spring Introduction to Assembly

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

Machine Level Programming I: Basics. Credits to Randy Bryant & Dave O Hallaron

Machine Level Programming I: Basics

+ Machine Level Programming: x86-64 History

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

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

Giving credit where credit is due

X86 Assembly -Data II:1

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

Systems I. Machine-Level Programming I: Introduction

Today: Machine Programming I: Basics. Machine-Level Programming I: Basics. Intel x86 Processors. Intel x86 Evolution: Milestones

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

Roadmap. Java: Assembly language: OS: Machine code: Computer system:

The von Neumann Machine

CS241 Computer Organization Spring 2015 IA

Machine-Level Programming Introduction

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

Software. Hardware. x86 basics. ISA View. a brief history of x86 10/6/15. Program, Application. Programming Language. Compiler/Interpreter

Chapter 3 Machine-Level Programming I: Basics. Bryant and O Hallaron, Computer Systems: A Programmer s Perspective, Third Edition

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

The von Neumann Machine

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

Machine-level Representation of Programs. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

Computer Systems Architecture I. CSE 560M Lecture 3 Prof. Patrick Crowley

Machine- Level Programming I: Basics

The Hardware/Software Interface CSE351 Spring 2015

Today: Machine Programming I: Basics. Machine-Level Programming I: Basics. Intel x86 Processors. Intel x86 Evolution: Milestones

Machine-Level Programming I: Basics

ASSEMBLY I: BASIC OPERATIONS. Jo, Heeseung

Assembly I: Basic Operations. Computer Systems Laboratory Sungkyunkwan University

Assembly I: Basic Operations. Jo, Heeseung

Machine-Level Programming Introduction

Machine Programming 1: Introduction

CS429: Computer Organization and Architecture

Machine Level Programming: Basics

Machine-Level Programming I Introduction

Machine Level Programming: Basics

Machine-Level Programming I Introduction

Introduction to IA-32. Jo, Heeseung

INTRODUCTION TO IA-32. Jo, Heeseung

Machine- Level Programming: Basics

Assembly I: Basic Operations. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

x86 Programming I CSE 351 Winter

CS 31: Intro to Systems ISAs and Assembly. Martin Gagné Swarthmore College February 7, 2017

Assembly level Programming. 198:211 Computer Architecture. (recall) Von Neumann Architecture. Simplified hardware view. Lecture 10 Fall 2012

Machine-Level Programming I: Basics

Bryant and O Hallaron, Computer Systems: A Programmer s Perspective, Third Edition. Carnegie Mellon

x86 64 Programming I CSE 351 Autumn 2018 Instructor: Justin Hsia

Credits and Disclaimers

CS165 Computer Security. Understanding low-level program execution Oct 1 st, 2015

Instruction Set Architectures

CSE2421 FINAL EXAM SPRING Name KEY. Instructions: Signature

CS 31: Intro to Systems ISAs and Assembly. Kevin Webb Swarthmore College February 9, 2016

The Hardware/Software Interface CSE351 Spring 2015

CS 31: Intro to Systems ISAs and Assembly. Kevin Webb Swarthmore College September 25, 2018

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

Credits and Disclaimers

CS241 Computer Organization Spring Addresses & Pointers

Compila(on, Disassembly, and Profiling

x86 Programming I CSE 351 Autumn 2016 Instructor: Justin Hsia

Process Layout and Function Calls

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

CS429: Computer Organization and Architecture

Machine-level Programming (3)

Machine-Level Programming I: Basics

Complex Instruction Set Computer (CISC)

Machine Programming 3: Procedures

ASSEMBLY III: PROCEDURES. Jo, Heeseung

Assembly III: Procedures. Jo, Heeseung

X86 Addressing Modes Chapter 3" Review: Instructions to Recognize"

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

C to Machine Code x86 basics: Registers Data movement instructions Memory addressing modes Arithmetic instructions

Lecture 15 Intel Manual, Vol. 1, Chapter 3. Fri, Mar 6, Hampden-Sydney College. The x86 Architecture. Robb T. Koether. Overview of the x86

CS213. Machine-Level Programming III: Procedures

Access. Young W. Lim Fri. Young W. Lim Access Fri 1 / 18

Binghamton University. CS-220 Spring x86 Assembler. Computer Systems: Sections

Sungkyunkwan University

Reading assignment. Chapter 3.1, 3.2 Chapter 4.1, 4.3

The x86 Architecture

hnp://

UMBC. A register, an immediate or a memory address holding the values on. Stores a symbolic name for the memory location that it represents.

Machine-level Representation of Programs

Machine- Level Programming II: Arithme6c & Control

CSC 252: Computer Organization Spring 2018: Lecture 5

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

administrivia today start assembly probably won t finish all these slides Assignment 4 due tomorrow any questions?

CMSC 313 COMPUTER ORGANIZATION & ASSEMBLY LANGUAGE PROGRAMMING LECTURE 03, SPRING 2013

University*of*Washington*

MODE (mod) FIELD CODES. mod MEMORY MODE: 8-BIT DISPLACEMENT MEMORY MODE: 16- OR 32- BIT DISPLACEMENT REGISTER MODE

Transcription:

Machine- level Representa1on of Programs (Chapter 3): Machine- Programming Basics Instructor: Sanjeev Se1a 1 Machine Programming I: Basics History of Intel processors and architectures C, assembly, machine code Assembly Basics: Registers, operands, move 2 1

Intel x86 Processors Totally dominate computer market EvoluIonary design Backwards compa1ble up un1l 8086, introduced in 1978 Added more features as 1me goes on Complex instrucion set computer (CISC) Many different instruc1ons with many different formats But, only small subset encountered with Linux programs Hard to match performance of Reduced Instruc1on Set Computers (RISC) But, Intel has done just that! 3 Intel x86 EvoluIon: Milestones Name Date Transistors MHz 8086 1978 29K 5-10 First 16- bit processor. Basis for IBM PC & DOS 1MB address space 386 1985 275K 16-33 First 32 bit processor, referred to as IA32 Added flat addressing Capable of running Unix 32- bit Linux/gcc uses no instruc1ons introduced in later models PenIum 4F 2005 230M 2800-3800 First 64- bit processor Meanwhile, Pen1um 4s (Netburst arch.) phased out in favor of Core line 4 2

Intel x86 Processors: Overview Architectures Processors X86-16 8086 X86-32/IA32 MMX SSE SSE2 286 386 486 PenIum PenIum MMX PenIum III PenIum 4 SSE3 X86-64 / EM64t SSE4 PenIum 4E PenIum 4F Core 2 Duo Core i7 IA: ozen redefined as latest Intel architecture Ime 5 Intel x86 Processors, contd. Machine EvoluIon 486 1989 1.9M Pen1um 1993 3.1M Pen1um/MMX 1997 4.5M Pen1umPro 1995 6.5M Pen1um III 1999 8.2M Pen1um 4 2001 42M Core 2 Duo 2006 291M Added Features Instruc1ons to support mul1media opera1ons Parallel opera1ons on 1, 2, and 4- byte data, both integer & FP Instruc1ons to enable more efficient condi1onal opera1ons Linux/GCC EvoluIon Very limited 6 3

More InformaIon Intel processors (Wikipedia) Intel microarchitectures 7 New Species: ia64, then IPF, then Itanium, Name Date Transistors Itanium 2001 10M First shot at 64- bit architecture: first called IA64 Radically new instruc1on set designed for high performance Can run exis1ng IA32 programs On- board x86 engine Joint project with Hewlef- Packard Itanium 2 2002 221M Big performance boost Itanium 2 Dual- Core 2006 1.7B Itanium has not taken off in marketplace Lack of backward compa1bility, no good compiler support, Pen1um 4 got too good 8 4

x86 Clones: Advanced Micro Devices (AMD) Historically AMD has followed just behind Intel A lifle bit slower, a lot cheaper Then Recruited top circuit designers from Digital Equipment Corp. and other downward trending companies Built Opteron: tough compe1tor to Pen1um 4 Developed x86-64, their own extension to 64 bits Recently Intel much quicker with dual core design Intel currently far ahead in performance em64t backwards compa1ble to x86-64 9 Intel s 64- Bit Intel Adempted Radical ShiZ from IA32 to IA64 Totally different architecture (Itanium) Executes IA32 code only as legacy Performance disappoin1ng AMD Stepped in with EvoluIonary SoluIon x86-64 (now called AMD64 ) Intel Felt Obligated to Focus on IA64 Hard to admit mistake or that AMD is befer 2004: Intel Announces EM64T extension to IA32 Extended Memory 64- bit Technology Almost iden1cal to x86-64! Meanwhile: EM64t well introduced, however, sill ozen not used by OS, programs 10 5

Our Coverage IA32 The tradi1onal x86 x86-64/em64t The emerging standard Will cover both but emphasis on IA32 Sec1on 3.13 covers x86-64 11 Machine Programming I: Basics History of Intel processors and architectures C, assembly, machine code Assembly Basics: Registers, operands, move 12 6

DefiniIons Architecture: (also instrucion set architecture: ISA) The parts of a processor design that one needs to understand to write assembly code. Microarchitecture: ImplementaIon of the architecture. Architecture examples: instrucion set specificaion, registers. Microarchitecture examples: cache sizes and core frequency. Example ISAs (Intel): x86, IA, IPF 13 Assembly Programmer s View CPU PC Registers CondiIon Codes Addresses Data Instruc1ons Memory Object Code Program Data OS Data Programmer- Visible State PC: Program counter Address of next instruc1on Called EIP (IA32) or RIP (x86-64) Register file Heavily used program data Condi1on codes Store status informa1on about most recent arithme1c opera1on Used for condi1onal branching Memory Stack Byte addressable array Code, user data, (some) OS data Includes stack used to support procedures 14 7

Turning C into Object Code Code in files p1.c p2.c! Compile with command: gcc -O p1.c p2.c -o p! Use op1miza1ons (-O) Put resul1ng binary in file p text C program (p1.c p2.c) Compiler (gcc -S) text Asm program (p1.s p2.s) binary binary Assembler (gcc or as) Object program (p1.o p2.o) Linker (gcc or ld) Executable program (p) StaIc libraries (.a) 15 Compiling Into Assembly C Code int sum(int x, int y) { int t = x+y; return t; } Generated IA32 Assembly sum: pushl movl %esp, movl 12(),%eax addl 8(),%eax movl,%esp popl ret Obtain with command gcc -O -S code.c Produces file code.s Some compilers use single instrucion leave 16 8

Assembly CharacterisIcs: Data Types Integer data of 1, 2, or 4 bytes Data values Addresses (untyped pointers) FloaIng point data of 4, 8, or 10 bytes No aggregate types such as arrays or structures Just con1guously allocated bytes in memory 17 Assembly CharacterisIcs: OperaIons Perform arithmeic funcion on register or memory data Transfer data between memory and register Load data from memory into register Store register data into memory Transfer control Uncondi1onal jumps to/from procedures Condi1onal branches 18 9

Object Code Code for sum 0x401040 <sum>: 0x55 0x89 0xe5 0x8b 0x45 0x0c 0x03 0x45 0x08 0x89 0xec 0x5d 0xc3 Total of 13 bytes Each instrucion 1, 2, or 3 bytes Starts at address 0x401040 Assembler Translates.s into.o Binary encoding of each instruc1on Nearly- complete image of executable code Missing linkages between code in different files Linker Resolves references between files Combines with sta1c run- 1me libraries E.g., code for malloc, printf Some libraries are dynamically linked Linking occurs when program begins execu1on 19 Machine InstrucIon Example int t = x+y; addl 8(),%eax Similar to expression: x += y More precisely: int eax; int *ebp; eax += ebp[2] 0x401046: 03 45 08 C Code Add two signed integers Assembly Add 2 4- byte integers Long words in GCC parlance Same instruc1on whether signed or unsigned Operands: x: Register %eax y: Memory M[+8] t: Register %eax Return func1on value in %eax Object Code 3- byte instruc1on Stored at address 0x401046 20 10

Disassembling Object Code Disassembled 00401040 <_sum>: 0: 55 push 1: 89 e5 mov %esp, 3: 8b 45 0c mov 0xc(),%eax 6: 03 45 08 add 0x8(),%eax 9: 89 ec mov,%esp b: 5d pop c: c3 ret d: 8d 76 00 lea 0x0(%esi),%esi Disassembler objdump -d p Useful tool for examining object code Analyzes bit pafern of series of instruc1ons Produces approximate rendi1on of assembly code Can be run on either a.out (complete executable) or.o file 21 Alternate Disassembly Object 0x401040: 0x55 0x89 0xe5 0x8b 0x45 0x0c 0x03 0x45 0x08 0x89 0xec 0x5d 0xc3 Disassembled 0x401040 <sum>: push 0x401041 <sum+1>: mov %esp, 0x401043 <sum+3>: mov 0xc(),%eax 0x401046 <sum+6>: add 0x8(),%eax 0x401049 <sum+9>: mov,%esp 0x40104b <sum+11>: pop 0x40104c <sum+12>: ret 0x40104d <sum+13>: lea 0x0(%esi),%esi Within gdb Debugger gdb p disassemble sum Disassemble procedure x/13b sum Examine the 13 bytes star1ng at sum 22 11

What Can be Disassembled? % objdump -d WINWORD.EXE WINWORD.EXE: file format pei-i386 No symbols in "WINWORD.EXE". Disassembly of section.text: 30001000 <.text>: 30001000: 55 push 30001001: 8b ec mov %esp, 30001003: 6a ff push $0xffffffff 30001005: 68 90 10 00 30 push $0x30001090 3000100a: 68 91 dc 4c 30 push $0x304cdc91 Anything that can be interpreted as executable code Disassembler examines bytes and reconstructs assembly source 23 Machine Programming I: Basics History of Intel processors and architectures C, assembly, machine code Assembly Basics: Registers, operands, move 24 12

Integer Registers (IA32) Origin (mostly obsolete) %eax %ax %ah %al accumulate general purpose %ecx %edx %ebx %esi %cx %dx %bx %si %ch %dh %bh %cl %dl %bl counter data base source index %edi %di destination index %esp %sp stack pointer %bp base pointer 16- bit virtual registers (backwards compaibility) 25 Moving Data: IA32 Moving Data movx Source, Dest x in {b, w, l} movl Source, Dest: Move 4- byte long word movw Source, Dest: Move 2- byte word movb Source, Dest: Move 1- byte byte %eax %ecx %edx %ebx %esi %edi %esp Lots of these in typical code 26 13

Moving Data: IA32 Moving Data movl Source, Dest: Operand Types Immediate: Constant integer data Example: $0x400, $-533 Like C constant, but prefixed with $ Encoded with 1, 2, or 4 bytes Register: One of 8 integer registers Example: %eax, %edx But %esp and reserved for special use %eax %ecx %edx %ebx %esi %edi %esp Others have special uses for par1cular instruc1ons Memory: 4 consecu1ve bytes of memory at address given by register Simplest example: (%eax) Various other address modes 27 movl Operand CombinaIons Source Dest Src,Dest C Analog Imm Reg Mem movl $0x4,%eax temp = 0x4; movl $-147,(%eax) *p = -147; movl Reg Reg Mem movl %eax,%edx movl %eax,(%edx) temp2 = temp1; *p = temp; Mem Reg movl (%eax),%edx temp = *p; Cannot do memory- memory transfer with a single instrucgon 28 14

Simple Memory Addressing Modes Normal (R) Mem[Reg[R]] Register R specifies memory address movl (%ecx),%eax Displacement D(R) Mem[Reg[R]+D] Register R specifies start of memory region Constant displacement D specifies offset movl 8(),%edx 29 Using Simple Addressing Modes void swap(int *xp, int *yp) { int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; } swap: pushl movl %esp, pushl %ebx movl 12(),%ecx movl 8(),%edx movl (%ecx),%eax movl (%edx),%ebx movl %eax,(%edx) movl %ebx,(%ecx) movl -4(),%ebx movl,%esp popl ret Set Up Body Finish 30 15

Using Simple Addressing Modes void swap(int *xp, int *yp) { int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; } swap: pushl movl %esp, pushl %ebx movl 12(),%ecx movl 8(),%edx movl (%ecx),%eax movl (%edx),%ebx movl %eax,(%edx) movl %ebx,(%ecx) movl -4(),%ebx movl,%esp popl ret Set Up Body Finish 31 Understanding Swap void swap(int *xp, int *yp) { int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; } Register Value %ecx yp %edx xp %eax t1 %ebx t0 Offset 12 8 4 0-4 yp xp Rtn adr Old Stack (in memory) movl 12(),%ecx # ecx = yp movl 8(),%edx # edx = xp movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0) movl %eax,(%edx) # *xp = eax movl %ebx,(%ecx) # *yp = ebx Old %ebx 32 16

Understanding Swap %eax %edx %ecx %ebx %esi %edi %esp yp xp Offset 0 Rtn adr movl 12(),%ecx # ecx = yp movl 8(),%edx # edx = xp movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0) movl %eax,(%edx) # *xp = eax movl %ebx,(%ecx) # *yp = ebx 12 8 4-4 123 Address 0x11c 0x118 0x114 0x110 0x10c 0x108 0x100 33 Understanding Swap %eax %edx %ecx %ebx %esi %edi %esp yp xp Offset 0 Rtn adr movl 12(),%ecx # ecx = yp movl 8(),%edx # edx = xp movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0) movl %eax,(%edx) # *xp = eax movl %ebx,(%ecx) # *yp = ebx 12 8 4-4 123 Address 0x11c 0x118 0x114 0x110 0x10c 0x108 0x100 34 17

Understanding Swap %eax %edx %ecx %ebx %esi %edi %esp yp xp Offset 12 8 4 0-4 123 Rtn adr Address 0x11c 0x118 0x114 0x110 0x10c 0x108 0x100 movl 12(),%ecx # ecx = yp movl 8(),%edx # edx = xp movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0) movl %eax,(%edx) # *xp = eax movl %ebx,(%ecx) # *yp = ebx 35 Understanding Swap %eax %edx %ecx %ebx %esi %edi %esp yp xp Offset 12 8 4 0-4 123 Rtn adr Address 0x11c 0x118 0x114 0x110 0x10c 0x108 0x100 movl 12(),%ecx # ecx = yp movl 8(),%edx # edx = xp movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0) movl %eax,(%edx) # *xp = eax movl %ebx,(%ecx) # *yp = ebx 36 18

Understanding Swap %eax %edx %ecx %ebx %esi %edi %esp 123 yp xp Offset 12 8 4 0-4 123 Rtn adr Address 0x11c 0x118 0x114 0x110 0x10c 0x108 0x100 movl 12(),%ecx # ecx = yp movl 8(),%edx # edx = xp movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0) movl %eax,(%edx) # *xp = eax movl %ebx,(%ecx) # *yp = ebx 37 Understanding Swap %eax %edx %ecx %ebx %esi %edi %esp 123 yp xp Offset 12 8 4 0-4 Rtn adr Address 0x11c 0x118 0x114 0x110 0x10c 0x108 0x100 movl 12(),%ecx # ecx = yp movl 8(),%edx # edx = xp movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0) movl %eax,(%edx) # *xp = eax movl %ebx,(%ecx) # *yp = ebx 38 19

Understanding Swap %eax %edx %ecx %ebx %esi %edi %esp 123 yp xp Offset 12 8 4 0-4 123 Rtn adr Address 0x11c 0x118 0x114 0x110 0x10c 0x108 0x100 movl 12(),%ecx # ecx = yp movl 8(),%edx # edx = xp movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0) movl %eax,(%edx) # *xp = eax movl %ebx,(%ecx) # *yp = ebx 39 Complete Memory Addressing Modes Most General Form D(Rb,Ri,S) Mem[Reg[Rb]+S*Reg[Ri]+ D] D: Constant displacement 1, 2, or 4 bytes Rb: Base register: Any of 8 integer registers Ri: Index register: Any, except for %esp Unlikely you d use, either S: Scale: 1, 2, 4, or 8 (why these numbers?) Special Cases (Rb,Ri) Mem[Reg[Rb]+Reg[Ri]] D(Rb,Ri) Mem[Reg[Rb]+Reg[Ri]+D] (Rb,Ri,S) Mem[Reg[Rb]+S*Reg[Ri]] 40 20