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

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

Programování v asembleru - prostředí

Podobné prezentace


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

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

2 Motivace Dříve Nyní  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)  Obtížné programování  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 Smart Cache Core 2 Duo, Core 2 Quadro 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 EAX střadač EBP ukazatel na data do zásobníku
EBX ukazatel dat ESI zdroj řetězcových operací ECX čítač EDI cíl řetězcových operací EDX obecný registr (ukazatel I/O) ESP ukazatel 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 PF – parity 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 Přímý operand
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í SS Všechny operace se zásobníkem Bázový registr ESP, EBP DS Všechny odkazy na data, kromě výjimek ES Cí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í"

Podobné prezentace


Reklamy Google