Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
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
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.