Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
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
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
15
14
0
FH
FLAGS
FL
CS
CODE SEGMENT
DS
DATA SEGMENT
SS
STACK SEGMENT
ES
EXTRA SEGMENT
13
12
11
10
9
8
7
6
5
4
3
2
1
0
F
CF PF AF ZF SF TF IF DF OF
1
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
• • • • • • • • •
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ěť:
max. 64kB
FFFFFh
kódový segment
Segmentové registry
xxxx0h
CS DS SS
EA = offset
datový segment xxxxx0h
ES
zásobníkový segment
xxxx0h
extra segment xxxx0h 00000h
2
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
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
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
F
CF PF AF ZF SF TF IF 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. 15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
MSW
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
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
• •
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
Tabulka globálních deskriptorů
Deskriptor LDT
Bázová adresa IDT GDTR Velikost GDT
Bázová adresa GDT
Formát kódového a datového deskriptoru 7 +7
0 7
0 +6
Rezerva pro Intel (kvůli kompatibilitě s 80386 vynulováno)
+5
Práva přístupu
+4
Báze segmentu: bity 23 - 16
+3
Báze segmentu: bity 15 - 0
+2
+1
Hranice segmentu (limit) – offset poslední slabiky segmentu
0
Formát deskriptoru bran 7
0 7
0
Rezerva pro Intel (kvůli kompatibilitě s 80386 vynulováno) Práva přístupu
X
Cílový selektor: bity 15 - 2 Cílový offset
5
X
X
Počet slov X
X
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
Slabika práv přístupu u deskriptoru kódových segmentů 7
6
P
5
DPL
4
3
2
1
0
S=1
E=1
C
R
A
Slabika práv přístupu u deskriptoru datových segmentů 7
6
P
5
DPL
4
3
2
1
0
S=1
E=0
ED
W
A
Slabika práv přístupu u deskriptoru speciálních systémových datových segmentů 7
P
6
5
DPL
4
3
S=0
0
2
1
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
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
•
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
Segment stavu úlohy (TSS)
Báze TSS
Tabulka globálních / lokálních deskriptorů
Deskriptor 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
(z deskriptoru TSS)
7
42 40 38 36 34 32 30 28 26 24 22 20 18 16 14 12 10 8 6 4 2 0
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
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 16bitové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. 31
16 15
8 7
0
EAX
AH
AX
AL
EBX
BH
BX
BL
ECX
CH
CX
CL
EDX
DH
DX
DL
ESI
SI
EDI
DI
EBP
BP
ESP
SP
CS
Code segment
SS
Stack segment
DS ES
Data segments FS GS
EIP
IP
EF
F
8
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
31 0
30 0
29 0
28 0
27 0
26 0
25 0
24 0
23 0
22 0
21 0
20 0
19 0
18 0
17
16
VM
RF
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0
NT
OF
DF
IF
TF
SF
ZF
0
AF
0
PF
0
CF
IOPL
•
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 CR0 CR2 CR3
PG
24 23
16 15
11
8 7 MSW
0 ………………………………. 0
Lineární adresa, která způsobila chybu stránky Báze adresáře tabulek stránek
0 ……………………… 0
Limit GDT
GDTR Báze GDT
Limit IDT
IDTR Báze IDT
LDTR
Selektor LDT
TR
Selektor TSS
9
0
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
Ladící registry: 31
0
DR0
Lineární adresa breakpointu 0
DR1
Lineární adresa breakpointu 1
DR2
Lineární adresa breakpointu 2
DR3
Lineární adresa breakpointu 4
DR6
Stav breakpointu (Breakpoint Status)
DR7
Řízení breakpointu (Breakpoint Control)
Testovací registry: 31
0
TR6
Řízení testu TLB (TLB Test Control)
TR7
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 Lineární adresa Stránkování Fyzická adresa
10
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
Formát kódového a datového deskriptoru 7
0 7
+7
Báze segmentu: bity 31 - 24
+5
Práva přístupu
0
G
D
0
AVL
+6
Limit: 19 - 16
+4
Báze segmentu: bity 23 - 16
+3
Báze segmentu: bity 15 - 0
+2
+1
Limit segmentu: bity 15 - 0
0
Formát systémového datového deskriptoru 7
0 7
+7
Báze segmentu: bity 31 - 24
+1
Práva přístupu
0
G
0
0
0
+6
Limit: 19 - 16
+4
Báze segmentu: bity 23 - 16
+3
Báze segmentu: bity 15 - 0
+2
+1
Limit segmentu: bity 15 - 0
0
Formát deskriptoru bran 7
0 7
+7 +1 +3 +1
0 +6
Cílový offset: bity 31 - 16 Práva přístupu
0
0
0
+4
Počet slov
Cílový selektor: bity 15 - 2 Cílový offset: bity 15 - 0
x
x
+2 0
•
G – Granularity G=0/1 … slabiková/stránková granularita, tj. segment může být dlouhý buď 1MB (220 slabik), nebo 4GB (220 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
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
Slabika práv přístupu u deskriptoru speciálních systémových datových segmentů 7
6
P
•
5
4
3
2
S=0
DPL
1
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
PG
CD
NW
28 0
27 0
26 0
25 0
24 0
23 0
22 0
21 0
20 0
19 0
15
14
13
12
11
10
9
8
7
6
5
4
0
0
0
0
0
0
0
0
0
NE
1
0
17 0
16
AM
18
3
2
1
0
TS
EM
MP
PE
WP
•
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
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
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
E
WB
WB
PF D1 D2 EX WB
– – – – –
PreFetch – čtení instrukce Decode1 – dekódování instrukce Decode2 – generování adres Execute – provedení 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
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
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
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
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 0
30 0
29 0
28 0
27 0
26 0
25 0
24 0
23 0
22 0
21
20
19
18
17
ID
VIP
VIF
AC
VM
RF
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0
NT
OF
DF
IF
TF
SF
ZF
0
AF
0
PF
1
CF
IOPL
16
•
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
PF
D1
D2
E
X2
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
WF
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
Jednotlivé fáze jsou: X1 X2 WF ER
– – – –
Floating-Point Execute Stage 1 – výpočet v plovoucí řád. Čárce Floating-Point Execute Stage 2 – výpočet v plovoucí řád. Čárce Write Floating-Point Result – zapsání výsledku 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
BTB0
BTB1
IFU0
IFU1
IFU2
ID0
ID1
RAT
ROB
Port 3
RS
BTB0
Rd
Port 0 BTB0
Obrázek 3
16
Port 4
Port 1
BTB0
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
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
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
ROB Rd RS Port 0
Port 2 Port 3
Port 1 Port 4 RRF
Register Retirement File
ROB Wb
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
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
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
63
0
MM7 MM6 MM5 MM4 MM3 MM2 MM1 MM0 Obrázek 6
19
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
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
PF
F
D1
D2
Mex
E E1
WM/M2
M3
WMul
Část MMX
WB
MMX integrovaná do integer části
E2
Pouze integerová roura
E1
E2
E3
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
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
MMX
79
63
79
63
79
63
MM0
79
63
MM1
79
63
MM2
79
63
MM3
79
63
MM4
79
63
FP
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
Pentium – 200 MHz
4
Pentium MMX – 200 MHz
3.5 3 2.5 2 1.5 1 0.5 0
Dekomprese videa MPEG-1
Filtrace obrazu
Dekomprese audia MPEG-1 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 WB
V WB
U
V
WB (32b)
Hlavní paměť
Hlavní paměť
Obrázek 10
21
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
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
Byte 0
Byte 1
Byte 2
Větev B
Byte 3
Byte 0
Byte 1
Poslední byte větve A
Byte 2
Byte 3
Poslední byte větve B
Obrázek 8
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 4instrukč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
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
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
R0
Sig
78
64
Exponent
63
f63 f62
0
…
R1 R2 R3 R4 R5 R6 R7
23
Mantisa
…
f1
f0
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
31
0
15
0
Ukazatel instrukce
Registr známek
Ukazatel operandu
Stavový registr Řídící registr
•
Sig – Sign Znaménko čísla (0/1 … +/-)
•
Exponent – Exponent Exponent čísla v kódu transformované nuly (0 až 32767)
•
Mantisa – Mantisa Mantisa čísla v přímém kódu (fi značí jednotlivé bity) Číslo = (-1)Sign * 2(Exponent – 16383) * (f63.f62f61 … f1f0)
Okolí koprocesoru 80287 v chráněném režimu 15
0
+1
Řídící slovo
+3
Stavové slovo
+2
+5
Slovo známek
+4
+7
Offset (IP)
+6
+9
Selektor (CS)
+8
0
+11
Offset operandu
+10
+13
Selektor operandu
+12
Okolí koprocesoru 80387 ve 32-bitovém základním režimu 31
16 15
11
0
+3
Rezervováno
Řídící slovo
+7
Rezervováno
Stavové slovo
+4
+11
Rezervováno
Slovo známek
+8
+15
Rezervováno
Ukazatel instrukce IP: 15 - 0
+12
0
+16
+19
0
0
0
Ukazatel IP: 31 - 16
Rezervováno
+23 +27
0
0
0
0
0
Operační kód: 11 bitů
Ukazatel operandu OP: 15 - 0
Ukazatel OP: 31 - 16
24
0 ……………………………….. 0
0
+20 +22
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
Okolí koprocesoru 80387 ve 32-bitovém chráněném režimu 31
16 15
0
+3
Rezervováno
Řídící slovo
+7
Rezervováno
Stavové slovo
+4
+11
Rezervováno
Slovo známek
+8
Offset (IP)
+15 +19
0
0
0
0
Op. kód: 11 bitů
+27
+12 Selektor (CS)
Offset operandu
+23 Rezervováno
+16 +20
Selektor operandu
25
0
+22
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
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
A AA AA A – 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.
A AA AD D – 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.
A AA AM M – 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.
A AA AS S – 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.
A AD DC C – 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í.
A AD DD D – 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í.
A AD DD DP PS S – Packed Single-FP Add
Instrukce přičte čísla s pohyblivou řádovou čárkou SP. Výsledek (zprava): Byte01 + Byte02; Byte11 + Byte12; Byte21 + Byte22; Byte31 + Byte32.
A AD DD DS SS S – Scalar Single-FP Add
Instrukce sečte pouze nejnižší slabiku ze 4; ostatní 3 slabiky převezme z prvního operandu. Výsledek (zprava): Byte01 + Byte02; Byte11; Byte21; Byte31. 26
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
A AN ND D – 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í.
A AN ND DN NP PS S – 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.
A AN ND DP PS S – Bit-wise Logical And For Signle-FP
Instrukce provede bitový, logický součin mezi jednotlivými 4 slabikami.
A AR RP PLL – 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.
B BO OU UN ND D – 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í.
B BS SFF – 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.
B BS SR R – 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.
B BS SW WA AP P – Byte Swap
Reverzuje pořadí bitů ve 32-bitovém registru. Bity 0-7 jsou prohozeny s bity 24-31. Bity 815 jsou prohozeny s bity 16-23. (Little-endian → Big-endian)
B BT T – 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.
B BT TC C – Bit Test and Complement
Instrukce BTC pracuje stejně jako instrukce BT, ale navíc pak změní (invertuje) hodnotu testovaného bitu.
B BT TR R – Bit Test and Reset
Instrukce BTR pracuje stejně jako instrukce BT, ale navíc testovaný bit vynuluje.
B BT TS S – Bit Test and Set
Instrukce BTS pracuje stejně jako instrukce BT, ale navíc testovaný bit nastaví (na jedničku).
27
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
C CA ALLLL – Call Procedure
Instrukce CALL předá řízení proceduře (podprogramu).
C CB BW W/ /C CW WD DE E – 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.
C CD DQ Q – Convert Doubleword to Quadword
Převede 32-bitové číslo na 64-bitové číslo.
C CLLC C – Clear Carry Flag
Instrukce CLC vynuluje příznak CF.
C CLLD D – Clear Direction Flag
Instrukce CLD vynuluje příznak DF.
C CLLII – Clear Interrupt Flag
Instrukce CLI vynuluje příznak IF.
C CLLT TS S – 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.
C CM MC C – Complement Carry Flag
Instrukce CMC změní hodnotu příznaku CF (not CF → CF).
C CM MO OV Vcccc – Conditional Move
Instrukce porovná hodnoty příznaků EFLAGS a provede MOV, pokud příznaky splňují definovanou podmínku.
C CM MP P – 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í.
C CM MP PP PS S – 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ř.: Byte01=52, Byte02=52; Byte11=119, Byte12=5; Byte21=320, Byte22=321; Byte31=0, Byte32=0. Výsledkem bude: Byte0=255 (tj. (11111111)2), Byte1=0, Byte2=0, Byte3=255.
C CM MP PS S/ /C CM MP PS SB B/ /C CM MP PS SW W/ /C CM MP PS SD D – 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
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
C CM MP PS SS S – 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.
C CM MP PX XC CH HG G – 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.
C CM MP PX XC CH HG G8 8B B – 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 8bytová paměťová pozice.
C CO OM MIIS SS S – 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.
C CP PU UIID D – 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.
C CV VT TP PII2 2P PS S – Packed Signed INT32 to Packed Single-FP Conversion
Instrukce konvertuje znaménkové 32-bitové číslo (integer) na číslo SP s pohyblivou řádovou čárkou.
C CV VT TP PS S2 2P PII – Packed Single-FP to Packed INT32 Conversion
Instrukce konvertuje spodní dvě slabiky z SP čísla s pohyblivou řádovou čárkou na 32bitové, znaménkové číslo (integer). Byte0=1.0 ; Byte1=15.0 ⇒ Byte0=1 ; Byte1=15.
C CV VT TS SII2 2S SS S – 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.
C CV VT TS SS S2 2S SII – 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.
C CV VT TT TP PS S2 2P PII – 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.
C CV VT TT TS SS S2 2S SII – 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.
C CW WD D– 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
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
D DA AA A – 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.
D DA AS S – 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.
D DE EC C – 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!).
D DIIV V – 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.
D DIIV VP PS S – 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).
D DIIV VS SS S – 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.
E EM MM MS S – Empty MMX State
Instrukce EMMS vynuluje hodnoty všech tagů CPU. Tedy FFFFh → FPUTagWord. MMX instrukce
E EN NT TE ER R – 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.
x FF2 2X XM M1 1 – Compute 2 -1
Instrukce F2XM1 vypočítá hodnotu 2x zmenšený o jedničku.
FFA AB BS S – Absolute Value
Vynuluje hodnotu znaménkového bitu ST(0) k získání absolutní hodnoty operandu.
FFA AD DD D/ /FFA AD DD DP P/ /FFIIA AD DD D – Add
Sčítání. Sečte hodnotu prvního operandu s druhým a výsledek uloží do ST(0).
FFB BLLD D – 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.
FFB BS ST TP P – 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
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
FFC CH HS S – Change Sign
Instrukce FCHS provede komplement znaménkového bitu ST(0). Tedy změní znaménko na opačné.
FFC CLLE EX X/ /FFN NC CLLE EX X – 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ů.
FFC CM MO OV Vcccc – 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).
FFC CO OM M/ /FFC CO OM MP P/ /FFC CO OM MP PP P – 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.
FFC CO OM MII/ /FFC CO OM MIIP P/ /FFU UC CO OM MII/ /FFU UC CO OM MIIP P – 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.
FFC CO OS S – Cosine
Instrukce FCOS vypočte hodnotu funkce cosinus hodnoty v ST(0) a výsledek uloží do ST(0).
FFD DE EC CS ST TP P – 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.
FFD DIIV V/ /FFD DIIV VP P/ /FFIID DIIV V – Divide
Instrukce vydělí cílový operand zdrojovým a výsledek uloží do cílového operandu.
FFD DIIV VR R/ /FFD DIIV VR RP P/ /FFIID DIIV VR R – Reverse Divide
Instrukce vydělí zdrojový operand cílovým a výsledek uloží do cílového operandu.
FFFFR RE EE E – 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í.
FFIIC CO OM M/ /FFIIC CO OM MP P – 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.
FFIILLD D – Load Integer
Načte integerovskou hodnotu, převede ji na floating-point a uloží na vrchol zásobníku.
FFIIN NC CS ST TP P – 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
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
FFIIN NIIT T/ /FFN NIIN NIIT T – 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.
FFIIS ST T/ /FFIIS ST TP P – Store Integer
Instrukce načte hodnotu z ST(0), konvertuje ji na znaménkový integer a výsledek uloží do cílového operandu.
FFLLD D – Load Real
Uloží zdrojový operand na vrchol zásobníku. Automaticky jsou prováděny implicitní konverze real hodnot.
FFLLD D1 1/ /FFLLD DLL2 2T T/ /FFLLD DLL2 2E E/ /FFLLD DP PII/ /FFLLD DLLG G2 2/ /FFLLD DLLN N2 2/ /FFLLD DZ Z – Load Constant
FLD1 uloží na vrchol zásobníku jedničku. FLDL2T uloží na vrchol zásobníku log2(10). FLDL2E uloží na vrchol zásobníku log2(e). FLDPI uloží na vrchol zásobníku hodnotu π. FLDLG2 uloží na vrchol zásobníku hodnotu log10(2). FLDLN2 uloží na vrchol zásobníku hodnotu loge(2). FLDZ uloží na vrchol zásobníku hodnotu 0.
FFLLD DC CW W – Load Control Word
Nahraje 16-bitový zdrojový operand do kontrolního slova FPU.
FFLLD DE EN NV V – 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.
FFM MU ULL/ /FFM MU ULLP P/ /FFIIM MU ULL – Multiply
Instrukce vynásobí zdrojový a cílový operand a výsledek uloží do cílového operandu.
FFN NO OP P – No Operation
Provede „žádnou“ operaci FPU. Tato instrukce pouze zabírá místo a čas, ale nemá žádný jiný následek.
FFP PA AT TA AN N – 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.
FFP PR RE EM M/ /FFP PR RE EM M1 1 – 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ě.
FFP PT TA AN N – 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í ±263.
32
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
FFR RN ND DIIN NT T – Round to Integer
Instrukce zaokrouhlí hodnotu v ST(0) na nejbližší integerovou hodnotu. Zaokrouhlování závisí na nastaveném zaokrouhlovacím módu.
FFR RS ST TO OR R – 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.
FFS SA AV VE E/ /FFN NS SA AV VE E – Store FPU State
Instrukce uloží aktuální stav FPU na paměťové místo určené cílovým operandem. Obnovení – viz. instrukce FRSTOR.
FFS SC CA ALLE E – 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).
FFS SIIN N – Sine
Instrukce vypočte hodnotu sinus operandu uloženého v ST(0) a výsledek uloží do ST(0).
FFS SIIN NC CO OS S – 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.
FFS SQ QR RT T – Square Root
Instrukce vypočte druhou odmocninu operandu uloženého v ST(0) a výsledek je uložen do ST(0).
FFS ST T/ /FFS ST TP P – Store Real
Instrukce uloží hodnotu z ST(0) do cílového operandu.
FFS ST TC CW W/ /FFN NS ST TC CW W – Store Control Word
Instrukce uloží hodnotu aktuálního kontrolního slova FPU do paměti na adresu určenou cílovým operandem.
FFS ST TE EN NV V/ /FFN NS ST TE EN NV V – 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.
FFS ST TS SW W/ /FFN NS ST TS SW W – Store Status Word
Instrukce uloží aktuální hodnotu stavového slova FPU do cílového operandu.
FFS SU UB B/ /FFS SU UB BP P/ /FFIIS SU UB B – Subtract
Instrukce odečte zdrojový operand od cílového a rozdíl uloží do cílového operandu.
FFS SU UB BR R/ /FFS SU UB BR RP P/ /FFIIS SU UB BR R – Reverse Subtract
Instrukce odečte cílový operand od zdrojového a rozdíl uloží do cílového operandu.
33
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
FFT TS ST T – Test
Instrukce porovná hodnotu v ST(0) s nulou a nastaví podmínkové příznaky C0, C2 a C3.
FFU UC CO OM M/ /FFU UC CO OM MP P/ /FFU UC CO OM MP PP P – Unordered Compare Real
Instrukce provede neuspořádané porovnání hodnot ST(0) a cílového operandu a podle výsledku nastaví podmínkové příznaky C0, C2 a C3.
FFW WA AIIT T – Wait
Viz. instrukce WAIT.
FFX XA AM M – Examine
Instrukce FXAM prověří položku na vrcholu zásobníku a nastaví příznaky podmínkového kódu (test NaN, normalizovaný, nenormalizovaný, nekonečno, prázdný denormalizovaný).
FFX XC CH H – Exchange Register Contents
Instrukce prohodí obsah registru ST(0) s registrem ST(i).
FFX XR RS ST TO OR R – Restore FP and MMX State and Streaming SIMD Extension State
Instrukce obnoví stav MMX, stav jednotky s pohyblivou řádovou čárkou a stav SIMD rozšíření (prostředí + registry), z paměťové oblasti o velikosti 512 slabik.
FFX XS SA AV VE E – Store FP and MMX State and Streaming SIMD Extension State
Instrukce uloží do paměti (musí být prostor pro 512 slabik) stav MMX, stav jednotky s pohyblivou řádovou čárkou a SIMD rozšíření (prostředí + registry).
FFX XT TR RA AC CT T – Extract Exponent and Significand
Instrukce uloží exponent hodnoty z ST(0) do ST(0) a mantisu uloží na vrchol zásobníku. Výsledkem bude ST(0) = mantisa a ST(1) = exponent.
FFY YLL2 2X X – Compute y * log2x
Instrukce vypočte hodnotu (ST(1) * log2(ST(0))).
FFY YLL2 2X XP P1 1 – Compute y * log2(x + 1)
Instrukce vypočte hodnotu (ST(1) * log2(ST(0) + 1.0)).
H HLLT T – Halt
Instrukce HLT zastaví procesor. Příznaky v registru F nemění.
IID DIIV V – Signed Divide
Tato instrukce provádí totéž co instrukce DIV, s tím rozdílem, že oba operandy se berou jako čísla se znaménkem.
IIM MU ULL – Signed Multiply
Tato instrukce provádí totéž co instrukce MUL, s tím rozdílem, že oba operandy se berou jako čísla se znaménkem.
IIN N – Input from Port
Instrukce IN přesune slabik/slovo z adresovaného (vstupního) portu do AL / AX. Příznaky v registru F nemění.
34
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
IIN NC C – Increment by 1
Instrukce INC aritmeticky přičte k operandu jedničku a podle výsledku nastaví příznaky OF, SF, ZF, AF a PF (nemění CF !).
IIN NS S/ /IIN NS SB B/ /IIN NS SW W/ /IIN NS SD D – Input from Port to String
Instrukce INS přesune operand (slabiku / slovo) ze vstupního portu adresovaného registrem DX do cílového místa v paměti implicitně adresovaného registry ES:DI. V závislosti na hodnotě příznaku DF v registru F se po provedení instrukce INS obsah registru DI buď inkrementuje (DF=0) nebo dekrementuje (DF=1) a to o hodnotu, která je dána velikostí operandu.
IIN NT Tn n/ /IIN NT TO O/ /IIN NT T3 3 – Call to Interrupt Procedure
Instrukce INT n předá řízení proceduře (podprogramu) pro obsluhu n-té vyjímečné situace či přerušení.
IIN NV VD D – Invalidate Internal Caches
Instrukce INVD zajistí vyprázdnění všech cache pamětí. Jejich obsah je za použití cyklu vyprázdněn. Ovšem veškerá data nalézající se v paměti cache nebudou uložena na disk a budou tudíž ztracena.
IIN NV VLLP PG G – Invalidate TLB Entry
Tato instrukce zajistí vyprázdnění (zneplatnění) zdrojového operandu, který představuje vstupní bod do TLB (Translation Lookaside Buffer).
IIR RE ET T/ /IIR RE ET TD D – Interrupt Return
Instrukce IRET ukončí práci obslužné procedury přerušení a předá řízení zpět přerušenému programu.
JJcccc – Jump if Condition Is Met
Instrukce Jcc provede krátký podmíněný skok. cc může nabývat těchto hodnot: c, cxz, cexz, o, no, b, nae, c, nb, ae, nc, e, z, ne, nz, be, na, nbe, a, s, ns, p, pe, np, po, l, nge, nl, ge, le, ng, nle a g.
JJM MP P – Jump
Instrukce JUMP provede nepodmíněný skok.
LLA AH HFF – Load Status Flags into AH Register
Instrukce LAHF přesune obsah spodní slabiky registru F do registru AH. Jednotlivé bity registru AH potom obsahují (zleva): SF, ZF, nedefinováno, AF, nedefinováno, PF, nedefinováno a CF. Příznaky v registru F nemění.
LLA AR R – Load Access Rights Byte
Instrukce LAR přesune do horní slabiky registru určeného cílovým operandem obsah slabiky práv přístupu deskriptoru určeného zdrojovým operandem, spodní slabiku tohoto registru vynuluje a nastaví příznak ZF.
LLD DM MX XC CS SR R – Load Streaming SIMD Extension Control/Status
Instrukce nastaví řídící/kontrolní MXCSR registr, který umožňuje povolování maskovatelných/nemaskovatelných přerušení, nastavení zaokrouhlovacích módů a prohlížet stavové příznaky výjimek.
35
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
LLD DS S/ /LLE ES S/ /LLFFS S/ /LLG GS S/ /LLS SS S – Load Far Pointer
Tyto instrukce předpokládají, že na adresovaném dvouslově je uložena adresa ve tvaru Segreg:Offset. Potom Offset uloží do určeného registru a Segreg uloží do segmentového registru DS, ES, FS, GS nebo SS. Obsah adresového slova ani příznaky nemění.
LLE EA A – Load Effective Address
Instrukce LEA naplní určený registr efektivní adresou operandu. Příznaky registru F nemění.
LLE EA AV VE E – High Level Procedure Exit
Instrukce LEAVE provede v podstatě opačnou činnost k instrukci ENTER a to přenesením obsahu registru BP do registru SP a výběrem hodnoty z nového vrcholu zásobníku do registru BP.
LLG GD DT T/ /LLIID DT T – Load Global / Interrupt Descriptor Table Register
Instrukce LGDT naplní registr GDTR svým pětislabikovým operandem (2 slabiky limit – velikost GDT a 3 slabiky bázová adresa GDT). Instrukce LIDT naplní registr IDTR svým pětislabikovým operandem (2 slabiky limit – velikost IDT a 3 slabiky bázová adresa IDT). Instrukce mohou být provedeny pouze při nejvyšším oprávnění, jinak způsobí výjimku 13.
LLLLD DT T – Load Local Descriptor Table Register
Instrukce LLDT naplní registr LDTR svým operandem, kterým musí být selektor deskriptoru speciálního systémového datového segmentu typu 2, tj. tabulky lokálních deskriptorů v GDT. Limit a bázi LDT ( z tohoto deskriptoru) pak umístí do programátorsky nepřístupných registrů, podobných GDTR, resp. IDTR a tím LDT vytvoří.
LLM MS SW W – Load Machine Status Word
Instrukce LMSW naplní stavové slovo svým operandem. Instrukce může být použita k přepnutí procesoru do chráněného režimu (pak ji musí následovat mezisegmentový skok k vynulování fronty instrukcí v CPU). Ke zpětnému přepnutí procesoru do základního režimu ji použít nelze! Instrukce může být provedena pouze při nejvyšším oprávnění (CPL=0), jinak způsobí výjimku 13.
LLO OC CK K – Assert LOCK# Signal Prefix
Předpona LOCK umožňuje paralelní spolupráci více procesorů se sdílenou pamětí. Předpona způsobí že při provádění následující instrukce generuje příslušný signál LOCK, který pro tuto jedinou instrukci uzamyká sběrnici. Předponu lze uvést před následujícími instrukcemi: XCHG, ADD, ADC, SUB, SBB, AND, OR, XOR, INC, DEC, NEG a NOT.
LLO OD DS S/ /LLO OD DS SB B/ /LLO OD DS SW W/ /LLO OD DS SD D – Load String
Instrukce LODS přesune operand (slabiku, slovo, dvouslovo) ze zdrojového místa do střadače AL / AX / EAX. Zdrojový operand je implicitně adresován pomocí registrů DS:SI s možností změny segmentového registru. V závislosti na příznaku DF v registru F se po provedení instrukce LODS obsah registru SI buď inkrementuje (DF=0) nebo dekrementuje (DF=1) o takovou hodnotu, která je dána velikostí operandu.
LLO OO OP P/ /LLO OO OP Pcccc – Loop According to ECX Counter
Instrukce LOOP dekrementuje obsah registru ECX (CX) o jedničku a je-li nový obsah tohoto registru různý od nuly provede (podmíněný) krátký skok. Instrukce LOOPcc může mít některý ze sufixů: E (equal), Z (zero), NE (not equal) a NZ (not zero).
36
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
LLS SLL – Load Segment Limit
Instrukce LSL přesune do registru určeného cílovým operandem limit z deskriptoru určeného zdrojovým operandem a nastaví příznak ZF za předpokladu, že EPL <= DPL. Jinak pouze vynuluje ZF. Deskriptorem nesmí být deskriptor brány.
LLT TR R – Load Task Register
Instrukce LTR naplní registr TR svým operandem, kterým musí být selektor deskriptoru TSS v GDT. Limit a bázi TSS pak umístí do programátorsky nepřístupných registrů, podobných GDTR, resp. IDTR a tím TSS vytvoří. Dále tento TSS označí jako Busy (nejde však o přepnutí úlohy).
M MA AS SK KM MO OV VQ Q – Byte Mask Write
Instrukce přesune 64-bitový integer z prvního operandu (registru) do paměti (specifikace pomocí DI/EDI registru), za použití masky v druhém operandu.
M MA AX XP PS S – Packed Single-FP Maximum
Instrukce vrátí to číslo, které je větší. Tedy buď zdrojový operand nebo cílový.
M MA AX XS SS S – Scalar Single-FP Maximum
Instrukce porovná nejnižší slabiky u obou operandů, do cílového operandu uloží vyšší číslo z obou nejnižších slabik a zbývající 3 slabiky pouze převezme ze zdrojového operandu.
M MIIN NP PS S – Packed Single-FP Minimum
Instrukce vrátí číslo, které je menší. Tedy buď zdrojový operand nebo cílový.
M MIIN NS SS S – Scalar Single-FP Minimum
Instrukce porovná nejnižší slabiky u obou operandů, do cílového operandu uloží nižší číslo z obou nejnižších slabik a zbývající 3 slabiky pouze převezme ze zdrojového operandu.
M MO OV V – Move
Instrukce MOV přesune operand ze zdrojového místa do cílového místa.
M MO OV VA AP PS S – Move Aligned Four Packed Single-FP
Instrukce přesune 128-bitový operand ze zdrojového místa do cílového místa.
M MO OV VD D – Move 32 bits
Instrukce MOVD přesune 32-bitový operand ze zdrojového místa do cílového místa. MMX instrukce
M MO OV VH HLLP PS S – Move High to Low Packed Single-FP
Instrukce do cílového operandu uloží horních 64 bitů ze zdrojového operandu do horní pozice a dolních 64 bitů z cílového operandu do dolní pozice.
M MO OV VH HP PS S – Move High Packed Single-FP
Druhým operandem instrukce je 64-bitový operand, který je po provedení této instrukce uložen do horních 64 bitů cílového operandu a dolních 64 bitů je převzato ze zdrojového operandu.
37
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
M MO OV VLLH HP PS S – Move Low to High Packed Single-FP
Instrukce do cílového operandu uloží dolních 64 bitů ze zdrojového operandu do dolní pozice a horních 64 bitů z cílového operandu do horní pozice.
M MO OV VLLP PS S – Move Low Packed Single-FP
Druhým operandem instrukce je 64-bitový operand, který je po provedení této instrukce uložen do dolních 64 bitů cílového operandu a horních 64 bitů je převzato ze zdrojového operandu.
M MO OV VM MS SK KP PS S – Move Mask to Integer
Instrukce uloží do 32-bitového registru 4-bitové masky získané z most-significant bitů každého ze 4 čísel SP s pohyblivou řádovou čárkou.
M MO OV VN NT TP PS S – Move Aligned Four Packed Single-FP Non Temporal
Instrukce přesune odpovídající 4 pakovaná čísla SP s pohyblivou řádovou čárkou z registru do paměti tak, že minimalizuje znečištění hierarchie rychlé vyrovnávací paměti (cache).
M MO OV VN NT TQ Q – Move 64 Bits Non Temporal
Instrukce přesune 64 bitů, reprezentujících celočíselné operandy (8b, 16b, 32b) z registru do paměti tak, že minimalizuje znečištění hierarchie rychlé vyrovnávací paměti (cache).
M MO OV VQ Q – Move 64 bits
Instrukce MOVQ přesune 64-bitový operand ze zdrojového místa do cílového místa. MMX instrukce
M MO OV VS S/ /M MO OV VS SB B/ /M MO OV VS SW W/ /M MO OV VS SD D – Move Data from String to String
Instrukce MOVS přesune operand (slabiku, slovo, dvouslovo) ze zdrojového místa do cílového. Zdrojový operand je implicitně adresován pomocí registrů DS:SI. Cílový operand je adresován pomocí registrů ES:DI. V závislosti na hodnotě příznaku DF v registru F se po provedení instrukce MOVS obsahy registrů SI a DI buď inkrementují (DF=0) nebo dekrementují (DF=1) a to o hodnotu, která je dána velikostí operandů.
M MO OV VS SS S – Move Scalar Single-FP
Instrukce přesune 32-bitový operand reprezentující skalární SP operand z registru/paměti do registru/paměti.
M MO OV VS SX X – Move with Sign-Extension
Instrukce přenese slabiku / slovo z registru nebo paměti do registru; podle nastavení velikosti adresy znaménkově rozšíří tuto hodnotu na slovo či dvouslovo.
M MO OV VU UP PS S – Move Unaligned Four Packed Single-FP
Instrukce přesune 128-bitový operand, reprezentující 4 SP operandy z registru/paměti do registru/paměti.
M MO OV VZ ZX X – Move with Zero-Extend
Instrukce přenese slabiku / slovo z registru nebo z paměti do registru; podle nastavené velikosti adresy binárními nulami rozšíří tuto hodnotu na slovo či dvouslovo.
38
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
M MU ULL – Unsigned Multiply
Je-li zdrojovým operandem slabika, vynásobí instrukce MUL tímto operandem obsah střadače AL a výsledek uloží do střadače AX. Jestliže je výsledný obsah registru AH nulový, pak instrukce vynuluje příznaky OF a CF, jinak je nastaví na hodnotu 1. Je-li zdrojovým operandem slovo, vynásobí instrukce MUL tímto operandem obsah registru DX a výsledek uloží do registrů DX:AX. Jestliže je výsledný obsah registru DX nulový, pak instrukce vynuluje příznaky OF a CF, jinak je nastaví na hodnotu 1.
M MU ULLP PS S – Packed Single-FP Multiply
Instrukce vynásobí pakované SP operandy.
M MU ULLS SS S – Scalar Single-FP Multiply
Instrukce vynásobí pouze dolní část (ze 4) a tu uloží do cílového operandu. Zbývající 3 vyšší části jsou převzaty ze zdrojového operandu.
N NE EG G – Two’s Complement Negation
Instrukce NEG zamění operand jeho dvojkovým doplňkem (změní znaménko a nastaví příznaky OF, SF, ZF, AF, PF a CF).
N NO OP P – No Operation
Instrukce NOP není u procesorů i8086/88 součástí instrukčního souboru. Assemblerem je překládána jako instrukce XCHG AX, AX (op. Kód (90)h).
N NO OT T – One’s Complement Negation
Instrukce NOT invertuje hodnoty jednotlivých bitů operandu.
O OR R – Logical Inclusive OR
Instrukce OR provede logický součet operandů. Výsledkem operace přepíše cílový operand. Podle výsledku nastaví příznaky OF, SF, ZF, PF a CF.
O OR RP PS S – Bit-wise Logical OR for Single-FP Data
Instrukce provede logický součet dvou SP operandů.
O OU UT T – Output to Port
Instrukce OUT přesune obsah střadače do adresovaného (výstupního) portu.
O OU UT TS S/ /O OU UT TS SB B/ /O OU UT TS SW W/ /O OU UT TS SD D – Output String to Port
Instrukce OUTS přesune operand (slabiku, slovo nebo dvouslovo) za zdrojového místa adresovaného registry DS:SI do výstupního portu adresovaného obsahem registru DX. V závislosti na hodnotě příznaku DF registru F se po provedení instrukce OUT obsah registru DI buď inkrementuje (DF=0), nebo dekrementuje (DF=1) a to o hodnotu, která je dána velikostí operandu.
P PA AC CK KS SS SW WB B/ /P PA AC CK KS SS SW WD D – Pack with Signed Saturation
Instrukce zabalí a saturuje znaménková slova do slabik (PACKSSWB) nebo znaménková dvouslova do slov (PACKSSWD). Instrukce PASSWB zabalí 4 slova se znaménkem z cílového operandu a 4 slova se znaménkem ze zdrojového operandu (druhý) do 8 slabik se znaménkem určených cílovým opernadem. Cílovým operandem musí být MMX registr. MMX instrukce
39
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
P PA AC CK KU US SW WB B – Pack with Unsigned Saturation
Instrukce PACKUSWB zabalí a saturuje 4 slova se znaménkem z cílového operandu (první) a 4 slova ze zdrojového operandu do 8 slabik bez znaménka určených cílovým operandem. Cílovým operandem musí být MMX registr. MMX instrukce
P PA AD DD DB B/ /P PA AD DD DW W/ /P PA AD DD DD D – Packed Add
Instrukce sečte zabalené operandy (slabiky, slova, dvouslova) – cílový se zdrojovým. Cílovým operandem musí být MMX registr. MMX instrukce
P PA AD DD DS SB B/ /P PA AD DD DS SW W – Packed Add with Saturation
Instrukce sečte zabalené, znaménkové operandy (slabiky, slova). Cílovým operandem musí být MMX registr. MMX instrukce
P PA AD DD DU US SB B/ /P PA AD DD DU US SW W – Packed Add Unsigned with Saturation
Instrukce sečtě zabalené, bezznaménkové operandy (slabiky, slova). Cílovým operandem musí být MMX registr. MMX instrukce
P PA AN ND D – Logical AND
Instrukce PAND provede logický součin na 64-bitovém operandu (čtyřslovu) a výsledek uloží do cílového operandu (první). Cílovým operandem musí být MMX registr. MMX instrukce
P PA AN ND DN N – Logical AND NOT
Instrukce PANDN provede logický NOT nad cílovým 64-bitovým operandem. Potom je proveden logický součin (AND) cílového a zdrojového 64-bitového operandu, výsledek je uložen do cílového operandu (první). Cílovým operandem musí být MMX registr. MMX instrukce
P PA AV VG GB B/ /P PA AV VG GW W – Packed Average
Instrukce sečte bezznaménkové prvky ze zdrojového operandu s odpovídajícími prvky cílového operandu (včetně přenosu). Poté je každý výsledek posunut doprava o jeden bit. Tyto hodnoty jsou uloženy na odpovídající místa cílového operandu.
P PC CM MP PE EQ QB B/ /P PC CM MP PE EQ QW W/ /P PC CM MP PE EQ QD D – Packed Compare for Equal
Instrukce porovná cílový operand se zdrojovým (slabiky, slova, dvouslova) na shodnost. Pokud se oba operandy shodují, je cílový operand celý naplněn jedničkami, v opačném případě je vynulován. Cílovým operandem musí být MMX registr. MMX instrukce
P PC CM MP PG GT TB B/ /P PC CM MP PG GT TW W/ /P PC CM MP PG GT TD D – Packed Compare for Greater Than
Instrukce porovná, zda je cílový operand větší než zdrojový (slabiky, slova, dvouslova). Pokud tomu tak je, je cílový operand naplněn samými jedničkami, jinak je vynulován. Cílovým operandem musí být MMX registr. MMX instrukce
40
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
P PE EX XT TR RW W – Extract Word
Instrukce vybere ze zdrojového operandu (druhý) pomocí určovacího operandu (třetí) místo (jedno ze 4) a toto je uloženo do 32-bitového cílového operandu (první) do nejnižší pozice, horní pozice zůstává vynulována.
P PIIN NS SR RW W – Insert Word
Instrukce vloží do zdrojového (původně zdrojový, po provedení cílový) operandu na určenou pozici dolní část z 32-bitového operandu.
P PM MA AD DD DW WD D – Packed Multiply and Add
Instrukce vynásobí cílový operand se zdrojovým, výsledkem jsou 4 znaménková dvouslova. Dvě dvouslova z horní části výsledku jsou sečtena a uložena do horní části cílového operandu. Dvě dvouslova z dolní části výsledku jsou sečtena a uložena do dolní části cílového operandu. Cílovým operandem musí být MMX registr. MMX instrukce
P PM MA AX XS SW W – Packed Signed Integer Word Maximum
Instrukce vrátí maximum mezi 4 znaménkovými slovy v obou registrech.
P PM MA AX XU UB B – Packed Unsigned Integer Byte Maximum
Instrukce vrátí maximum mezi 4 bezznaménkovými slovy v obou registrech.
P PM MIIN NS SW W – Packed Signed Integer Word Minimum
Instrukce vrátí minimum mezi 4 znaménkovými slovy v obou registrech.
P PM MIIN NU UB B – Packed Unsigned Integer Byte Minimum
Instrukce vrátí minimum mezi 4 bezznaménkovými slovy v obou registrech.
P PM MO OV VM MS SK KB B – Move Byte Mask to Integer
Instrukce přesune 8-bitovou masku z MMX registru (tedy vezme most-significant bity z jednotlivých slabik operandu).
P PM MU ULLH HU UW W – Packed Multiply High Unsigned
Instrukce vynásobí 4 bezznaménková slova z každého operandu navzájem mezi sebou a výsledek uloží do cílového operandu.
P PM MU ULLH HW W – Packed Multiply High
Instrukce vynásobí 4 znaménková slova zdrojového operandu (druhý) a 4 znaménková slova cílového operandu. Mezivýsledkem jsou 4 znaménková dvouslova. Horní slovo každého z mezivýsledků je potom zapsáno do odpovídající pozice cílového operandu. Cílovým operandem musí být MMX registr. MMX instrukce
P PM MU ULLLLW W – Packed Multiply Low
Instrukce vynásobí 4 znaménková nebo bezznaménková slova zdrojového operandu (druhý) a 4 znaménková nebo bezznaménková slova cílového operandu. Mezivýsledkem jsou 4 dvouslova. Dolní slovo každého z mezivýsledků je potom zapsáno do odpovídající pozice cílového operandu. Cílovým operandem musí být MMX registr. MMX instrukce
41
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
P PO OP P – Pop a Value from the Stack
Instrukce POP přesune slovo z vrcholu zásobníku na cílové místo a pak inkrementuje ukazatel zásobníku o dvě. Příznaky v registru F nemění.
P PO OP PA A/ /P PO OP PA AD D – Pop All General-Purpose Registers
Instrukce POPA vyjme ze zásobníku postupně 8 slov (dvouslov) a naplní jimi 16-bitové (32bitové) registry obecného určení v pořadí: DI, SI, BP, (ignorován; ponechána původní hodnota SP), BX, DX, CX a AX (EDI, ESI, EBP, (ignorován; ponechána původní hodnota ESP), EBX, EDX, ECX a EAX). Dále upraví obsah ukazatele zásobníku zvýšením o 16 (32).
P PO OP PFF/ /P PO OP PFFD D – Pop Stack into EFLAGS Register
Instrukce přesune slovo (dvouslovo) z vrcholu zásobníku do příznakového registru F (EFLAGS), čímž změní všechny příznaky a potom inkrementuje ukazatel zásobníku o 2 (4).
P PO OR R – Bitwise Logical OR
Instrukce provede logický součet zdrojového a cílového operandu (čtyřslov) a výsledek uloží do cílového operandu. Cílovým operandem musí být MMX registr. MMX instrukce
P PR RE EFFE ET TC CH H – Prefetch
Pokud nejsou žádné podmínky výjimek, tato instrukce načte řádek obsahující adresovou slabiku do hierarchie cache paměti, specifikované lokalizačním návěštím. Pokud již tento řádek je v paměti cache v úrovni blízké směrem k procesoru, není provedeno žádné načtení.
P PS SA AD DB BW W – Packed Sum of Absolute Differences
Instrukce spočte absolutní hodnotu diference bezznaménkových slabik obou operandů.
P PS SH HU UFFW W – Packed Shuffle Word
Instrukce prohodí sbalené celé slovo z registru MMX do registru MMX.
P PS SLLLLW W/ /P PS SLLLLD D/ /P PS SLLLLQ Q – Packed Shift Left Logical
Instrukce posune bity doleva v cílovém operandu (slovo, dvouslovo, čtyřslovo) o počet specifikovaný zdrojovým operandem. Dolní bity cílového operandu jsou nulovány. Cílovým operandem musí být MMX registr. MMX instrukce
P PS SR RA AW W/ /P PS SR RA AD D – Packed Shift Right Arithmetic
Instrukce posune bity doprava v cílovém operandu (slovo, dvouslovo) o počet specifikovaný zdrojovým operandem. Horní bity cílového operandu jsou naplněny hodnotou znaménkového bitu. Pokud je hodnota zdrojového operandu vyšší než 15 (31), je cílový operand celý naplněn znaménkovým bitem. Cílovým operandem musí být MMX registr. MMX instrukce
P PS SR RLLW W/ /P PS SR RLLD D/ /P PS SR RLLQ Q – Packed Shift Right Logical
Instrukce posune bity doprava v cílovém operandu (slovo, dvouslovo, čtyřslovo) o počet specifikovaný zdrojovým operandem. Horní bity cílového operandu jsou nulovány. Cílovým operandem musí být MMX registr. MMX instrukce
42
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
P PS SU UB BB B/ /P PS SU UB BW W/ /P PS SU UB BD D – Packed Subtract
Instrukce odečte zdrojový operand od cílového (slova, dvouslova, čtyřslova) a výsledek uloží do cílového operandu. Cílovým operandem musí být MMX registr. MMX instrukce
P PS SU UB BS SB B/ /P PS SU UB BS SW W – Packed Subtract with Saturation
Instrukce odečte zdrojový operand od cílového (slabiky, slova) a výsledek uloží do cílového operandu. Pokud výsledek přeteče platný rozsah, je saturován. Cílovým operandem musí být MMX registr. MMX instrukce
P PS SU UB BU US SB B/ /P PS SU UB BU US SW W – Packed Subtract Unsigned with Saturation
Instrukce provede bezznaménkový rozdíl, odečte zdrojový operand od cílového (slabiky, slova). Pokud výsledek přeteče platný rozsah, je saturován. Cílovým operandem musí být MMX registr. MMX instrukce
P PU UN NP PC CK KH HB BW W/ /P PU UN NP PC CK KH HW WD D/ /P PU UN NP PC CK KH HD DQ Q – Unpack High Packed Data
Instrukce rozbalí zabalený operand (slabiky, slova, dvouslova) a výsledek prokládá směrem od horních pozic. Dolní datové elementy jsou ignorovány. Viz. obrázek. MMX instrukce
P PU UN NP PC CK KLLB BW W/ /P PU UN NP PC CK KLLW WD D/ /P PU UN NP PC CK KLLD DQ Q – Unpack Low Packed Data
Instrukce rozbalí zabalený operand (slabiky, slova, dvouslova) a výsledek prokládá směrem od dolních pozic. Horní datové elementy jsou ignorovány. Viz. Obrázek. MMX instrukce
P PU US SH H – Push Word or Doubleword Onto the Stack
Instrukce PUSH dekrementuje ukazatel zásobníku o 2 (resp. 4) a potom uloží operand (slovo, dvouslovo) na aktuální vrchol zásobníku (SS:SP).
P PU US SH HA A/ /P PU US SH HA AD D – Push All General-Purpose Registers
Instrukce uloží do zásobníku obsahu všech 16-bitových (resp. 32-bitových) registrů obecného určení v pořadí: AX, CX, DX, BX, SP (původní obsah ukazatele zásobníku), BP, SI a DI (resp. EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI) a upraví obsah ukazatele zásobníku zvýšením o 16 (resp. 32).
43
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
P PU US SH HFF/ /P PU US SH HFFD D – Push EFLAGS Register Onto the Stack
Instrukce dekrementuje ukazatel zásobníku o 2 (resp. 4) a na aktuální vrchol zásobníku (SS:SP) uloží obsah příznakového registru F (resp. EFLAGS).
P PX XO OR R – Logical Exclusive OR
Instrukce PXOR provede exklusivní OR (XOR) mezi zdrojovým a cílovým operandem (čtyřslova) a výsledek uloží do cílového operandu. Cílovým operandem musí být MMX registr. MMX instrukce
R RC CLL/ /R RC CR R/ /R RO OLL/ /R RO OR R – Rotate
Instrukce RCL (Rotate Left Through Carry) provede rotaci jednotlivých bitů operandu vlevo přes příznak CF; hodnota příznaku CF se přesouvá do bitu nejnižšího a hodnota bitu nejvyššího se přesouvá do CF. Instrukce RCR (Rotate Right Through Carry) provede rotaci jednotlivých bitů operandu vpravo přes příznak CF; hodnota příznaku CF se přesouvá do bitu nejvyššího a hodnota bitu nejnižšího se přesouvá do CF. Instrukce ROL (Rotate Left) provede rotaci jednotlivých bitů operandu vlevo; hodnota nejvyššího bitu se přesouvá do bitu nejnižšího a do příznaku CF. Instrukce ROR (Rotate Right) provede rotaci jednotlivých bitů operandu vpravo; hodnota nejnižšího bitu se přesouvá do bitu nejvyššího a do příznaku CF.
R RC CP PP PS S – Packed Single-FP Reciprocal
Instrukce vrátí aproximaci vzájemných hodnot SP čísel s pohyblivou řádovou čárkou.
R RC CP PS SS S – Scalar Single-FP Reciprocal
Instrukce vrátí aproximaci vzájemných hodnot SP čísel (dolní části) s pohyblivou řádovou čárkou.
R RD DM MS SR R – Read from Model Specific Register
Instrukce RDMSR nahraje obsah 64-bitového modelového specifického registru (MSR), specifikovaného ECX registrem do registrů EDX:EAX. Do registru EDX je nahráno horních 32 bitů MSR a do EAX je nahráno dolních 32 bitů.
R RD DP PM MC C – Read Performance-Monitoring Counters
Instrukce nahraje obsah 40-bitového výkonnostně-monitorujícího čítače, specifikovaného registrem ECX do registru EDX:EAX.Do registru EDX je nahráno horních 8 bitů; do registru EAX je nahráno dolních 32 bitů.
R RD DT TS SC C – Read Time Stamp Counter
Instrukce nahraje aktuální procesorovou časovou známku do registrů EDX:EAX. Časová známka je obsažena v MSR. Procesor inkrementuje časovou známku při každém hodinovém tiku a vynuluje ji, pokud je procesor restartován.
44
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
R RE EP P/ /R RE EP PE E/ /R RE EP PZ Z/ /R RE EP PN NE E/ /R RE EP PN NZ Z – Repeating String Operation Prefix
Tyto předpony se uvádějí před řetězcovými instrukcemi MOVS, LODS a STOS a její činnost lze popsat následujícím výrazem: if (CX != 0) { do { ZF = 1; (CX)-1 -> CX; MOVS / LODS / STOS; } while ((CX) == 0) || ZF == 0); }
R RE ET T – Return from Procedure
Instrukce RET ukončí práci procedury a předá řízení zpět volajícímu programu.
R RS SM M – Resume from System Management Mode
Instrukce vrátí kontrolu programu ze systémového módu (SMM) aplikaci nebo proceduře operačnímu systému, která byla přerušena, když procesor obdržel SSM přerušení.
R RS SQ QR RT TP PS S – Packed Single-FP Square Root Reciprocal
Instrukce vrátí aproximaci vzájemných hodnot druhých odmocnin SP čísel s pohyblivou řádovou čárkou.
R RS SQ QR RT TS SS S – Scalar Single-FP Square Root Reciprocal
Instrukce vrátí aproximaci vzájemných hodnot druhých odmocnin SP čísel (pouze spodní část) s pohyblivou řádovou čárkou.
S SA AH HFF – Store AH into Flags
Instrukce SAHF přesune obsah registru AH do spodní slabiky registru F. Příznaky SF, ZF, AF, PF a CF jsou novou hodnotou z AH změněny.
S SA ALL/ /S SA AR R/ /S SH HLL/ /S SH HR R – Shift
Instrukce SHL/SAL (Logical / Arithmetic Shift Left) provede logický posuv jednotlivých bitů operandu vlevo (logický posuv vlevo = aritmetický posuv vlevo), nevyšší bit operandu se posouvá do CF. Instrukce SHR (Logical Shift Right) provede logický posuv jednotlivých bitů operandu vpravo. Do nejvyššího bitu se zapisuje 0, nejnižší bit operandu se posouvá do CF. Instrukce SAR (Arithmetic Shift Right) provede aritmetický posuv jednotlivých bitů operandu vpravo, hodnota nejvyššího bitu se nemění, nejnižší bit operandu se posouvá do CF.
S SB BB B – Integer Subtraction with Borrow
Instrukce SBB aritmeticky sečte zdrojový operand s příznakem CF a tento mezivýsledek odečte od cílového operandu. Výsledkem operace přepíše cílový operand a nastaví podle něj příznaky OF, SF, ZF, AF, PF a CF (CF představuje výpůjčku a proto je negací skutečného přenosu z nejvyššího bitu).
45
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
S SC CA AS S/ /S SC CA AS SB B/ /S SC CA AS SW W/ /S SC CA AS SD D – Scan String
Instrukce SCAS porovná cílový operand (slabiku, slovo, dvouslovo) s obsahem střadače AL/AX/EAX (odečtením hodnoty operandu od obsahu střádače) a nastaví příznaky OF, SF, ZF, AF, PF a CF. Cílový operand je adresován pomocí registrů ES:DI. V závislosti na hodnotě příznaku DF v registru F se po provedení instrukce SCAS obsah registru DI buď inkrementuje (DF = 0), nebo dekrementuje (DF = 1) a to o hodnotu, která je dána velikostí operandu.
S SE ET Tcccc – Set Byte on Condition
Instrukce SETcc rozeznává stejné podmínky jako instrukce Jcc. Je-li podmínka splněna, uloží do adresované slabiky hodnotu (01)h, jinak tuto slabiku vynuluje.
S SFFE EN NC CE E – Store Fence
Instrukce zaručuje, že každá uložená instrukce, která předchází v programovém pořadí uloženou, ohraničenou instrukci je viditelná globálně před každou uloženou instrukcí.
S SG GD DT T/ /S SIID DT T – Store Global / Interrupt Descriptor Table Register
Instrukce SGDT uloží obsah registru GDTR (limit a bázovou adresu GDT) do 6 slabik od adresy určené cílovým operandem (poslední slabika je vynulována). Instrukce SIDT uloží obsah registru IDTR (limit a bázovou adresu IDT) do 6 slabik od adresy určené cílovým operandem (poslední slabika je vynulována).
S SH HLLD D – Double Precission Shift Left
Instrukce SHLD provádí logické posuvy obsahu spojených prvních dvou operandů doleva o počet bitů, který je dán 3 operandem. Výsledek posuvu zůstává uložen v prvním operandu. Obsah druhého operandu se nemění.
S SH HR RD D – Double Precission Shift Right
Instrukce SHRD provádí logické posuvy obsahu spojených prvních dvou operandů doprava o počet bitů, který je dán 3 operandem. Výsledek posuvu zůstává uložen v prvním operandu. Obsah druhého operandu se nemění.
S SH HU UFFP PS S – Shuffle Single-FP
Instrukce prohodí sbalená čísla s pohyblivou řádovou čárkou.
S SLLD DT T – Store Local Descriptor Table Register
Instrukce SLDT uloží obsah registru LDTR (selektor deskriptoru LDT) do cílového operandu.
S SM MS SW W – Store Machine Status Word
Instrukce SMSW uloží stavové slovo (MSW) do cílového operandu.
S SQ QR RT TP PS S – Packed Single-FP Square Root
Instrukce provede druhou odmocninu sbalených čísel s pohyblivou řádovou čárkou.
S SQ QR RT TS SS S – Scalar Single-FP Square Root
Instrukce provede druhou druhou odmocninu skalárních čísel s pohyblivou řádovou čárkou (tj. pouze spodní části).
S ST TC C – Set Carry Flag
Instrukce STC nastaví příznak CF na 1.
46
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
S ST TD D – Set Direction Flag
Instrukce STD nastaví příznak DF na 1.
S ST TII – Set Interrupt Flag
Instrukce STI nastaví příznak IF na 1.
S ST TM MX XC CS SR R – Store Streaming SIMD Extension Control/Status Instrukce uloží řídící / stavové slovo SIMD rozšíření.
S ST TO OS S/ /S ST TO OS SB B/ /S ST TO OS SW W/ /S ST TO OS SD D – Store String
Instrukce STOS přesune operand (slabiku, slovo, dvouslovo) ze střádače AL, AX, EAX do cílového místa adresovaného implicitně pomocí registrů ES:DI. V závislosti na hodnotě příznaku DF v registru F se po provedení instrukce STOS obsah registru DI buď inkrementuje (DF = 0), nebo dekrementuje (DF = 1) a to o hodnotu, která je dána velikostí operandu.
S ST TR R – Store Task Register
Instrukce STR uloží obsah registru TR do cílového operandu.
S SU UB B – Subtract
Instrukce SUB aritmeticky odečte zdrojový operand od cílového, výsledkem operace přepíše cílový operand a nastaví podle něj příznaky OF, SF, ZF, AF, PF a CF.
S SU UB BP PS S – Packed Single-FP Subtract
Instrukce provede odečtení dvou sbalených čísel s pohyblivou řádovou čárkou.
S SU UB BS SS S – Scalar Single-FP Subtract
Instrukce provede odečtení dvou skalárních čísel s pohyblivou řádovou čárkou (tj. pouze spodní části).
S SY YS SE EN NT TE ER R – Fast Transition to System Call Entry Point
Instrukce provede přechod do vstupního bodu systémového volání.
S SY YS SE EX XIIT T – Fast Transition from System Call Entry Point
Instrukce provede návrat ze vstupního bodu systémového volání.
T TE ES ST T – Logical Compare
Instrukce TEST provede logický součin operandů podobně jako instrukce AND, ale výsledek operace neukládá; nastaví pouze příznaky OF, SF, ZF, PF a CF, hodnota příznaku AF není definována. Operandy nemění !
U UC CO OM MIIS SS S – Unordered Scalar Single-FP Compare and Set EFLAGS
Instrukce provede srovnání skalárních uspořádaných čísel s pohyblivou řádovou čárkou a podle výsledku nastaví EFLAGS.
U UD D2 2 – Undefined Instruction
Instrukce generuje chybný operační kód. Tato instrukce je vhodná pro testování softwaru.
U UN NP PC CK KH HP PS S – Unpack High Packed Single-FP Data
Instrukce provede rozbalení horní části sbaleného čísla s pohyblivou řádovou čárkou.
47
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
U UN NP PC CK KLLP PS S – Unpack Low Packed Single-FP Data
Instrukce provede rozbalení dolní části sbaleného čísla s pohyblivou řádovou čárkou.
V VE ER RR R/ /V VE ER RW W – Verify a Segment for Reading or Writing
Instrukce VERR kontroluje, zda segment určený jejím operandem (kterým musí být selektor datového nebo kódového segmentu) je přístupný ke čtení. Instrukce VERW kontroluje, zda segment určený jejím operandem (kterým musí být selektor datového segmentu) je přístupný k zápisu.
W WA AIIT T/ /FFW WA AIIT T – Wait
Instrukce WAIT přeruší činnost procesoru na dobu, po kterou je signál na BUSY vývodu (vstupu) tohoto procesoru v neaktivním (high) stavu; signál BUSY je standardně ovládán spolupracujícím numerickým koprocesorem a procesor tak vlastně čeká na ukončení práce tohoto koprocesoru (nebo naopak pro instrukci FWAIT).
W WB BIIN NV VD D – Write Back and Invalidate Cache
Instrukce zapíše zpět všechny pozměněné řádky z procesorové cache do vnitřní paměti počítače a vymaže obsah cache.
W WR RM MS SR R – Write to Model Specific Register
Instrukce zapíše obsah registrů EDX:EAX do 64-bitového specifického modelového registru (MSR), specifikovaného ECX registrem.
X XA AD DD D – Exchange and Add
Instrukce vymění oba operandy a poté je sečte a výsledek uloží do cílového (prvního) operandu.
X XC CH HG G – Exchange Register / Memory with Register
Instrukce XCHG provede vzájemnou výměnu operandů.
X XLLA AT T/ /X XLLA AT TB B – Table Look-up Translation
Instrukce XLAT, resp. XLATB přesune do střádače AL obsah slabiky s adresou EA = (BX) + (AL).
X XO OR R – Logical Exclusive OR
Instrukce XOR provede logický exklusivní součet (nonekvivalenci) 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.
X XO OR RP PS S – Bit-wise Logical XOR for Single-FP Data
Instrukce provede logický exklusivní součet (nonekvivalenci) dvou sbalených operandů s pohyblivou řádovou čárkou.
48
Název: Architektura procesorů Intel Autor: Martin Drahanský Datum: 25.1.2000
Literatura: [1]
…
Doc. Ing. František Zbořil, CSc. : Strojově orientované jazyky; Jazyk symbolických instrukcí osobních počítačů IBM; 1992
[2]
…
Ing. Zdeněk Vrátil: Assembler PC, 1994
[3]
…
Prof. Ing. Václav Dvořák, DrSc., Doc. Ing. Vladimír Drábek, Csc. : Architektura procesorů; 1999
[4]
…
Intel Architecture Optimization Manual; 1998
[5]
…
Intel Architecture Software Developer’s Manual, Volume 1 & Volume 2 for Pentium II; 1999
[6]
…
Intel Architecture Software Developer’s Manual, Volume 1 & Volume 2 for Pentium III; 1999
[7]
…
Intel Pentium III Processor and Intel 820 Performance Brief; 1999
[8]
…
www.intel.com
Upozornění: Celý tento dokument je osobním vlastnictvím autora; není možné bez jeho svolení kopírovat či jakkoliv citovat části z tohoto dokumentu. Tento materiál slouží jako podpůrný text k výuce na VUT v Brně, Fakulta elektrotechniky a informatiky, obor IVT, kurzy vedené doc. ing. Františkem Zbořilem, CSc. a pro Gymnázium na tř. Kpt. Jaroše 14, v Brně. Autor:
Martin Drahanský
[email protected]
49