Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

1 Pentium IA-32 Maskinarkitekturen Kort resume – uge 5.

Lignende præsentationer


Præsentationer af emnet: "1 Pentium IA-32 Maskinarkitekturen Kort resume – uge 5."— Præsentationens transcript:

1 1 Pentium IA-32 Maskinarkitekturen Kort resume – uge 5

2 2 Intel 4004 and Pentium 4 http://www.intel.com/museum/archives/index.htm http://download.intel.com/products/roadmap/roadmap.pdf Today several families/architectures (performance, power, cost)

3 3 Pentium IA-32 software hardware IA-32

4 4 Maskinkode-niveauet Registre Lagermodellen Datatyper Maskininstruktioner Instruktionsformater Addresseringsformer

5 5 IA-32 Registre 6 general-purpose 32-bit registre: eax, ebx ecx, edx esi, edi 4 special purpose 32-bit registre: ebp – Pointer register der udpeger aktuelt stakafsnit. esp – Pointer register der udpeger staktoppen. eip – programtælleren (instruction pointer). eflags – status register (Program Status Word – PSW).

6 6 Linux IA-32 Lagermodellen Et 4Gb lineært, byte addresserbart lager opdelt i sektioner: text 0xFFFFFFFF 0x00000000 data bss stack initialiseret data uinitialiseret data (buffere) program dynamisk lager (allokeret) dynamisk lager (uallokeret) heap eip esp ebp

7 7 Funktionskald og stakafsnit Caller: 1.Læg parametre på stak (omvendt). 2.Udfør call instruktionen. Callee: 3. Etabler nyt stakafsnit. 4. Gør plads til lokale variable. 5. Udfør kroppen af funktionen. 6. Læg returværdi i eax registret. 7. Nedlæg stakafsnit. 8.Udfør ret instruktionen. Caller: 9.Fjern parametre fra stak. * Bemærk aftagende addresser – vendt lager old eip param n param 1 param 2 old ebp local 1 local 2 ebp esp ebp+8 ebp+12 ebp-4 ebp-8

8 8 Stakafsnit esp ebp parametre old eip old ebp lokale variable esp ebp 1-4 6-9 ebp + 4 ebp + 8 ebp - 4 32 bit

9 9 C eksempel int max (long a,long b) { long m = 0; if (a >= b) m = a; else m = b; return m; } int main (void) { long x = 42; long y = 53; long z = 0; z = max(x,y); exit(z); }

10 10.section.data x:.long 42 y:.long 53 z:.long 0.section.text.globl _start _start: # int main (void) pushl y # push y on stack pushl x # push x on stack call max # invoke max addl $8,%esp # pop parameters from stack movl %eax,z # z = max(x,y) (%eax) movl z,%ebx # return value in ebx register movl $1, %eax # opcode for exit system call int $0x80 # return z (%ebx) IA-32 Funktionskald (1) 1-2 9

11 11.type max, @function max: # int max (long a,long b) pushl %ebp # push prev base pointer movl %esp,%ebp # setup new base pointer subl $4,%esp # local variable m movl $0,-4(%ebp) # m = 0 movl 8(%ebp),%eax # load a into eax movl 12(%ebp),%ebx # load b into ebx cmpl %eax,%ebx # compute b-a = b) jmp else if:movl %eax,-4(%ebp) # m = a jmp endif else: movl %ebx,-4(%ebp) # m = y endif:movl -4(%ebp),%eax # return value in %eax movl %ebp,%esp # restore esp (remove locals) popl %ebp # restore ebp ret # return m 3-4 6-8

12 12 Funktionskald Stakken bruges til at implementere funktionskald. Maskininstruktionerne call og ret bruges: call A - læg “næste” eip på stakken og sæt “eip = A”. ret - sæt eip = top af stak og fjern øverste element. I visse tilfælde bruges maskininstruktionerne enter og leave. Konventionen fra C bruges: Application Binary Interface.


Download ppt "1 Pentium IA-32 Maskinarkitekturen Kort resume – uge 5."

Lignende præsentationer


Annoncer fra Google