Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Programování v asembleru - prostředí Jakub Yaghob.

Podobné prezentace


Prezentace na téma: "Programování v asembleru - prostředí Jakub Yaghob."— Transkript prezentace:

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, bitová data, 20-bitová adresace chráněný režim, 24-bitová adresace Intel , první zástupce IA bitová data, 32-bitová adresace stránkování, pipeline (6 stupňů)

6 Historie IA-32 – II Intel 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 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 /1 jádra Smart Cache Core 2 Duo, Core 2 Quadro /4/6 jádra Intel 64, virtualizace Nová mikroarchitektura SSE 4.1

11 Historie IA-32/Intel 64 – VII Core i7/i5/i 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 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ý 2 64 Lineární adresový prostor skutečný 2 48 Fyzický adresový prostor 2 40 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 EAXstřadačEBPukazatel na data do zásobníku EBXukazatel datESIzdroj řetězcových operací ECXčítačEDIcíl řetězcových operací EDXobecný registr (ukazatel I/O)ESPukazatel vrcholu zásobníku

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] CSČtení instrukcí SSVšechny operace se zásobníkem Bázový registr ESP, EBP DSVšechny odkazy na data, kromě výjimek ESCíl řetězcových instrukcí

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


Stáhnout ppt "Programování v asembleru - prostředí Jakub Yaghob."

Podobné prezentace


Reklamy Google