MACHINE LEVEL PROGRAMMING I BASICS COMPUTER ARCHITECTURE AND ORGANIZATION University of Texas at Austin Today Machine Programming I Basics History of Intel processors and architectures C assembly machine code Assembly Basics Registers operands move 2 University of Texas at Austin Intel x86 Processors contd Machine Evolution 386 Pentium Pentium MMX PentiumPro Pentium III Pentium 4 Core 2 Duo Core i7 1985 1993 1997 1995 1999 2001 2006 2008 0 3M 3 1M 4 5M 6 5M 8 2M 42M 291M 731M Added Features Instructions to support multimedia operations Parallel operations on 1 2 and 4 byte data both integer FP Instructions to enable more efficient conditional operations Linux GCC Evolution Two major steps 1 support 32 bit 386 2 support 64 bit x86 64 6 University of Texas at Austin Intel s 64 Bit Intel Attempted Radical Shift from IA32 to IA64 Totally different architecture Itanium Executes IA32 code only as legacy Performance disappointing AMD Stepped in with Evolutionary Solution x86 64 now called AMD64 Intel Felt Obligated to Focus on IA64 Hard to admit mistake or that AMD is better 2004 Intel Announces EM64T extension to IA32 Extended Memory 64 bit Technology Almost identical to x86 64 All but low end x86 processors support x86 64 But lots of code still runs in 32 bit mode 10 University of Texas at Austin Our Coverage IA32 The traditional x86 x86 64 EM64T The emerging standard Presentation Book presents IA32 in Sections 3 1 3 12 Covers x86 64 in 3 13 11 University of Texas at Austin Today Machine Programming I Basics History of Intel processors and architectures C assembly machine code Assembly Basics Registers operands move 12 University of Texas at Austin Definitions Architecture also instruction set architecture ISA The parts of a processor design that one needs to understand to write assembly code Examples instruction set specification registers Microarchitecture Implementation of the architecture Examples cache sizes and core frequency Example ISAs Intel x86 IA IPF 13 University of Texas at Austin Assembly Programmer s View CPU PC Registers Condition Codes Addresses Data Instructions Memory Object Code Program Data OS Data Stack Programmer Visible State PC Program counter Address of next instruction Called EIP IA32 or RIP x86 64 Register file Heavily used program data Condition codes Store status information about most recent arithmetic operation Used for conditional branching Memory Byte addressable array Code user data some OS data Includes stack used to support procedures 14 University of Texas at Austin Program to Process We write a program in e g C A compiler turns that program into an instruction list The CPU interprets the instruction list which is more a graph of basic blocks void X int b if b 1 int main int a 2 X a 15 University of Texas at Austin Process in Memory Program to process What you wrote void X int b if b 1 int main int a 2 X a What must the OS track for a process What is in memory main a 2 X b 2 Stack Heap void X int b if b 1 int main int a 2 X a Code 16 A shell forks and execs a calculator int pid fork if pid 0 close history exec bin calc else wait pid int calc main pid fork if pid int q 7 0 close history do init exec bin calc ln get input else exec in ln wait pid USER OS pid 128 127 open files history last cpu 0 pid 128 open files last cpu 0 Process Control Blocks PCBs University of Texas at Austin A shell forks and then execs a calculator main a 2 USER OS Stack Stack Heap 0xFC0933CA int shell main int a 2 Code Heap 0x43178050 int calc main int q 7 Code pid 128 127 open files history last cpu 0 pid 128 open files last cpu 0 Process Control Blocks PCBs 18 University of Texas at Austin Anatomy of an address space mapped segments Header Code Initialized data DLL s Process s address space Stack Heap Initialized data Executable File Code Inaccessible 19 University of Texas at Austin Turning C into Object Code Code in files p1 c p2 c Compile with command gcc O1 p1 c p2 c o p Use basic optimizations O1 Put resulting binary in file p text C program p1 c p2 c Compiler gcc S text Asm program p1 s p2 s Assembler gcc or as binary Object program p1 o p2 o Linker gcc or ld binary Executable program p Static libraries a 20 University of Texas at Austin Compiling Into Assembly C Code int sum int x int y int t x y return t Generated IA32 Assembly sum pushl ebp movl esp ebp movl 12 ebp eax addl 8 ebp eax popl ebp ret Some compilers use instruction leave Obtain with command usr local bin gcc O1 S code c Produces file code s 21 University of Texas at Austin Assembly Characteristics Data Types Integer data of 1 2 or 4 bytes Data values Addresses untyped pointers Floating point data of 4 8 or 10 bytes No aggregate types such as arrays or structures Just contiguously allocated bytes in memory 22 University of Texas at Austin Assembly Characteristics Operations Perform arithmetic function on register or memory data Transfer data between memory and register Load data from memory into register Store register data into memory Transfer control Unconditional jumps to from procedures Conditional branches 23 University of Texas at Austin Object Code Code for sum 0x401040 sum 0x55 0x89 0xe5 0x8b 0x45 0x0c 0x03 0x45 0x08 Total of 11 bytes 0x5d 0xc3 Each instruction 1 2 or 3 bytes Starts at address 0x401040 Assembler Translates s into o Binary encoding of each instruction Nearly complete image of executable code Missing linkages between code in different files Linker Resolves references between files Combines with static run time libraries E g code for malloc printf Some libraries are dynamically linked Linking occurs when program begins execution 24 University of Texas at Austin Disassembling Object Code Disassembled 080483c4 sum 80483c4 55 80483c5 89 e5 80483c7 8b 45 0c 80483ca 03 45 08 80483cd 5d 80483ce c3 push mov mov add pop ret ebp esp ebp 0xc ebp eax 0x8 ebp eax ebp Disassembler objdump d p Useful tool for examining object code Analyzes bit pattern of series of instructions Produces approximate rendition of assembly code Can be run on either a out complete executable or o file 26 University of Texas at Austin Alternate Disassembly Object 0x401040 0x55 0x89 0xe5 0x8b 0x45 0x0c 0x03 0x45 0x08 0x5d 0xc3 Disassembled Dump of assembler code for function sum 0x080483c4 sum 0 push ebp 0x080483c5 sum 1 mov esp ebp 0x080483c7 sum 3 mov 0xc ebp eax 0x080483ca sum 6 add 0x8 ebp eax 0x080483cd sum 9 pop ebp 0x080483ce sum 10 ret Within gdb Debugger gdb p disassemble sum Disassemble procedure x 11xb
View Full Document
Unlocking...