Architektura procesorů Intel

Podobné dokumenty
Procesor z pohledu programátora

Procesor Intel Pentium (1) Procesor Intel Pentium (3) Procesor Intel Pentium Pro (1) Procesor Intel Pentium (2)

CHARAKTERISTIKA PROCESORU PENTIUM První verze:

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

Základní deska (1) Označována také jako mainboard, motherboard. Deska plošného spoje tvořící základ celého počítače Zpravidla obsahuje:

Princip funkce počítače

Intel (2) Intel (1) Intel (3) Intel (4) Intel (6) Intel (5) Nezřetězené zpracování instrukcí:

Registry 32 bitové pro všeobecné použití: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.

Pohled do nitra mikroprocesoru Josef Horálek

Paměťový podsystém počítače

Metody připojování periferií BI-MPP Přednáška 2

ISU Cvičení 7. Marta Čudová

Strojový kód. Instrukce počítače

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Systém adresace paměti

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

Procesor. Procesor FPU ALU. Řadič mikrokód

Základní deska (1) Parametry procesoru (2) Parametry procesoru (1) Označována také jako mainboard, motherboard

Assembler - 2.část. poslední změna této stránky: Zpět

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Vývoj architektur PC 1

Procesory, mikroprocesory, procesory na FPGA O. Novák, CIE 11 1

Struktura a architektura počítačů (BI-SAP) 11

Cache paměť - mezipaměť

Architektura Pentia 1

Michal Brandejs. Mikroprocesory Intel

CHARAKTERISTIKA MODERNÍCH PENTIÍ. Flynnova klasifikace paralelních systémů

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Architektura Intel Atom

Popis instrukční sady procesoru ADOP

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Michal Brandejs. Mikroprocesory Intel Pentium

Struktura a architektura počítačů (BI-SAP) 7

Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/YOS: Přednáška I / 21

Akademický rok: 2004/05 Datum: Příjmení: Křestní jméno: Osobní číslo: Obor:

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2

Architektury CISC a RISC, uplatnění v personálních počítačích

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

ISU Cvičení 3. Marta Čudová

Jan Nekvapil ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická

Architektury počítačů a procesorů

Další aspekty architektur CISC a RISC Aktuálnost obsahu registru

8. Laboratoř: Aritmetika a řídicí struktury programu

Charakteristika dalších verzí procesorů v PC

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Principy komunikace s adaptéry periferních zařízení (PZ)

Přidělování paměti II Mgr. Josef Horálek

Metody připojování periferií

Architektury VLIW M. Skrbek a I. Šimeček

Struktura a architektura počítačů (BI-SAP) 10

Seznámení s mikropočítačem. Architektura mikropočítače. Instrukce. Paměť. Čítače. Porovnání s AT89C2051

Architektura procesoru ARM

Semestrální práce z předmětu Speciální číslicové systémy X31SCS

x86 assembler and inline assembler in GCC

Procesor. Základní prvky procesoru Instrukční sada Metody zvýšení výkonu procesoru

Opakování programování

Koncepce DMA POT POT. Při vstupu nebo výstupu dat se opakují jednoduché činnosti. Jednotlivé kroky lze realizovat pomocí speciálního HW.

Vnitřní a vnější paměti Část: vnitřní paměti

Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy

Operační systémy 2. Přednáška číslo 1. Úvod do OS

PROCESOR. Typy procesorů

OPS Paralelní systémy, seznam pojmů, klasifikace

Představení a vývoj architektur vektorových procesorů

Petr Krajča. 26. říjen, 2012

RISC a CISC architektura

NSWI /2011 ZS. Principy cpypočítačůčů aoperačních systémů ARCHITEKTURA

Operační systémy. Přednáška 8: Správa paměti II

Struktura a architektura počítačů (BI-SAP) 6

Charakteristika dalších verzí procesorů Pentium

Přerušovací systém s prioritním řetězem

Počítač jako prostředek řízení. Struktura a organizace počítače

Profilová část maturitní zkoušky 2014/2015

Kubatova Y36SAP procesor - control unit obvodový a mikroprogramový řadič RISC Y36SAP-control unit 1

Architektury CISC a RISC, uplatnění v personálních počítačích - pokračování

Architektura procesorů PC shrnutí pojmů

2.8 Procesory. Střední průmyslová škola strojnická Vsetín. Ing. Martin Baričák. Název šablony Název DUMu. Předmět Druh učebního materiálu

Assembler RISC RISC MIPS. T.Mainzer, kiv.zcu.cz

Řízení IO přenosů DMA řadičem

Architektury CISC a RISC, uplatnění rysů architektur RISC v personálních počítačích - pokračování

Mezipaměti počítače. L2 cache. L3 cache

Mikrokontroléry. Doplňující text pro POS K. D. 2001

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Jako pomůcka jsou v pravém dolním rohu vypsány binární kódy čísel od 0 do 15 a binární kódy příkazů, které máme dispozici (obr.21). Obr.

Čísla, reprezentace, zjednodušené výpočty

Vnitřní a vnější paměti Část: vnitřní paměti

Architektury CISC a RISC, uplatnění rysů architektur RISC v personálních počítačích - pokračování

Kubatova Y36SAP 8. Strojový kód Jazyk symbolických instrukcí asembler JSA pro ADOP a AVR Kubátová Y36SAP-strojový kód 1

Y36SAP - aritmetika. Osnova

Pokročilé architektury počítačů

Adresní mody procesoru

a operačních systémů

Struktura a architektura počítačů

Profilová část maturitní zkoušky 2015/2016

Obsluha periferních operací, přerušení a jeho obsluha, vybavení systémových sběrnic

MSP 430F1611. Jiří Kašpar. Charakteristika

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Mikroprocesorová technika (BMPT)

MIKROPROCESOR. (c) Ing. Josef Varačka. Title: XI 28 11:40 (1 of 8)

3. Počítačové systémy

Transkript:

Architektura procesorů Intel Procesory 8086 / 88 Šířka vnitřní datové sběrnice procesoru 8086 je 16-bitová, zatímco procesoru 8088 je 8-bitová. AX 15 8 7 0 AH AL ACCUMULATOR BX BH BL BASE CX CH CL COUNT DX DH DL DATA SP STACK POINTER BP BASE POINTER SI SOURCE INDEX DI DESTINATION INDEX IP INSTRUCTION POINTER F FH FL FLAGS CS CODE SEGMENT DS DATA SEGMENT SS STACK SEGMENT ES EXTRA SEGMENT F 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CF PF AF ZF SF TF IF DF OF 1

CF Carry Flag Nastavuje se při přenosu / výpůjčce z / do nejvyššího bitu, jinak se nuluje. PF Parity Flag Nastavuje se při sudém počtu jedničkových bitů nejnižší slabiky výsledku, jinak se nuluje. AF Auxiliary Flag Nastavuje se při přenosu / výpůjčce z / do bitu 3 (poloviční přenos), jinak se nuluje. ZF Zero Flag Nastavuje se při nulovém výsledku aritmetických a logických operací. SF Sign Flag Nastavuje se při záporném výsledku aritmetických a logických operací. TF Trap Flag Ovládá se programově, nuluje se navíc při každém přerušení; je-li nastaven, pak procesor krokuje program (po provedení každé instrukce se zastaví). IF Interrupt Flag Ovládá se programově, nuluje se navíc při každém přerušení; je-li nastaven, jsou povolena maskovatelná přerušení. DF Direction Flag Ovládá se programově; určuje směr zpracování řetězových instrukcí. OF Overflow Flag Nastavuje se při přetečení výsledku aritmetických operací se znaménkem. Hlavní paměť: FFFFFh max. 64kB kódový segment Segmentové registry xxxx0h CS DS SS ES EA = offset datový segment xxxxx0h zásobníkový segment xxxx0h extra segment xxxx0h 00000h 2

Procesory 80186 / 188 Architektura procesorů 80186 / 188 je (opět z hlediska programátora) stejná jako u procesorů 8086 / 88. Znamená to, že procesory 80186 / 188 mají stejné registry, pracují se stejnými typy operandů, mají stejné formáty instrukcí a stejným způsobem i adresují operandy. Mají i stejné vyjímečné situace a stejným způsobem zpracovávají přerušení. Procesor 80186 má 16-bitovou vnitřní sběrnici, zatímco procesor 80188 má tuto sběrnici pouze 8-bitovou. Procesory 80286 Procesory 80286 umožňují práci ve 2 režimech základní (Real) a chráněný (Protected). V základním režimu pracují procesory 80286 zcela stejně jako 80186. V chráněném režimu poskytují procesory 80286 nové přístupy ke správě paměti, především zavádí pojem úlohy (Task) a zabudovaným systémem přepínání úloh přímo podporují multiprogramování. V chráněném režimu lze používat všechny instrukce procesorů 80186 a navíc několik nových, speciálních systémových instrukcí, se kterými běžný uživatel nepracuje. AX 15 8 7 0 AH AL ACCUMULATOR BX BH BL BASE CX CH CL COUNT DX DH DL DATA SP STACK POINTER BP BASE POINTER SI SOURCE INDEX DI DESTINATION INDEX IP INSTRUCTION POINTER F FH FL FLAGS MACHINE STATUS WORD CS CODE SEGMENT DS DATA SEGMENT SS STACK SEGMENT ES EXTRA SEGMENT 3

F 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IF TF SF ZF AF PF CF DF OF IOPL NT IOPL I/O Privilege Level Dvoubitové pole indikuje maximální hodnotu CPL (Current Privilege Level), ve které jsou ještě povoleny I/O operace bez jakýchkoliv omezení; dále určuje max. hodnotu CPL, ve které je ještě povolena změna příznaku IF. Obsah IOPL je měněn při předávání řízení mezi úlohami, jinak ho lze měnit pouze instrukcemi POPF a IRET při CPL=0. NT Nested Task Je-li nastaven (NT=1) pak indikuje, že zpracovávaná úloha je vnořena v jiné úloze; příznak je měněn při předávání řízení mezi úlohami. MSW 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TS EM MP PE TS Task Switched TS=1 indikuje, že došlo k přepnutí úloh; instrukce pro koprocesor ESC a WAIT pak způsobí výjimku 7 a tím umožní programově zjistit, zda aktuální stav koprocesoru náleží aktuální úloze. EM Emulate Procesor Extension EM=1 indikuje, že koprocesor není dostupný; následující instrukce ESC pak způsobí výjimku 7 a tím umožní činnost koprocesoru programově emulovat. 4

MP Monitor Procesor Extension MP=1 indikuje, že koprocesor je dostupný. PE Protected Mode Enable Nastavením PE na hodnotu 1 se přepne procesor do chráněného režimu. Procesor lze přepnout zpět do základního režimu pouze signálem RESET. 23 15 0 LDTR Hlavní paměť Selektor deskriptoru LDT IDTR Velikost IDT Bázová adresa IDT GDTR Velikost GDT Bázová adresa GDT Deskriptor LDT Tabulka globálních deskriptorů Formát kódového a datového deskriptoru +7 +5 +3 +1 7 0 7 0 Rezerva pro Intel (kvůli kompatibilitě s 80386 vynulováno) Práva přístupu Báze segmentu: bity 23-16 Báze segmentu: bity 15-0 Hranice segmentu (limit) offset poslední slabiky segmentu +6 +4 +2 0 Formát deskriptoru bran 7 0 7 0 Rezerva pro Intel (kvůli kompatibilitě s 80386 vynulováno) Práva přístupu X X X Počet slov Cílový selektor: bity 15-2 Cílový offset X X 5

Slabika práv přístupu u deskriptoru kódových segmentů 7 6 5 4 3 2 1 0 P DPL S=1 E=1 C R A Slabika práv přístupu u deskriptoru datových segmentů 7 6 5 4 3 2 1 0 P DPL S=1 E=0 ED W A Slabika práv přístupu u deskriptoru speciálních systémových datových segmentů 7 6 5 4 3 2 1 0 P DPL S=0 0 TYPE P Present P=0/1 segment není/je mapován do fyzické paměti, tj. obsah deskriptoru není/je platný. DPL Descriptor Privilege Level DPL=0,1,2,3 úroveň oprávnění deskriptoru S Segment Descriptor S=0/1 systémový/kódový_nebo_datový segment E Executable E=0/1 datový/kódový segment A Accessed A=0/1 selektor segmentu dosud nebyl/byl použit C Conforming C=0/1 regulární/přizpůsobivý segment; regulární může měnit CPL. R Readable R=0/1 segment nesmí/může být čten ED Expansion Direction ED=0/1 segment roste nahoru/dolů (data/zásobník); offset musí být / > hranice segmentu (limit). W Writeable W=0/1 do segmentu se nesmí/může zapisovat 6

TYPE 1 volný segment stavu úlohy (Available TSS) 2 segment (tabulka) lokálních deskriptorů 3 obsazený segment stavu úlohy (Busy TSS) Segment stavu úlohy (TSS) Hlavní paměť Selektor deskriptoru TSS Deskriptor TSS Tabulka globálních / lokálních deskriptorů Báze TSS (z deskriptoru TSS) Segment stavu úlohy (TSS) Selektor LTD Selektor DS Selektor SS Selektor CS Selektor ES Registr DI Registr SI Registr BP Registr SP Registr BX Registr DX Registr CX Registr AX Registr F Registr IP SS pro CPL=2 SP pro CPL=2 SS pro CPL=1 SP pro CPL=1 SS pro CPL=0 SP pro CPL=0 Selektor TSS 42 40 38 36 34 32 30 28 26 24 22 20 18 16 14 12 10 8 6 4 2 0 7

Procesory 80386 Procesory 80386 jsou prvními procesory firmy Intel, které mají 32-bitovou architekturu. Plně však respektují architektury předchozích procesorů, m.j. akceptují úplný instrukční soubor procesorů 80286 a umožňují práci v 16-bitovém základním režimu i 16- bitovém chráněném režimu; navíc umožňují práci i ve virtuálním chráněném režimu, kdy přepínáním úloh napodobují paralelní práci několika samostatných procesorů 8086. EAX 31 16 15 8 7 0 AH AX AL EBX ECX EDX ESI EDI EBP ESP BH BX BL CH CX CL DH DX DL SI DI BP SP CS SS Code segment Stack segment DS ES FS Data segments GS EIP EF IP F 8

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 VM RF 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 0 CF VM Virtual 8086 Mode VM=1 indikuje virtuální 8086 režim; příznak lze měnit pouze v chráněném režimu přepnutím úloh. Instrukce POPF příznak nemění, PUSHF ukládá do zásobníku místo tohoto příznaku nulu. RF Resume Flag RF=1 způsobí, že případný breakpoint při zpracování následující instrukce bude ignorován. Po úspěšném provedení následující instrukce je příznak RF vždy nulován. Tím je umožněno pokračování programu po ukončení obslužného programu tohoto breakpointu od stejné instrukce, která předtím breakpoint způsobila. Řídící registry: 31 24 23 16 15 11 8 7 0 CR0 PG 0. 0 MSW CR2 CR3 Lineární adresa, která způsobila chybu stránky Báze adresáře tabulek stránek 0 0 GDTR Limit GDT Báze GDT IDTR Limit IDT Báze IDT LDTR Selektor LDT TR Selektor TSS 9

Ladící registry: 31 0 DR0 DR1 DR2 DR3 DR6 DR7 Lineární adresa breakpointu 0 Lineární adresa breakpointu 1 Lineární adresa breakpointu 2 Lineární adresa breakpointu 4 Stav breakpointu (Breakpoint Status) Řízení breakpointu (Breakpoint Control) Testovací registry: 31 0 TR6 TR7 Řízení testu TLB (TLB Test Control) Stav testu TLB (TLB Test Status) Transformace adresy: Výpočet efektivní adresy Báze Index Konstanta Displacement * CS registr: Selektor Index k deskriptoru + Logická (virtuální) adresa Segmentace Stránkování Lineární adresa Fyzická adresa 10

Formát kódového a datového deskriptoru +7 +5 +3 +1 7 0 7 0 AVL Báze segmentu: bity 31-24 G D 0 Limit: 19-16 Práva přístupu Báze segmentu: bity 23-16 Báze segmentu: bity 15-0 Limit segmentu: bity 15-0 +6 +4 +2 0 Formát systémového datového deskriptoru +7 +1 +3 +1 7 0 7 0 Báze segmentu: bity 31-24 G 0 0 0 Limit: 19-16 Práva přístupu Báze segmentu: bity 23-16 Báze segmentu: bity 15-0 Limit segmentu: bity 15-0 +6 +4 +2 0 Formát deskriptoru bran +7 7 0 7 0 Cílový offset: bity 31-16 +6 +1 Práva přístupu 0 0 0 Počet slov +4 +3 Cílový selektor: bity 15-2 x x +2 +1 Cílový offset: bity 15-0 0 G Granularity G=0/1 slabiková/stránková granularita, tj. segment může být dlouhý buď 1MB (2 20 slabik), nebo 4GB (2 20 stránek dlouhých 4kB; tyto stránky jsou nezávislé na stránkovacím systému). D Default Instruction Attributes D=0/1 implicitní atributy jsou 16/32 bitů (operandy i adresy) AVL Available Field for User or OS Volný bit pro využití uživatelem/systémem. 11

Slabika práv přístupu u deskriptoru speciálních systémových datových segmentů 7 6 5 4 3 2 1 0 P DPL S=0 TYPE TYPE 0 neplatný segment (Invalid) 1 volný segment stavu úlohy pro 80286 (Available 80286 TSS) 2 segment (tabulka) lokálních deskriptorů (LDT) 3 obsazený segment stavu úlohy pro 80286 (Busy 80286 TSS) 4 brána volání procedury pro 80286 (80286 Call Gate) 5 brána přepínání úloh (Task Gate) pro 80286 i 80386 6 brána přerušení pro 80286 (80286 Interrupt Gate) 7 brána zachycování/krokování pro 80286 (80286 Trap Gate) 8 neplatný segment (Invalid) 9 volný segment stavu úlohy pro 80386 (Available 80386 TSS) A nedefinováno (rezervováno pro Intel) B obsazený segment stavu úlohy pro 80386 (Busy 80386 TSS) C brána volání procedury pro 80386 (80386 Call Gate) D nedefinováno (rezervováno pro Intel) E brána přerušení pro 80386 (80386 Interrupt Gate) F brána zachycování/krokování pro 80386 (80386 Trap Gate) Procesory 80486 Procesory 80486 jsou velmi podobné procesorům 80386. Na svém čipu však mají zabudovánu i jednotku prakticky shodnou s koprocesorem 80387, tzv. FPU (Floating-Point Unit) a obsahuje i některé další doplňky hardware, jako např. rychlou (cache) paměť o velikosti 8kB umožňující podstatné zrychlení přístupu k nejpoužívanějším instrukcím i datům, mohutnější testovací subsystém apod. Instrukční soubor obsahuje všechny instrukce procesorů 80386 a koprocesorů 80387 a šest nových instrukcí určených ke zrychlení práce s programovými semafory a k vnitřnímu testování. Řídící registr CR0 procesorů 80486 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 PG CD NW 0 0 0 0 0 0 0 0 0 0 AM 0 WP 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 NE 1 TS EM MP PE NE Numeric Exception Příznak umožňuje kompatibilitu s předchozími koprocesory 8087, 80287 a 80387. Pro NE=0 (nastaveno po startu procesoru) je nemaskovaná výjimka koprocesoru zpracována jako externí přerušení 13; pro NE=1 jako výjimka 16. WP Write Protect Příznak má vztah ke stránkování. Podrobnosti viz. literatura. 12

Procesory Pentium Procesor Pentium obsahuje dvojici zřetězených výkonných jednotek označovaných jako jednotka U a jednotka V. Ovšem tyto 2 jednotky si nejsou zcela rovnocenné. Výkonná jednotka U je schopna provádět všechny celočíselné i numerické instrukce, kdežto výkonná jednotka V pouze základní celočíselné instrukce a instrukci FXCH. Procesor Pentium má oddělenou paměť cache pro instrukce a data (oproti 80486). Datová cache je realizována jako dvoubranná, aby k ní mohly přistupovat současně obě výkonné jednotky. Pole příznaků je dokonce tříbranné, aby mohlo být přístupné současně i při dotazovacím cyklu sběrnice. Obě paměti cache jsou vybaveny TLB (Translation Lookaside Buffer) k překladu lineární adresy na fyzickou. Novinkou procesoru Pentium oproti předchozím procesorům je to, že je schopen dokončit 2 instrukce během jedné periody hodin. To umožňuje superskalární zřetězená architektura se dvojicí výkonných jednotek (popis u procesoru viz. dále). PF D1 D2 D2 E WB E WB PF PreFetch čtení instrukce D1 Decode1 dekódování instrukce D2 Decode2 generování adres EX Execute provedení WB Write Back zápis výsledku Díky superskalární architektuře však může procesor Pentium zpracovávat v každém stupni 2 instrukce, tedy rozpracováno může být až 10 instrukcí (protože každá výkonná jednotka má 5 stupňů viz. obrázek). PF jednotka předvýběru instrukcí má za úkol načítat instrukce z vnitřní paměti cache nebo z operační paměti a ukládat je do fronty instrukcí. Protože má procesor oddělenou pamět cache pro data a instrukce, nehrozí konflikt se čtenými nebo zapisovanými daty při načítání instrukce z této vnitřní paměti cache. Jednotka pro předvýběr instrukcí disponuje frontou instrukcí o délce 64 slabik, která je plněna z paměti cache položkami o délce 32 slabik. Protože jednotka předvýběru instrukcí spolupracuje s jednotkou předvídání skoků, mohou být pro další zpracování připraveny 2 nezávislé položky. První může odpovídat sekvenčnímu zpracování programu, druhá pak jeho větvení na základě spolupráce s jednotkou předvídání skoků a bufferem adres skoků. Běžně jednotka předvýběru instrukcí načítá instrukce z paměti v přirozeném pořadí. Pokud je však načtena instrukce skoku, buffer cílových adres BTB (Branch Target Buffer) napoví, zda ke skoku dojde nebo nikoliv. Pokud se předpokládá, že skok nebude proveden, načítání instrukcí pokračuje sekvenčně. V případě předpokladu provedení skoku je jako druhá 13

položka načtena položka odpovídající cílové adrese skoku. Došlo-li ke špatnému předpokladu provedení skoku, je obsah fronty instrukcí zneplatněn a ihned je zahájeno nové načítání instrukcí. Algoritmus předvídání skoků předpokládá, že instrukce větvení bude provedena tím samým způsobem, jako byla provedena naposledy. Druhou fází zpracování instrukce je první dekódování D1 prováděné dekodérem instrukcí. Ten obsahuje dvojici dekodérů, které dekódují následující 2 instrukce v přirozené posloupnosti instrukcí. V tomto bodě se také určuje, zda instrukce musí být dále zpracovány postupně, nebo jako pár instrukcí, každá v jedné výkonné jednotce. Podobně jako u procesorů 80386 a 80486 platí i u procesoru Pentium to, že pokud má instrukce prefix, pak její dekódování trvá o 1 periodu hodin déle. Proto je zapotřebí dát pozor na to, aby byl v programu minimalizován počet prefixů, který může snížit výkon celého systému. První dekódování instrukce je následováno dekódováním druhým D2, při němž jsou určovány adresy operandů ležících v paměti podobným způsobem jako u předchozích procesorů Intel. Přínosem procesoru Pentium při generování adresy je to, že zvládne během jediné periody hodin generovat adresu skládající se ze 2 částí (báze a index). Při fázi provádění E procesor prostřednictvím dvojice ALU a vnitřní paměti cache dat realizuje vlastní provedení instrukce. Některé instrukce jsou přitom prováděny nikoliv mikroprogramově, ale hardwarově, takže jejich provedení vychází rychlejší než u procesorů dřívějších. Při této fázi jsou všechny instrukce zpracovávané v řetězci U a instrukce zpracovávané řetězcem V kromě podmíněných skoků kontrolovány na správnost předpovězení cílové adresy. Během jedné periody hodin může být prováděna buď jedna nebo 2 instrukce. K tomu, aby mohly být současně zpracovány 2 instrukce je nutno splnit několik pravidel. Předně nesmí jít o instrukce závislé, kdy by jedna instrukce potřebovala ke svému provedení výsledek instrukce druhé. Závislostí je např. i to, když je první instrukce instrukcí aritmetickou nebo logickou (tedy nastavující příznaky) a druhá instrukce je využívá (příznaky). Žádná z instrukcí nesmí obsahovat v adresní části displacement a přitom pracovat s přímou hodnotou. Instrukce s prefixem (s výjimkou prefixu (0F) H pro podmíněné skoky) mohou být zpracovány pouze v jednotce U. Kromě toho musí být obě instrukce tzv. jednoduché. Jednoduché instrukce nejsou prováděny mikroprogramově, ale hardwarově. Kromě aritmetických a logických instrukcí mezi pamětí a registrem trvá jejich provádění jedinou periodu hodin. V zásadě je možno říci, že jednoduché jsou a mohou být tedy zpracovávány po dvojicích instrukce MOV, aritmetické a logické instrukce, INC, DEC, PUSH, POP, LEA, JMP, CALL, podmíněné skoky a NOP. Přitom instrukce skoků a volání mohou být prováděny ve dvojici, jen jde-li o druhou instrukci dvojice. Naopak instrukce rotací a posuvů musí být první instrukcí dvojice, neboť mohou být zpracovávány pouze výkonnou jednotkou U. Poslední fází zpracování instrukce je zápis výsledku. Nyní instrukce modifikují stav procesoru a jejich výsledek je ukládán na místo určení. Kromě toho jsou instrukce podmíněných skoků zpracovávané v řetězci V kontrolovány na správnost předpovězení cílové adresy. 14

Po dokončení některých instrukcí provádí procesor nové řazení instrukcí. To má za následek zrušení provádění instrukcí, jejichž zpracování již bylo zahájeno a vyprázdnění fronty načtených instrukcí. Proč se tohle zrovna provádí? V případech, kdy jsou modifikovány některé důležité informace ovlivňující činnost procesoru by totiž mohly být instrukce, jejichž zpracování již bylo zahájeno chybně interpretovány. Struktura registru příznaků EFLAGS 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 0 0 0 0 0 0 0 0 0 0 ID VIP VIF AC VM RF 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF ID Identification Flag ID=1/0 umožňuje/neumožňuje provádět instrukci CPUID VIP Virtual Interrupt Pending Flag VIP=1/0 je/není povolena činnost virtuálního příznaku povolení přerušení VIF VIF Virtual Interrupt Flag Virtuální příznak povolování přerušení. Aktivuje se příznakem VIP a je-li aktivován, má stejný význam jako příznak IF. Zřetězená numerická výkonná jednotka procesoru Pentium je výrazně výkonnější než numerická jednotka procesoru 80486DX. Podstatně byl zdokonalen především mikrokód. Kromě toho je numerická jednotka navržena tak, aby byla schopna v každé periodě hodin převzít 1 instrukci plovoucí řádové čárky. Provádění instrukce probíhá v 8 fázích, numerická výkonná jednotka je tedy osmistupňově zřetězena, prvních 5 fází je přitom sdíleno s celočíselnou výkonnou jednotkou. X1 X2 WF PF D1 D2 E WB Obrázek 2 Jednotka s pohyblivou řádovou čárkou začleněná do integerové podjednotky Jedna z částí jednotky s pohyblivou řádovou čárkou Integerová jednotka 15

Jednotlivé fáze jsou: X1 Floating-Point Execute Stage 1 výpočet v plovoucí řád. Čárce X2 Floating-Point Execute Stage 2 výpočet v plovoucí řád. Čárce WF Write Floating-Point Result zapsání výsledku ER Error Reporting/Update Status Word chybové hlášení/nastavení stavového slova Instrukce v plovoucí řádové čárce nemohou být párovány s celočíselnými instrukcemi. Je-li však v programu některá z instrukcí FLD, FADD, FSUB, FMUL, FDIV, FCOM, FUCOM, FTST, FABS, FCHS bezprostředně následována instrukcí FXCH, pak budou obě numerické instrukce zpracovány souběžně. První z nich přitom bude zpracovávána řetězcem U a druhá řetězcem V. Při zpracovávání posloupnosti instrukcí je třeba vzít v úvahu to, že ve fázi X1 je určována tzv. bezpečnost instrukce, která může ovlivnit dobu zpracování instrukce následující. Pod pojmem bezpečnost instrukce se skrývá to, zda instrukce může generovat chybu přeplnění, podplnění nebo ztráty přesnosti a když nepotřebuje asistenci mikroprogramu pro obsluhu speciálních výsledků. Je-li instrukce bezpečná, pak pro instrukci následující je možno ukončit fázi EX. Není-li však bezpečná, musí se s provedením fáze EX následující instrukce počkat do té doby, než je dokončena fáze ER právě zpracovávané instrukce. To znamená pozdržení zpracovávání následující instrukce o 4 periody hodin. Procesor Pentium Pro Rodina procesorů Pentium Pro používá dynamickou spouštěcí architekturu, která používá spekulativní spouštění bez předem určeného pořadí a hardwarového přejmenování registrů a samozřejmě predikci větví programů. Hlavním rysem procesoru je roura (pipeline), která rozdělí procesorové makroinstrukce do jednoduchých mikrooperací, nazývaných microops nebo µops, a superskalární mikroprocesorové jádro, které provádí mikrooperace. Toto jádro obsahuje několik jednotek pro celočíselnou větev, větev s plovoucí řádovou čárkou a část zpřístupňující paměť. Například celočíselná jednotka a jednotka s plovoucí řádovou čárkou sdílejí společně 1 jednotku. Cache paměť je dvoubranná se dvěma porty, první slouží ke čtení, druhý k zapisování. Jednotka procesoru Pentium Pro obsahuje 3 části: (1) předřazená část respektující pořadí, (2) jádro, nerespektující pořadí a (3) ukončovací obvod, respektující pořadí. Na obrázku 3 je schéma roury. Port 2 Port 3 Port 4 BTB0 BTB1 IFU0 IFU1 IFU2 ID0 ID1 RAT ROB Rd RS BTB0 BTB0 Port 0 BTB0 Port 1 Obrázek 3 16

Jelikož procesor Pentium Pro provádí instrukce v pořadí rozdílném od spuštěného programu (předpisu), je důležité se ujistit, zda je připraven dostatečný počet mikrooperací pro spuštění. Vybrání správné větve a rychlé dekódování jsou základními předpoklady k získání dobrého výkonu. Během každého hodinového cyklu může být dekódovány 3 makroinstrukce v ID1. Pokud jsou instrukce komplexní nebo příliš dlouhé (více jak 7 slabik) je dekodér omezen nemůže dekódovat tolik instrukcí. Dekodér může dekódovat: - 3 makroinstrukce během hodinového cyklu - 6 mikrooperací během hodinového cyklu - makroinstrukce dlouhé nad 7 slabik Procesor Pentium Pro má 3 dekodéry v části D1. První dekodér je schopen dekódovat jednu ze 4 makroinstrukcí nebo několik mikrooperací během hodinového cyklu. Další dva dekodéry mohou dekódovat instrukci jedné mikrooperace během hodinového cyklu. Instrukce které mají více jak 4 mikrooperace zaberou více času. Tedy: - Jednoduché instrukce typu registr-registr jsou pouze jedna mikrooperace - Nahrání instrukce je pouze 1 mikrooperace - Uložení instrukce jsou 2 mikrooperace - Jednoduché čtení a změna jsou 2 mikrooperace - Jednoduché operace registr-paměť mají 2 až 3 mikrooperace - Jednoduché uložení se změnou jsou 4 mikrooperace - Komplexní instrukce zabírají více jak 4 mikrooperace Po dekódování jsou mikrooperace předány do Reservation Station (RS), což je začátek jádra mikroprocesoru, které neuvažuje pořadí. V RS čekají mikrooperace, dokud nejsou jejich data aktivní. Pokud má mikrooperace přístupná všechna data, je tato mikrooperace předána prováděcí jednotce. Pokud už přijde mikrooperace do RS s daty aktivními a prováděcí jednotka je volná, je mikrooperace přímo poslána do prováděcí jednotky; potom tato mikrooperace nezabere žádný čas v RS. Všechny prováděcí jednotky jsou rozděleny na jednotlivé porty, které vystupují z RS. Po provedení mikrooperace je tato uložena v Re-Order Buffer (ROB) a čeká na dokončení. V této části jsou všechna data zapsána zpět do paměti a všechny mikrooperace jsou dokončovány, vždy 3 během hodinového cyklu. Obrázek 4 ukazuje jádro Re-Order a dokončovací část. 17

ROB Rd RS Port 0 Port 2 Port 1 Port 3 Port 4 RRF ROB Wb Register Retirement File Re-Order Buffer Writeback Obrázek 4 Cache paměti (na čipu) L1 se skládají z 8kB čtyřcestných asociativních, instrukčních cache jednotek a s délkou řádku 32 bytů. Dále obsahuje jednu 8kB dvoubrannou datovou cache jednotku. Veškeré miss v paměti L1 jsou maskovány úrovní dvě L2. Časový rozdíl mezi náhradou L2 chyby L1 je 11 až 14 cyklů (struktura DRAM). Data v paměti mohou být současně zpřístupněna pomocí instrukce nahrání a uložení, dokud jsou data v různých bankách. Instrukční předzpracovávač umožňuje agresivní předzpracování přímého kódového řádku. Nejvhodnější je uspořádání kódu tak, aby šlo celou větev projít bez cyklů, nebo skoků. Málo používaná část kódu je přesunuta do spodek a je zpracována až na konci. Předzpracování je vždy pro 16-bitový, zarovnaný blok. Procesor totiž čte instrukce v 16-bitových rámcích. 512-vstupová BTB (Branch Target Buffer) uchovává historii předešlých větví programu a jejich cílů (adres). Když je daná větev předzpracovávaná, BTB předá cílovou adresu přímo do IFU (Instruction Fetch Unit). Pokud je větev zpracována, je do BTB uložena nová cílová adresa. Tento algoritmus (Branch Target Buffer) zahrnuje srovnávání vzorků s předešlými 4 historickými bity cílové adresy. Například cyklus, který se 4x opakuje, má 100% predikci. Navíc má procesor Pentium Pro RSB (Return Stack Buffer), který určuje predikcí návratové adresy procedur, které jsou volány z různých míst. Pro větve existují 3 stavy: - Každá větev, která není brána v úvahu nezabírá žádný čas. - Větev, která je správně určena pomocí BTB zabírá maximálně 1 hodinový cyklus. - Větev, která je chybně určená zabírá až 9 hodinových cyklů. - Větve, které nejsou v BTB, ale jsou správně určeny predikcí, zabírají kolem 5 až 6 hodinových cyklů. 18

Procesor Pentium Pro uchovává všechny zápisy do paměti do zápisového bufferu. Tento buffer zajišťuje, že při provádění instrukcí se nemusí čekat na provedení zápisu, ale pokračuje se až do konce a potom se teprve provedou všechny zápisy. Zápisy jsou provedeny v tom pořadí, v jakém přišly. Procesor Pentium MMX Technologie MMX (Multimedia Extension) je jakousi nádstavbou nad základní procesorovou technologií. Technologie používá SIMD (Single Instruction, Multiple Data) ke zvýšení multimédií a komunikací, zpracováním datových elementů paralelně. Do instrukční sady je přidáno 57 nových instrukcí a nové 64-bitové datové typy viz. obrázek 5. Tedy je přidáno osm 64-bitových MMX registrů; každý z nich může být nezávisle adresován MM0 MM7, viz. obrázek 6. 63 32 31 8 7 0 8-slabik zapakovaných do 64-bitů 63 32 31 16 15 0 4-slova zapakovaná do 64-bitů 63 32 31 0 2-dvouslova zapakovaná do 64-bitů Obrázek 5 MM7 63 0 MM6 MM5 MM4 MM3 MM2 MM1 MM0 Obrázek 6 19

Technologie MMX je transparentní k operačním systémům a 100% kompatibilní se všemi předchozími technologiemi Intelu. Tento procesor přidává nové části do pipeline zpracování, viz. obrázek 7. MR/W Mex WM/M 2 M 3 WMul PF F D1 D2 E WB Část MMX E 1 E 1 E 2 E 2 E 3 MMX integrovaná do integer části Pouze integerová roura Obrázek 7 Procesory Pentium s technologií MMX přidávají jednu část do integerové roury. Instrukční slabiky jsou předzpracovány z kódové cache v části předzpracování (PF) a dále jsou analyzovány v zpracovávací fázi (F). Také veškeré prefixy jsou zpracovány ve fázi F. Instrukční analýza používá FIFO buffer, který se nachází mezi částí F a D1. Během každého hodinového cyklu mohou být uloženy 2 instrukce do FIFO bufferu. Potom jsou přetaženy tyto instrukce do části D1. Pokud je průměrné provádění jedné instrukce 2 hod. cykly, je FIFO normálně plný. Zde se mohou objevit časové prostoje, když je FIFO plný a instrukce trvá déle. Pokud je FIFO naopak prázdný, vydá signál, že hladoví (starving) a požaduje instrukce. - Aritmeticko-logická jednotka provádí aritmetické a logické operace (add, xor, ) - Násobící jednotka provádí násobící operace. Násobení zabírá 3 cykly, ale může být zřetězeno a tím pádem může zabírat i 1 hodinový cyklus. - Posunová jednotka provádí veškeré posuny a provádí pakovací a depakovací operace. - Veškeré instrukce MMX nemohou být zpárovány s jinými instrukcemi. - Při ukládáná MMX registru do paměti, nebo jiného (ne MMX) registru zabere navíc jeden hodinový cyklus na provedení konverze. Dva typy aritmetiky: s kruhovým přenosem (Wrap Around) a s nasycením (Saturating), kdy se po dosažení mezní hodnoty (např. (0FFFF) H ) dalším přičítáním kladného čísla hodnota nemění. To může mít smysl v případě, kdy číslo znamená hodnotu barvy a po dosažení mezní hodnoty černé nebo bílé se barva dále nemění. Tohoto typu aritmetiky (saturace) se používá při zpracování difernčně kódovaných pixelů, při interpolaci a u Gouraudova stínování. 20

79 63 79 63 MM0 79 79 63 63 FP MM1 79 63 MM2 79 63 MMX MM3 MM4 79 79 63 63 MM5 MM6 MM7 Obrázek 8 Důležitou věcí je, že MMX registry MM0 až MM7 se mapují do registrů s pohyblivou řádovou čárkou koprocesoru, tedy nelze zároveň používat MMX režimu a FP režimu (obrázek 8). Na obrázku 9 je vidět, jak přispívá technologie MMX na zvýšení výkonu grafických operací. 5 4.5 4 Pentium 200 MHz Pentium MMX 200 MHz 3.5 3 2.5 2 1.5 1 0.5 0 Dekomprese videa MPEG-1 Dekomprese audia MPEG-1 Filtrace obrazu Obrázek 9 Na obrázku 10 je vidět, rozdíl mezi čistým procesorem Pentium bez technologie MMX a s technologií MMX. U V U V U WB V WB WB (32b) Hlavní paměť Hlavní paměť Obrázek 10 21

Procesor Pentium II Tento procesor používá stejnou zřetězenou technologii, popsanou u MMX technologie. Cache paměť u procesoru Intel Pentium MMX a Pentium II se skládá ze dvou 16kB, čtyřcestných asociativních pamětí, s délkou řádku 32 bytů. Cache obsahuje 8 banek, proložených na 4-bytových hranicích. U tohoto procesoru může být datová cache zpřístupněna z obou rour, pokud je adresa odkazující do různých banek. Pokud čistě náhodou adresy (u Pentium II) odkazují na stejné místo (načtení + uložení), jsou zpracovány v jediném hodinovém cyklu. U technologie MMX je prodleva při cache miss 8 hodinových cyklů, u Pentium II je to 10 hodinových cyklů. Prediktivní určení správných větví programu je identické s procesorem Pentium Pro až na jednu výjimku. V této technologii, mohou být větve chybně predikovány, když poslední slabika dvou instrukcí stejné větve se objeví ve stejné 4-bytově zarovnané části paměti, viz. obrázek 8. Větev A Větev B Byte 0 Byte 1 Byte 2 Byte 3 Byte 0 Byte 1 Byte 2 Byte 3 Obrázek 8 Poslední byte větve A Poslední byte větve B To může nastat, pokud existují dvě po sobě jdoucí větve, bez zasahujících instrukcí a druhá instrukce je dlouhá pouze 2 byty (jako JMP ±128). K zamezení chybné predikce se vytvoří druhá větev delší, použitím 16-bitového, relativního displacementu, místo 8-bitového displacementu. Tato technologie má 4 zápisové buffery, ty mohou být použity oběma větvemi U i V (viz. popis procesoru Pentium). K vylepšení zápisu do paměti se instrukce spojí do 4- instrukční skupiny a ty jsou provedeny, před provedením dalších instrukcí. Procesor Pentium III Procesor Pentium III zavádí proudící SIMD rozšíření, které zahrnuje 70 nových instrukcí pro rychlejší zpracování, podporu rozsáhlých struktur obrázků, 3D streaming audio a video, přístup na Internet, rozpoznávání řeči, atd. 22

Jedná se o 0.18 mikronovou technologii a obsahuje 28.1 miliónů tranzistorů. Existují provedení o frekvenci 667 MHz, 733MHz a 800MHz. V této technologii je použito ATC (Advanced Transfer Cache) a ASB (Advanced System Buffering). ATC se skládá z mikroarchitektury, která zajišťuje větší rozhraní pro rozsah dat. ATC zahrnuje neblokující, plně rychlostní, maticové cache úrovně 2, osmicestné, asociativní; dále 256-bitová datová, sběrnicová cache úrovně 2. ASB zvyšuje použití dostupné šířky dat na 100 až 133 Mhz; skládá se ze 4 bufferů se zpětným zápisem, 6 plnících bufferů a 8 frontových vstupů na sběrnici. Také je zvětšen prostor adresovatelné cache paměti na 4GB a systémové paměti až na 64GB. Procesor má zabudované sériové číslo, které by mělo sloužit k zvýšení bezpečnosti; slouží jako elektronické sériové číslo a umožňuje uživateli/sítí identifikaci stanice. V procesoru je zabudován test, který umožňuje testovat instrukční cache a datovou cache na výskyt chyby a dokáže ji i případně odstranit. Na procesoru je zabudována termodioda, která zjišťuje teplotu procesoru a podle zahřátí se může zapínat větrák, popř. se úplně vypnout počítač. Procesor Pentium III je umístěn ve speciální schránce nazývané S.E.C.C.2, která je odolná proti lidským dotykům a má zvýšenou odolnost proti statické elektřině. Koneckonců, jak uvádí Intel, toto pouzdro bude v budoucnosti akceptováno i jinými firmami, protože je naprosto skvělé. Procesor má zabudovanou technologii ECC (Error Correction Code), která funguje v cache pamětech. Jednotka s pohyblivou řádovou čárkou podporuje 32-bitový, 64-bitový a 80-bitový formát dat. Koprocesory 8087 / 80287 / 80387 Koprocesory 8087, 80287 a 80387 jsou matematické koprocesory rozšiřující možnosti procesorů 8086/88 až 80386 o práci s čísly s větší přesností a o práci s čísly typu Real. Všechny tyto koprocesory mají velmi podobnou architekturu a instrukční soubor. Registry koprocesoru 8087 79 78 64 63 0 R0 Sig Exponent f 63 f 62 Mantisa f 1 f 0 R1 R2 R3 R4 R5 R6 R7 23

31 0 15 0 Ukazatel instrukce Registr známek Ukazatel operandu Stavový registr Sig Sign Znaménko čísla (0/1 +/-) Řídící registr Exponent Exponent Exponent čísla v kódu transformované nuly (0 až 32767) Mantisa Mantisa Mantisa čísla v přímém kódu (f i značí jednotlivé bity) Číslo = (-1) Sign * 2 (Exponent 16383) * (f 63.f 62 f 61 f 1 f 0 ) Okolí koprocesoru 80287 v chráněném režimu 15 0 +1 +3 +5 +7 +9 +11 +13 Řídící slovo Stavové slovo Slovo známek Offset (IP) Selektor (CS) Offset operandu Selektor operandu 0 +2 +4 +6 +8 +10 +12 Okolí koprocesoru 80387 ve 32-bitovém základním režimu +3 31 16 15 11 0 Rezervováno Řídící slovo 0 +7 Rezervováno Stavové slovo +4 +11 Rezervováno Slovo známek +8 +15 Rezervováno Ukazatel instrukce IP: 15-0 +12 +19 0 0 0 0 Ukazatel IP: 31-16 0 Operační kód: 11 bitů +16 +23 Rezervováno Ukazatel operandu OP: 15-0 +20 +27 0 0 0 0 Ukazatel OP: 31-16 0.. 0 +22 24

Okolí koprocesoru 80387 ve 32-bitovém chráněném režimu +3 31 16 15 0 Rezervováno Řídící slovo 0 +7 Rezervováno Stavové slovo +4 +11 Rezervováno Slovo známek +8 +15 +19 +23 Offset (IP) 0 0 0 0 Op. kód: 11 bitů Selektor (CS) Offset operandu +12 +16 +20 +27 Rezervováno Selektor operandu +22 25

INSTRUKCE Instrukční soubor procesorů Intel 8086 / 88 Instrukční soubor procesorů Intel 80186 / 188 Instrukční soubor procesorů Intel 80286 Instrukční soubor procesorů Intel 80386 Instrukční soubor procesorů Intel 80486 Instrukční soubor procesorů Intel Pentium Instrukční soubor procesorů Intel Pentium III Instrukční soubor matematického koprocesoru AAA ASCII Adjust After Addition Instrukce AAA se používá po instrukci ADD/ADC AL, x aplikované na dva operandy v rozvinutém BCD tvaru k úpravě výsledku na stejný tvar. AAD ASCII Adjust AX Before Division Instrukce AAD se používá před instrukcí DIV: v registru AX se předpokládají dvě číslice v rozvinutém BCD tvaru. Úprava výsledku na stejný tvar. AAM ASCII Adjust AX After Multiply Instrukce AAM se používá po instrukci MUL aplikované na dva slabikové operandy v rozvinutém BCD tvaru k úpravě výsledku na stejný tvar. AAS ASCII Adjust AL After Subtraction Instrukce AAS se požívá po instrukci SUB/SBB AL, x aplikované na dva operandy v rozvinutém BCD tvaru k úpravě výsledku na stejný tvar. ADC Add with Carry Instrukce ADC aritmeticky sečte zdrojový operand s cílovým a s příznakem a výsledkem operace přepíše cílový operand a nastaví podle něj příznaky OF, ZF, AF, PF a CF. Zdrojový operand nemění. ADD Add Instrukce ADD aritmeticky sečte zdrojový operand s cílovým, výsledkem operace přepíše cílový operand a nastaví podle něj příznaky OF, SF, ZF, AF, PF a CF. Zdrojový operand nemění. ADDPS Packed Single-FP Add Instrukce přičte čísla s pohyblivou řádovou čárkou SP. Výsledek (zprava): Byte0 1 + Byte0 2 ; Byte1 1 + Byte1 2 ; Byte2 1 + Byte2 2 ; Byte3 1 + Byte3 2. ADDSS Scalar Single-FP Add Instrukce sečte pouze nejnižší slabiku ze 4; ostatní 3 slabiky převezme z prvního operandu. Výsledek (zprava): Byte0 1 + Byte0 2 ; Byte1 1 ; Byte2 1 ; Byte3 1. 26

AND Logical AND Instrukce AND provede logický součin operandů: operaci provádí bitově s odpovídajícími bity operandů. Výsledkem operace přepíše cílový operand a nastaví podle něj příznaky OF, SF, ZF, PF a CF, hodnota příznaku AF není definována. Zdrojový operand nemění. ANDNPS Bit-wise Logical And Not For Single-FP Instrukce provede bitový, logický součin mezi znegovaným zdrojovým operandem a cílovým operandem. ANDPS Bit-wise Logical And For Signle-FP Instrukce provede bitový, logický součin mezi jednotlivými 4 slabikami. ARPL Adjust RPL Field of Segment Selector Instrukce ARPL provede kontrolu, zda selektor určený cílovým operandem (obvykle selektor volaného programu podprogramu) nemá vyšší oprávnění (RPL) než selektor určený zdrojovým operandem (selektor volajícího operandu). Je-li tomu tak, změní hodnotu RPL cílového operandu na hodnotu RPL zdrojového operandu a nastaví příznak ZF, v opačném případě pouze vynuluje ZF. BOUND Check Array Index Against Bounds Instrukce BOUND provede kontrolu obsahu registru určeného prvním operandem, zda leží v mezích určených druhým operandem. Druhým operandem instrukce je adresa dvouslova; první slovo tohoto dvouslova obsahuje dolní mez, druhé slovo potom horní mez. Kontrolovaná hodnota musí ležet uvnitř určeného intervalu (včetně mezí), jinak je generována výjimka 5. Operandy ani příznaky se nemění. BSF Bit Scan Forward Instrukce BSF hledá první jedničkový bit zprava ve zdrojovém operandu. Pokud takový bit nalezne, nastaví příznak ZF a pozici bitu uloží do cílového registru. BSR Bit Scan Reverse Instrukce BSR hledá první jedničkový bit zleva ve zdrojovém operandu. Pokud takový bit nalezne, nastaví příznak ZF a pozici bitu uloží do cílového registru. BSWAP Byte Swap Reverzuje pořadí bitů ve 32-bitovém registru. Bity 0-7 jsou prohozeny s bity 24-31. Bity 8-15 jsou prohozeny s bity 16-23. (Little-endian Big-endian) BT Bit Test Instrukce BT přenese do příznaku CF hodnotu bitu, jehož offset je dán druhým operandem z objektu daného prvním operandem. BTC Bit Test and Complement Instrukce BTC pracuje stejně jako instrukce BT, ale navíc pak změní (invertuje) hodnotu testovaného bitu. BTR Bit Test and Reset Instrukce BTR pracuje stejně jako instrukce BT, ale navíc testovaný bit vynuluje. BTS Bit Test and Set Instrukce BTS pracuje stejně jako instrukce BT, ale navíc testovaný bit nastaví (na jedničku). 27

CALL Call Procedure Instrukce CALL předá řízení proceduře (podprogramu). CBW/CWDE Convert Byte to Word / Convert Word to Doubleword Instrukce CBW nastaví jednotlivé bity registru AH na hodnotu nejvyššího bitu registru AL převede osmibitové číslo se znaménkem (AL) na stejné 16-bitové číslo v AX. Instrukce CWDE nastaví jednotlivé bity (16) horní části registru EAX na hodnotu nejvyššího bitu registru AX převede 16-bitové číslo z registru AX na 32-bitové číslo v registru EAX. CDQ Convert Doubleword to Quadword Převede 32-bitové číslo na 64-bitové číslo. CLC Clear Carry Flag Instrukce CLC vynuluje příznak CF. CLD Clear Direction Flag Instrukce CLD vynuluje příznak DF. CLII Clear Interrupt Flag Instrukce CLI vynuluje příznak IF. CLTS Clear Task-Switched Flag in CR0 Instrukce CLTS nuluje příznak TS ve stavovém slově procesoru (MSW). Může být provedena pouze při nejvyšším oprávnění, jinak způsobí výjimku 13. CMC Complement Carry Flag Instrukce CMC změní hodnotu příznaku CF (not CF CF). CMOVcc Conditional Move Instrukce porovná hodnoty příznaků EFLAGS a provede MOV, pokud příznaky splňují definovanou podmínku. CMP Compare Two Operands Instrukce CMP aritmeticky odečte zdrojový operand od cílového a podle výsledku nastaví příznaky OF, SF, ZF, AF, PF a CF. Operandy nemění. CMPPS Packed Single-FP Compare Instrukce porovná 4 jednotlivé slabiky. Pokud se dané odpovídající slabiky shodují, nastaví na dané výstupní slabice samé jedničky, v opačném případě samé nuly. Př.: Byte0 1 =52, Byte0 2 =52; Byte1 1 =119, Byte1 2 =5; Byte2 1 =320, Byte2 2 =321; Byte3 1 =0, Byte3 2 =0. Výsledkem bude: Byte0=255 (tj. (11111111) 2 ), Byte1=0, Byte2=0, Byte3=255. CMPS/CMPSB/CMPSW/CMPSD Compare String Operands Tyto instrukce porovnávají slabiku, slovo nebo dvouslovo jejich vzájemným rozdílem a podle výsledku nastaví příznaky v EFLAGS. 28

CMPSS Scalar Single-FP Compare Instrukce porovná pouze nejnižší slabiku ze 4 slabik obou operandů. Pokud se slabiky shodují, uloží do výstupní nejnižší slabiky samé jedničky, v opačném případě tam uloží samé nuly. Další 3 vyšší slabiky neporovnává. Ve výsledném slově ponechá první 3 slabiky ze zdrojového operandu. CMPXCHG Compare and Exchange Instrukce CMPXCHG porovná hodnotu v registru AL, AX nebo EAX s prvním operandem, pokud jsou obě hodnoty shodné, je nahrán druhý operand do prvního, jinak je první operand nahrán do AL, AX nebo EAX. CMPXCHG8B Compare and Exchange 8 bits Tato instrukce porovnává 64-bitový operand EDX:EAX s cílovým operandem. Pokud jsou hodnoty shodné, je hodnota v ECX:EBX uložena do cílového operandu. Cílový operand je 8- bytová paměťová pozice. COMIISS Scalar Ordered Single-FP Compare and Set EFLAGS Instrukce COMISS porovná dva operandy s pohyblivou řádovou čárkou a podle výsledku nastaví příznaky ZF, PF, CF v registru EFLAGS. CPUIID CPU Identification Tato instrukce umožňuje procesoru jeho identifikaci do registrů EAX, EBX, ECX a EDX. Informace identifikují Intel, třídu, model, rysové informace a informace o cache. CVTPII2PS Packed Signed INT32 to Packed Single-FP Conversion Instrukce konvertuje znaménkové 32-bitové číslo (integer) na číslo SP s pohyblivou řádovou čárkou. CVTPS2PII Packed Single-FP to Packed INT32 Conversion Instrukce konvertuje spodní dvě slabiky z SP čísla s pohyblivou řádovou čárkou na 32- bitové, znaménkové číslo (integer). Byte0=1.0 ; Byte1=15.0 Byte0=1 ; Byte1=15. CVTSII2SS Scalar Signed INT32 to Single-FP Conversion Instrukce konvertuje znaménkové 32-bitové číslo (integer) z paměti, nebo 32-bitového registru na číslo SP s pohyblivou řádovou čárkou. CVTSS2SII Scalar Single-FP to Signed INT32 Conversion Instrukce konvertuje SP číslo s pohyblivou řádovou čárkou na znaménkové, 32-bitové číslo a vrací výsledek v 32-bitovém registru. CVTTPS2PII Packed Single-FP to Packed INT32 Conversion (Truncate) Instrukce konvertuje spodní 2 slabiky SP čísla s pohyblivou řádovou čárkou na znaménkové, 32-bitové číslo (integer) v paměti. Pokud výsledek není celé číslo, je zaokrouhlen. CVTTSS2SII Scalar Single-FP to Signed INT32 Conversion (Truncate) Instrukce konvertuje SP číslo s pohyblivou řádovou čárkou na znaménkové, 32-bitové číslo a výsledek vrací v 32-bitovém registru. Pokud výsledek není celé číslo, je zaokrouhlen. CWD Convert Word to Doubleword Instrukce CWD nastaví jednotlivé bity registru DX na hodnotu nejvyššího bitu registru AX převede 16-bitové číslo se znaménkem z AX na stejné 32-bitové číslo v DX:AX. 29

DAA Decimal Adjust AL after Addition Instrukce DAA se používá po instrukci ADD/ADC AL, x aplikované na dva operandy ve zhuštěném BCD tvaru k úpravě výsledku na stejný tvar. DAS Decimal Adjust AL after Subtraction Instrukce DAS se používá po instrukci SUB/SBB AL, x aplikované na dva operandy ve zhuštěném BCD tvaru k úpravě výsledku na stejný tvar. DEC Decrement by 1 Instrukce DEC aritmeticky odečte od operandu jedničku a podle výsledku nastaví příznaky OF, SF, ZF, AF, PF (nemění CF!). DIIV Unsigned Divide Je-li zdrojovým operandem slabika, vydělí instrukce DIV tímto operandem obsah AX, podíl uloží do registru AL a zbytek do AH. Je-li zdrojovým operandem slovo, vydělí instrukce DIV tímto operandem obsah registrů DX:AX a podíl uloží do registru AX a zbytek do DX. DIIVPS Packed Single-FP Divide Instrukce vydělí dvě SP čísla s pohyblivou řádovou čárkou. Vždy se dělí odpovídající si slabiky (ze 4). DIIVSS Scalar Single-FP Divide Instrukce vydělí nejnižší slabiky dvou SP operandů s pohyblivou řádovou čárkou. Zbývající 3 slabiky jsou převzaty ze zdrojového operandu. EMMS Empty MMX State Instrukce EMMS vynuluje hodnoty všech tagů CPU. Tedy FFFFh FPUTagWord. ENTER Make Stack Frame for Procedure Parameters Instrukce ENTER vytvoří zásobníkový rámec využívaný především vyššími programovacími jazyky. Hodnota prvního operandu instrukce určuje počet slavik rámce určených pro parametry procedury, lokální proměnné, Hodnota druhého operandu udává úroveň vnoření procedury. F2XM1 Compute 2 x -1 Instrukce F2XM1 vypočítá hodnotu 2 x zmenšený o jedničku. FABS Absolute Value Vynuluje hodnotu znaménkového bitu ST(0) k získání absolutní hodnoty operandu. FADD/FADDP/FIIADD Add Sčítání. Sečte hodnotu prvního operandu s druhým a výsledek uloží do ST(0). FBLD Load Binary Coded Decimal Načte hodnotu zdrojového operandu v BCD kódu, ten převede na rozšířený floating-point a tuto hodnotu uloží na vrchol FPU zásobníku. FBSTP Store BCD Integer and POP Načte hodnotu z ST(0), tu konvertuje na 18-bitovou hodnotu v BCD kódu, uloží tuto hodnotu do cílového operandu a odstraní hodnotu z ST(0). 30

FCHS Change Sign Instrukce FCHS provede komplement znaménkového bitu ST(0). Tedy změní znaménko na opačné. FCLEX/FNCLEX Clear Exceptions Vynuluje floating-point příznakové registry PE, UE, OE, ZE, DE, IE, ES a B mimo ES ve stavovém slově FPU. Instrukce FCLEX (oproti FNCLEX) zjistí a uchová hodnoty nemaskovaných floating-point příznaků. FCMOVcc Floating-Point Conditional Move Instrukce porovná hodnoty příznaků EFLAGS a provede MOV, pokud příznaky splňují definovanou podmínku. Cílovým operandem je vždy ST(0). FCOM/FCOMP/FCOMPP Compare Real Porovná hodnotu ST(0) se zdrojovou hodnotou a podle výsledku nastaví hodnoty podmínkových registrů C0, C2, C3 ve stavovém slově FPU. FCOMII/FCOMIIP/FUCOMII/FUCOMIIP Compare Real and Set EFLAGS Porovnání hodnoty ST(0) s hodnotou v ST(i) a podle výsledku nastavení příznaků ZF, PF, CF v EFLAGS. FCOS Cosine Instrukce FCOS vypočte hodnotu funkce cosinus hodnoty v ST(0) a výsledek uloží do ST(0). FDECSTP Decrement Stack-Top Pointer Tato instrukce odečte jedničku od hodnoty vrcholu zásobníku ve stavovém slově FPU. Pokud je tam hodnota 0, je výsledek nastaven na 7. FDIIV/FDIIVP/FIIDIIV Divide Instrukce vydělí cílový operand zdrojovým a výsledek uloží do cílového operandu. FDIIVR/FDIIVRP/FIIDIIVR Reverse Divide Instrukce vydělí zdrojový operand cílovým a výsledek uloží do cílového operandu. FFREE Free Float-Point Register Nastaví hodnotu obsazenosti ST(i) v tag registru FPU na hodnotu (11) b, tedy obsah ST(i) je volný, ale hodnotu obsahu ani ukazatele vrcholu zásobníku nezmění. FIICOM/FIICOMP Compare Integer Instrukce porovná hodnotu v ST(0) s integerovou hodnotou zdrojového operandu a nastaví podmínkové registry C0, C2 a C3 ve stavovém slově FPU. FIILD Load Integer Načte integerovskou hodnotu, převede ji na floating-point a uloží na vrchol zásobníku. FIINCSTP Increment Stack-Top Pointer Instrukce zvýší o jedničku hodnotu ukazatele vrcholu zásobníku ve stavovém slovu FPU. Pokud je zde hodnota 7, výsledkem je hodnota 0. 31

FIINIIT/FNIINIIT Initialize Floating-Point Unit Instrukce nastaví kontrolu FPU, stav, registr tagů, instrukční ukazatel a ukazatel na data na implicitní hodnoty. Kontrolní slovo FPU je nastaveno na hodnotu (037F) h, stavové slovo FPU je vynulováno. FIIST/FIISTP Store Integer Instrukce načte hodnotu z ST(0), konvertuje ji na znaménkový integer a výsledek uloží do cílového operandu. FLD Load Real Uloží zdrojový operand na vrchol zásobníku. Automaticky jsou prováděny implicitní konverze real hodnot. FLD1/FLDL2T/FLDL2E/FLDPII/FLDLG2/FLDLN2/FLDZ Load Constant FLD1 uloží na vrchol zásobníku jedničku. FLDL2T uloží na vrchol zásobníku log 2 (10). FLDL2E uloží na vrchol zásobníku log 2 (e). FLDPI uloží na vrchol zásobníku hodnotu π. FLDLG2 uloží na vrchol zásobníku hodnotu log 10 (2). FLDLN2 uloží na vrchol zásobníku hodnotu log e (2). FLDZ uloží na vrchol zásobníku hodnotu 0. FLDCW Load Control Word Nahraje 16-bitový zdrojový operand do kontrolního slova FPU. FLDENV Load FPU Environment Nahraje kompletní prostředí FPU z paměti do FPU registrů. První operand udává první byte dat operačního prostředí v paměti. K uložení tohoto prostředí se používá instrukcí FSTENV nebo FNSTENV. FMUL/FMULP/FIIMUL Multiply Instrukce vynásobí zdrojový a cílový operand a výsledek uloží do cílového operandu. FNOP No Operation Provede žádnou operaci FPU. Tato instrukce pouze zabírá místo a čas, ale nemá žádný jiný následek. FPATAN Partial Arctangent Instrukce spočítá arctan() registru v ST(1), vydělený operandem v ST(0). Výsledek je uložen do ST(1) a je provedeno odstranění hodnoty z vrcholu zásobníku. FPREM/FPREM1 Partial Remainder Instrukce spočítá IEEE zbytek získaný dělením hodnoty v ST(0) hodnotou v ST(1) a uložení výsledku je do ST(0). Tedy Zbytek = ST(0) (Q * ST(1)). Instrukce FPREM zaokrouhlí hodnotu Q k nule, zatímco instrukce FPREM1 zaokrouhlí Q směrem k nejbližší celočíselné hodnotě. FPTAN Partial Tangent Instrukce spočítá tangens hodnoty v registru ST(0) a výsledek uloží do ST(0). Dále uloží na vrchol zásobníku hodnotu 1. Zdrojový operand musí být zadán v radiánech a v rozmezí ±2 63. 32

FRNDIINT Round to Integer Instrukce zaokrouhlí hodnotu v ST(0) na nejbližší integerovou hodnotu. Zaokrouhlování závisí na nastaveném zaokrouhlovacím módu. FRSTOR Restore FPU State Instrukce nahraje stav (operační prostředí a zásobník registrů) FPU z paměti určené zdrojovým operandem. Uložení tohoto stavu lze docílit instrukcemi FSAVE / FNSAVE. FSAVE/FNSAVE Store FPU State Instrukce uloží aktuální stav FPU na paměťové místo určené cílovým operandem. Obnovení viz. instrukce FRSTOR. FSCALE Scale Instrukce vynásobí cílový operand číslem 2 a výsledek uloží do cílového operandu. Cílový operand je reálné číslo uložené v ST(0). Zdrojový operand je nejbližší integerové číslo nižší než hodnota ST(1). FSIIN Sine Instrukce vypočte hodnotu sinus operandu uloženého v ST(0) a výsledek uloží do ST(0). FSIINCOS Sine and Cosine Instrukce v jednom výpočetním kroku vypočte hodnotu sinus a cosinus operandu uloženého v ST(0). Hodnota sinus je uložena do ST(0) a hodnota cosinus je poté uložena na vrchol zásobníku. Tedy ST(0) = cosinus a ST(1) = sinus. FSQRT Square Root Instrukce vypočte druhou odmocninu operandu uloženého v ST(0) a výsledek je uložen do ST(0). FST/FSTP Store Real Instrukce uloží hodnotu z ST(0) do cílového operandu. FSTCW/FNSTCW Store Control Word Instrukce uloží hodnotu aktuálního kontrolního slova FPU do paměti na adresu určenou cílovým operandem. FSTENV/FNSTENV Store FPU Environment Instrukce uloží aktuální prostředí FPU do paměti na adresu určenou cílovým operandem. Po uložení jsou maskovány všechny floating-point výjimky. Prostředí FPU se skládá z kontrolního slova, stavového slova, slova tagů, ukazatele instrukcí, ukazatele na data a posledního operačního kódu. FSTSW/FNSTSW Store Status Word Instrukce uloží aktuální hodnotu stavového slova FPU do cílového operandu. FSUB/FSUBP/FIISUB Subtract Instrukce odečte zdrojový operand od cílového a rozdíl uloží do cílového operandu. FSUBR/FSUBRP/FIISUBR Reverse Subtract Instrukce odečte cílový operand od zdrojového a rozdíl uloží do cílového operandu. 33