1 / 36

P rogramování v asembleru - prostředí

P rogramování v asembleru - prostředí. Jakub Yaghob. Motivace. Dříve  Rychlejší a menší kód  Přístup do „přízemí“  Obtížné programování  Není přenositelné (procesor, překladač, OS) Nyní  Ruční kód horší než generovaný (složitost CPU)  Přístup do „přízemí“

carlow
Download Presentation

P rogramování v asembleru - prostředí

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. Programování v asembleru- prostředí Jakub Yaghob

  2. Motivace • Dříve  Rychlejší a menší kód  Přístup do „přízemí“  Obtížné programování  Není přenositelné (procesor, překladač, OS) • Nyní  Ruční kód horší než generovaný (složitost CPU)  Přístup do „přízemí“  Obtížné programování  Není přenositelné (procesor, překladač, OS)  Rozvoj aplikací jednočipů  GPU se programují v „asembleru“

  3. Obsah přednášky • Aplikační prostředí vybrané současné architektury • Instrukční soubor • Vybraný asembler • Historie mikroprocesorů a architektur • Navazující přednáška „Systémové architektury mikroprocesorů“

  4. Současné a nedávné architektury • IA-32 • Intel, dříve nejrozšířenější, dnes postupně nahrazována AMD64 • IA-64 • Intel, zcela odlišná od IA-32, servery, upadá v zapomnění • AMD64/Intel 64 (EM64T) • AMD, rozšíření IA-32, přidal se po čase i Intel, dnes nejrozšířenější • SPARC • Sun, servery, už se nevyrábí • PA-RISC • HP, servery, už se nevyrábí • PPC • IBM, velmi výkonná, servery, Cell • ARM • Není přímo vlastněna firmou, výhodný poměr výkon/příkon – mobilní zařízení

  5. Historie IA-32 – I • 8086, 8088 • 16-bitová data, 20-bitová adresace • 80286 • chráněný režim, 24-bitová adresace • Intel 386 • 1985, první zástupce IA-32 • 32-bitová data, 32-bitová adresace • stránkování, pipeline (6 stupňů)

  6. Historie IA-32 – II • Intel 486 • 1989 • rychlá pipeline (5 stupňů) • L1 cache 8KB na čipu • integrovaný x87 FPU • SMM

  7. Historie IA-32 – III • Pentium • 1993 • dvojitá pipeline (u a v) • L1 cache 8KB data, 8KB kód • MESI protokol pro cache • rozšíření stránkování (4MB) • BTB • APIC • MMX (později)

  8. Historie IA-32 – IV • P6 (Pentium Pro, Pentium II, Pentium III) • 1995 • třícestně superskalární • dynamické vykonávání (microdataflow analysis, out-of-order execution, branch prediction, speculation execution) • přidána 256KB L2 cache • 36-bitová fyzická adresa • MMX (Pentium II), SSE (Pentium III) • Celeron, Xeon

  9. Historie IA-32 – V • Pentium 4 • 2000 • NetBurst (rapid execution engine, hyper pipelined technology, advanced dynamic execution) • SSE 2/SSE 3 • HyperThreading

  10. Historie IA-32/Intel 64 – VI • Core Duo/Core Solo • 2006 • 2/1 jádra • SmartCache • Core 2 Duo, Core 2 Quadro • 2006 • 2/4/6 jádra • Intel 64, virtualizace • Nová mikroarchitektura • SSE 4.1

  11. Historie IA-32/Intel 64 – VII • Core i7/i5/i3 • 2008 • 4 jádra • Nová mikroarchitektura zaměřená spíše na servery • Integrovaný paměťový řadič, QPI (Quick Path Interconnect), opět Hyper-threading • SSE 4.2

  12. Historie IA-32/Intel 64 – VIII • Core i7/i5/i3 – 2nd generation (Sandy Bridge) • 2011 • Nová mikroarchitektura • GPU u CPU • AVX • Turbo Boost • RDRAND (Ivy Bridge)

  13. Historie IA-32/Intel 64 – IX • Core i7/i5/i3 – 3rd generation (Haswell) • 2013 • Nová mikroarchitektura • AVX2, FMA3, gather, bit manipulation • Transakční paměť

  14. Intel 64/AMD64 • Prodloužení agonie IA-32 • 64-bitový plochý (flat) adresový prostor • 8 přidaných obecných registrů • 8 přidaných registrů pro SSE • 64-bitové obecné registry a ukazatele • Jednotné bytové adresování v registrech • Relativní adresace vůči ukazateli instrukcí

  15. P6 mikroarchitektura

  16. NetBurst mikroarchitektura

  17. Core i7 prostředí

  18. Výpočetní prostředí IA-32 – I • Adresový prostor • Lineární adresový prostor 4GB (32 bitů) • Fyzický adresový prostor 64GB (36 bitů) • Základní registry • 8 „obecných“ registrů (32 bitů) • Dělení na menší (16 a 8 bitů) • 6 segmentových registrů (16 bitů) • Příznakový registr EFLAGS (32 bitů) • Ukazatel instrukcí EIP (32 bitů)

  19. Výpočetní prostředí IA-32 – II • x87 FPU registry • 8 datových (80 bitů) • Řídící, stavový a tag registry (16 bitů) • x87 FPU ukazatel instrukce, ukazatel dat • Registr operačního kódu • MMX • 8 MMX registrů (64 bitů)

  20. Výpočetní prostředí IA-32 – III • XMM • 8 XMM registrů (128 bitů) • Registr MXCSR • YMM • Rozšíření XMM na 256 bitů pro AVX • Zásobník • V paměti • Podpora pro volání funkcí a předávání parametrů • Roste směrem k nižším adresám

  21. Výpočetní prostředí Intel 64 • Podobné IA-32 až na následující změny • Adresový prostor • Lineární adresový prostor teoretický 264 • Lineární adresový prostor skutečný 248 • Fyzický adresový prostor 240 • Rozšíření základních registrů (kromě segmentových) na 64-bitů, přejmenování s předponou R (např. RAX, RIP) • Přidání 8 základních registrů • Přidání 8 XMM/YMM registrů

  22. Obecné registry IA-32

  23. Obecné registry Intel 64

  24. Segmentové registry IA-32 • Obsahují 16-bitové selektory • CPU je stále používá, nelze je „vypnout“ • CS – kódový segment • Instrukce čtena z CS:EIP • DS, ES, FS, GS – datové segmenty • SS – zásobníkový segment • Vrchol zásobníku na SS:ESP

  25. Segmentové registry Intel 64 • Segmentace téměř zrušena • CS, DS, ES, SS mají začátek segmentu 0 a jsou přes celý adresový prostor • FS, GS jsou přes celý adresový prostor, ale začátky segmentu jsou platné a používají se • Výjimka vynucená systémem Windows • TLS

  26. Paměťové modely IA-32 – I • Flat model • Dnes běžně užíván OS

  27. Paměťové modely IA-32 – II • Segmentovaný model • Dřívější OS

  28. Registr příznaků – I

  29. Registr příznaků – II • CF – carry flag • Přetečení, přesuny při rotacích • PF – parity flag • Parita na nejnižších 8 bitech • AF – adjust flag • Přetečení z nižších 4 bitů • ZF – zero flag • Výsledek je 0 • SF – sign flag • Nejvyšší bit výsledku = znaménko • OF – overflow flag • Přetečení ve znaménkové aritmetice • DF – direction flag • Směr řetězcových operací

  30. Operandy instrukcí – I • Operandy • Implicitní – předem dány instrukcí  • Explicitní – zapsány u instrukce (i tak někdy neortogonální) • U dvojoperandových instrukcí zápis zprava do leva (pozor na GNU asm!!!) • OPER dst,src  dst = dst OPER src • Přímý operand • Číslo • ADD EAX,14

  31. Operandy instrukcí – II • Registrový operand • Základní registry (bez EIP) (32, 16, 8 bitů) • X87 FPU, MMX, XMM registry • Systémové registry • Adresa I/O • Přímý operand (jen 8 bitů) • OUT 20,AL • Registr DX • IN AL,DX

  32. Operandy instrukcí – III • Paměťový operand • Paměť vždy adresována segmentovým selektorem a posunem v segmentu • Posun v segmentu určen adresovým výrazem • Offset = [Base] + [Index [* Scale]] + [Displacement]

  33. Operandy instrukcí – IV • Výběr segmentového selektoru • Explicitně – zapsán před instrukcí jako prefix, kromě: • Instrukce se vždy čtou z CS:EIP • Cílový adresa řetězcových instrukcí vždy užívá ES • Instrukce PUSH a POP vždy adresují zásobník přes SS MOV EAX,[ES:EAX+EDX*4+4] • Implicitně – podle použití MOV EAX,[EBP+8]

  34. Datové typy • Uložení v paměti • Little endian • Zarovnání v paměti na svoji velikost • Quadword od i486 • Double Quadword od Pentia III (SSE)

  35. Formát instrukce IA-32 • Prefixy ve skupinách • LOCK, REPNE/REPNZ, REP/REPE/REPZ • Segmentové prefixy, nápověda pro skoky (taken/not taken) • Velikost operandu • Velikost adresy

  36. Formát instrukce Intel 64 • Podobný jako pro IA-32 • Přidány prefixy REX • Defaultní velikost operandů zůstává 32 bitů kromě • Blízkých skoků • Instrukcí implicitně pracujících s RSP

More Related