Machine-Level Programming I: Basics: Computer Architecture and Organization
Machine-Level Programming I: Basics: Computer Architecture and Organization
Machine-Level Programming I: Basics: Computer Architecture and Organization
BASICS
COMPUTER ARCHITECTURE AND ORGANIZATION
University of Texas at Austin
2
University of Texas at Austin
• Machine Evolution
• 386 1985 0.3M
• Pentium 1993 3.1M
• Pentium/MMX 1997 4.5M
• PentiumPro 1995 6.5M
• Pentium III 1999 8.2M
• Pentium 4 2001 42M
• Core 2 Duo 2006 291M
• Core i7 2008 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
11
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
12
University of Texas at Austin
13
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.
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);
}
16
University of Texas at Austin
pid = 128
open files =
last_cpu = 0
18
University of Texas at Austin
Heap
Initialized data
Executable File
Code
Inaccessible
20
University of Texas at Austin
23
University of Texas at Austin
• Transfer control
• Unconditional jumps to/from procedures
• Conditional branches
24
University of Texas at Austin
Object Code
Disassembled
080483c4 <sum>:
80483c4: 55 push %ebp
80483c5: 89 e5 mov %esp,%ebp
80483c7: 8b 45 0c mov 0xc(%ebp),%eax
80483ca: 03 45 08 add 0x8(%ebp),%eax
80483cd: 5d pop %ebp
80483ce: c3 ret
• 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
27
University of Texas at Austin
Alternate Disassembly
Disassembled
Object
0x401040:
0x55 Dump of assembler code for function sum:
0x89 0x080483c4 <sum+0>: push %ebp
0xe5 0x080483c5 <sum+1>: mov %esp,%ebp
0x8b 0x080483c7 <sum+3>: mov 0xc(%ebp),%eax
0x45 0x080483ca <sum+6>: add 0x8(%ebp),%eax
0x0c 0x080483cd <sum+9>: pop %ebp
0x03 0x080483ce <sum+10>: ret
0x45
0x08 • Within gdb Debugger
0x5d
0xc3 gdb p
disassemble sum
• Disassemble procedure
x/11xb sum
• Examine the 11 bytes starting at sum
28
University of Texas at Austin
% objdump -d WINWORD.EXE
No symbols in "WINWORD.EXE".
Disassembly of section .text:
30001000 <.text>:
30001000: 55 push %ebp
30001001: 8b ec mov %esp,%ebp
30001003: 6a ff push $0xffffffff
30001005: 68 90 10 00 30 push $0x30001090
3000100a: 68 91 dc 4c 30 push $0x304cdc91
30
University of Texas at Austin
source
%esi %si index
destination
%edi %di index
stack
%esp %sp
pointer
base
%ebp %bp
pointer
movl (%ecx),%eax
movl 8(%ebp),%edx
34
University of Texas at Austin
popl %ebx
popl %ebp Finish
ret
35
University of Texas at Austin
swap:
pushl %ebp
void swap(int *xp, int *yp) movl %esp,%ebp Set
{ Up
pushl %ebx
int t0 = *xp;
int t1 = *yp;
*xp = t1; movl 8(%ebp), %edx
*yp = t0; movl 12(%ebp), %ecx
} movl (%edx), %ebx
Body
movl (%ecx), %eax
movl %eax, (%edx)
movl %ebx, (%ecx)
popl %ebx
popl %ebp Finish
ret
36
University of Texas at Austin
Understanding Swap
38
University of Texas at Austin
Address
Understanding Swap 123 0x124
456 0x120
0x11c
%eax 0x118
%edx 0x124 Offset
0x114
%ecx yp 12 0x120 0x110
xp 8 0x124 0x10c
%ebx
4 Rtn adr 0x108
%esi
%ebp 0
0x104
%edi -4
0x100
%esp
movl 8(%ebp), %edx # edx = xp
%ebp 0x104 movl 12(%ebp), %ecx # ecx = yp
movl (%edx), %ebx # ebx = *xp (t0)
movl (%ecx), %eax # eax = *yp (t1)
movl %eax, (%edx) # *xp = t1
movl %ebx, (%ecx) # *yp = t0
39
University of Texas at Austin
Address
Understanding Swap 123 0x124
456 0x120
0x11c
%eax 0x118
%edx 0x124 Offset
0x114
%ecx 0x120 yp 12 0x120 0x110
xp 8 0x124 0x10c
%ebx
4 Rtn adr 0x108
%esi
%ebp 0
0x104
%edi -4
0x100
%esp
movl 8(%ebp), %edx # edx = xp
%ebp 0x104 movl 12(%ebp), %ecx # ecx = yp
movl (%edx), %ebx # ebx = *xp (t0)
movl (%ecx), %eax # eax = *yp (t1)
movl %eax, (%edx) # *xp = t1
movl %ebx, (%ecx) # *yp = t0
40
University of Texas at Austin
Address
Understanding Swap 123 0x124
456 0x120
0x11c
%eax 0x118
%edx 0x124 Offset
0x114
%ecx 0x120 yp 12 0x120 0x110
xp 8 0x124 0x10c
%ebx 123
4 Rtn adr 0x108
%esi
%ebp 0
0x104
%edi -4
0x100
%esp
movl 8(%ebp), %edx # edx = xp
%ebp 0x104 movl 12(%ebp), %ecx # ecx = yp
movl (%edx), %ebx # ebx = *xp (t0)
movl (%ecx), %eax # eax = *yp (t1)
movl %eax, (%edx) # *xp = t1
movl %ebx, (%ecx) # *yp = t0
41
University of Texas at Austin
Address
Understanding Swap 123 0x124
456 0x120
0x11c
%eax 456 0x118
%edx 0x124 Offset
0x114
%ecx 0x120 yp 12 0x120 0x110
xp 8 0x124 0x10c
%ebx 123
4 Rtn adr 0x108
%esi
%ebp 0
0x104
%edi -4
0x100
%esp
movl 8(%ebp), %edx # edx = xp
%ebp 0x104 movl 12(%ebp), %ecx # ecx = yp
movl (%edx), %ebx # ebx = *xp (t0)
movl (%ecx), %eax # eax = *yp (t1)
movl %eax, (%edx) # *xp = t1
movl %ebx, (%ecx) # *yp = t0
42
University of Texas at Austin
Address
Understanding Swap 456 0x124
456 0x120
0x11c
%eax 456
456 0x118
%edx 0x124 Offset
0x114
%ecx 0x120 yp 12 0x120 0x110
xp 8 0x124 0x10c
%ebx 123
4 Rtn adr 0x108
%esi
%ebp 0
0x104
%edi -4
0x100
%esp
movl 8(%ebp), %edx # edx = xp
%ebp 0x104 movl 12(%ebp), %ecx # ecx = yp
movl (%edx), %ebx # ebx = *xp (t0)
movl (%ecx), %eax # eax = *yp (t1)
movl %eax, (%edx) # *xp = t1
movl %ebx, (%ecx) # *yp = t0
43
University of Texas at Austin
Address
Understanding Swap 456 0x124
123 0x120
0x11c
%eax 456 0x118
%edx 0x124 Offset
0x114
%ecx 0x120 yp 12 0x120 0x110
xp 8 0x124 0x10c
%ebx 123
4 Rtn adr 0x108
%esi
%ebp 0
0x104
%edi -4
0x100
%esp
movl 8(%ebp), %edx # edx = xp
%ebp 0x104 movl 12(%ebp), %ecx # ecx = yp
movl (%edx), %ebx # ebx = *xp (t0)
movl (%ecx), %eax # eax = *yp (t1)
movl %eax, (%edx) # *xp = t1
movl %ebx, (%ecx) # *yp = t0
44
University of Texas at Austin
• 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]] 45
University of Texas at Austin