1 / 69

Les 3: Gegevenstransfers + adresseermodes

Les 3: Gegevenstransfers + adresseermodes. Overzicht. Inleiding Registers Adresexpressies Gegevenstransfer Adresseermodes. Von Neumann-machine Fysiek zicht. BUS. adres. CVE. Controle. cache. data. klok. controle. ALU. registers. Geheugen. Invoer/Uitvoer. Het geheugen.

stevie
Download Presentation

Les 3: Gegevenstransfers + adresseermodes

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Les 3: Gegevenstransfers + adresseermodes

  2. Overzicht • Inleiding • Registers • Adresexpressies • Gegevenstransfer • Adresseermodes

  3. Von Neumann-machineFysiek zicht BUS adres CVE Controle cache data klok controle ALU registers Geheugen Invoer/Uitvoer

  4. Het geheugen • Array van geheugencellen of BAU-cellen (basic addressable units) • Elke BAU-cel heeft een adres n bit 0 bau-cel 0 1 bau-cel 1 2 bau-cel 2 3 bau-cel 3 4 bau-cel 4 ...

  5. Het geheugen • Typische BAU-cel groottes: bit, byte, woord • Bewerkingen op het geheugen: - lezen - schrijven

  6. adres lezen data adres schrijven data Bewerkingen op geheugen geheugen CVE

  7. 8 0 1 2 3 4 5 6 7 Voorstelling van het geheugen 16 32 0 0 2 4 4 8 6 12 8 16 10 20 12 24 14 28

  8. Overzicht • Inleiding • Registers • Adresexpressies • Gegevenstransfer • Adresseermodes

  9. BUS Von Neumann-machineFysiek zicht BUS adres adres CVE Controle controle cache data data klok klok controle controle ALU ALU registers registers Geheugen Geheugen:bau-cellen RAM Invoer/Uitvoer Invoer/Uitvoer

  10. 32 accumulator EAX basis EBX counter ECX data EDX source index ESI destination index EDI basispointer EBP stack pointer ESP instruction pointer EIP flags EFLAGS IA32 registerverzameling Registerverzameling: IA32

  11. DH DL BH BL AH AL CH CL IA32 registerverzameling 32 EAX AX EBX BX ECX CX EDX DX ESI SI EDI DI EBP BP ESP SP EIP IP FLAGS EFLAGS

  12. Intel 64 registerverzameling RAX EAX AX AL RBX BX BL EBX RCX CX CL ECX RDX DX DL EDX RDI DI DIL EDI RSI SI SIL ESI RBP BP BPL EBP RSP SP SPL ESP R8 R8W R8L R8D R9 R9W R9L R9D … R15 R15W R15L R15D Registerverzameling: intel 64 (2004)

  13. IA32 segmentregisters 16 gs fs ss es ds cs

  14. EFLAGS NT IO O D I T S Z A P C carry nested task i/o level overflow direction interrupt trap sign zero auxiliary carry pariteit

  15. IA32 Vlottende-komma/MMX registers 64 80 ST0 ST1 ST2 ST3 ST4 ST5 ST6 ST7 MMX0 MMX1 MMX2 MMX3 MMX4 MMX5 MMX6 MMX7 Registers: mmx

  16. IA32 XMM registers 128 128 XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 XMM8 XMM9 XMM10 XMM11 XMM12 XMM13 XMM14 XMM15 IA32 X86-64

  17. Alpha registerverzameling 64 64 r0 f0 ... ... ... ... r31 f31 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 PC Registerverzameling: alpha

  18. Itanium registerverzameling • 128 registers voor algemeen gebruik (64 bit) [r0..r127] • 128 registers voor vlottende-kommagetallen (82 bit) [f0..f127] (goed voor double extended floating point formaat) • 64 predikaatregisters (1 bit) [p0..p63] • 8 sprongregisters (64 bit) [b0..b7] • Instructiewijzer (64 bit) Registerverzameling: itanium

  19. Overzicht • Inleiding • Registers • Adresexpressies • Gegevenstransfer • Adresseermodes

  20. Absoluut adres n 0 Absoluut adres = Effectief adres waarde

  21. Verschuiving n 0 Basisadres offset Effectief adres waarde effectief adres = basisadres + offset

  22. Indirect adres n 0 Primair adres Secun. adres Effectief adres waarde effectief adres = mem[primair adres]

  23. mem16[2] mem8[11] mem32[5] Adresexpressie Beschouw het geheugen als een array van bytes 0 1 2 3 4 5 6 7 8 9 10 11 12 01 20 12 03 A3 F7 93 23 F2 AA 92 19 33 ...

  24. reg[bx] reg[ip] reg[r2] Adresexpressie Beschouw alle registers als een array ax bx cx ip sp r1 r2 r3 r4

  25. Voorbeeld typedef struct r { int a[5]; char b[5]; struct { int d, e; } c; struct r *n; } linklist; … a[0] a[1] a[2] a[3] a[4] c.d c.e n b[0]..b[4]

  26. Berekening van offsets a[0] a[1] a[2] a[3] a[4] c.d c.e n b[0]..b[4] 8 bytes (2*4) 20 bytes (5*4) (5*4 + 5*1) 25 bytes 33 bytes (5*4 + 5*1 + 4 + 4)

  27. Berekening van offsets r a[0] a[1] a[2] a[3] a[4] c.d c.e n b[0]..b[4] adresexpressie r r+4 r+20 r+25 r+33 mem8[r+20] mem32[r+25] adres van r adres van r.a[1] adres van r.b[0] adres van r.c.d adres van r.n waarde van r.b[0] waarde van r.c.d

  28. Berekening van offsets r a[0] a[1] a[2] a[3] a[4] c.d c.e n b[0]..b[4] Dangling pointers! a[0] a[1] a[2] a[3] a[4] c.d c.e n b[0]..b[4] … adresexpressie adres van r.a[1] adres van r.n adres van r.n->a[1] r+4 r+33 mem32[r+33]+4

  29. Berekening van offsets r a[0] a[1] a[2] a[3] a[4] c.d c.e n b[0]..b[4] out-of-bounds error! adresexpressie i (b.v. 1100) mem32[i] (b.v. 3) r+mem32[i]*4 mem32[r+mem32[i]*4] adres van i waarde van i adres van r.a[i] waarde van r.a[i] i 1100 ← i 3

  30. Het geheugen • Bitnummering • Bytenummering • Alignatie

  31. Opwaarts genummerd bitpatroon lengte n 0 1 2 3 . . . n-2 n-1 Bitnummering Neerwaarts genummerd bitpatroon lengte n n-1 n-2 . . . 3 2 1 0

  32. 31 30 ... 1 0 neerwaarts Bitnummering n n+1 n+2 n+3 n+4 n+5 n+6 n+7 n+8 n+9 0 1 ... 30 31 opwaarts Voordeel: consistent met byte adressering Voordeel: consistent met bitgewicht

  33. 32-bit gegeven Bytenummering:Big Endian n n+1 n+2 n+3 n+4 n+5 n+6 n+7 n+8 n+9 MSB LSB

  34. Bytenummering:Little Endian n n+1 n+2 n+3 n+4 n+5 n+6 n+7 n+8 n+9 MSB LSB 32-bit gegeven

  35. 16 Big endian: Little endian: Voorbeeld Geheugen ... 78 9C 6B A2 28 18 10 00 19 A2 67 ... 100016 = 409610 001016 = 1610

  36. Niet-gealigneerd  4n  2n  n Alignatie Gealigneerd  4n  2n  n

  37. typedef struct r { int a[5]; struct { int d, e; } c; struct r *n; char b[5]; } linklist; alternatief Berekening van offsets r Niet-gealigneerd a[0] a[1] a[2] a[3] a[4] c.d c.e n b[0]..b[4] Gealigneerd a[0] a[1] a[2] a[3] a[4] c.d c.e n b[0]..b[4] Gat in de geheugenlayout (padding)

  38. Overzicht • Inleiding • Registers • Adresexpressies • Gegevenstransfer • Adresseermodes

  39. doel Gegevenstransfer bron breedte geheugen registers randapparaat geheugen registers randapparaat

  40. Gegevenstransfer: mov 32 00 04 08 0C 10 00B00300 00004000 00330020 0003300A …. mov doel, bron voorbeelden 00004000 mov eax, ebx mov ebx, [4] eax 00920000 00000010 mov [8], ebx ebx 00000010 00004000 mov ecx, 64h ecx 03000440 00000064 Alle waarden zijn hexadecimaal! Instructie:mov

  41. Load/store reg[r] = mem[bron] ld r, bron st r, doel mem[doel] = reg[r] Load/store architectuur

  42. Verwisselen van twee waarden: xchg xchg doel, bron temp = doel doel = bron bron = temp Instructie:xchg

  43. Little endian  big endian bswap R Instructie:bswap

  44. Bewaren en herstellen van registers mov ebp,10h mov [ebp], eax mov [ebp+4], ebx mov [ebp+8], ecx mov [ebp+0ch], edx …. mov eax, [ebp] mov ebx, [ebp+4] mov ecx, [ebp+8] mov edx, [ebp+0ch] mov [10h], eax mov [14h], ebx mov [18h], ecx mov [1ch], edx …. mov eax, [10h] mov ebx, [14h] mov ecx, [18h] mov edx, [1ch]

  45. esp esp esp Werking van een stapel: push & pop 32 …. 00B00300 00004000 00330020 0003300A 1200 1204 1208 120C 1210 mov eax, 10h push eax 00000010 pop ebx eax 00920000 00000010 push bron Instructie:push ebx 00004000 00000010 esp pop doel 0000120C 00001208 0000120C Instructie:pop Alle waarden zijn hexadecimaal!

  46. edx ecx ebx esp esp esp esp esp esp esp esp esp eax Bewaren en herstellen van registers op de stapel push eax push ebx push ecx push edx …. pop edx pop ecx pop ebx pop eax

  47. pushad & popad pushad Instructie:pushad esp edi push van eax, ecx, edx, ebx, (oude esp), ebp, esi, edi esi ebp oude esp ebx popad Instructie:popad edx ecx pop van edi, esi, ebp, -, ebx, edx, ecx, eax eax

  48. Lengte-aanduidingen mov [192900h], ax lengte = 2 bytes mov [192900h], 9 lengte = ? - mov byte ptr [192900h], 9 lengte = 1 bytes - mov word ptr [192900h], 9 lengte = 2 bytes - mov dword ptr [192900h], 9 lengte = 4 bytes

  49. out port,al io[port] = reg[al] out port,ax io[port] = reg[ax] out port,eax io[port] = reg[eax] Input/Output: IA32 in al, port reg[al] = io[port] in ax, port reg[ax] = io[port] in eax, port reg[eax] = io[port] Instructie:out Instructie:in

  50. Operaties op toestandregister lahf reg[ah] = reg[status] sahf reg[status] = reg[ah] pushfd reg[esp] = reg[esp] - 4 mem32[reg[esp]] = reg[status] popfd reg[status] = mem32[reg[esp]] reg[esp] = reg[esp] + 4 Instructie:lahf Instructie:sahf Instructie:pushfd Instructie:popfd

More Related