P000 Architektura počítačů

Obsah
předchozí: Přerušení, V/V operace



Virtuální paměť


V paměti:
1MB
rámec 0
rámec 1
rámec 2
rámec 3
.
.
.
rámec 255

Rámec (Frame) je stejně
veliký prostor
jako stránka (Page) = 4k
Na disku:
4GB
stránka 0
stránka 1
stránka 2
stránka 3
stránka 4
 
.
.
.
 
stránka 1M-1


Každý odkaz na paměť obsahuje virtuální adresu:

30010.gif Ta se transformuje

přes tabulku

obsazení rámců









na reálnou adresu
Následující: Vyrovnávací (cache) paměť
Obsah

P000 Architektura počítačů

Obsah
Předchozí: Virtuální paměť



Vyrovnávací (cache) paměť





0 1 2 . . . 7
<=>
A B
<=>
Procesor
Operační paměť
>MB
Rychlá
vyrovnávací
paměť
(cache)
2-64kB
Bloky stejné
velikosti
např. 128 B



Problémy:
  1. Není nutné vždy přepisovat blok
    z VP zpět do OP

  2. Který blok při zaplňení VP
    vyhodit ?
    (LRU - Least Recently Used)
    = nejdéle nepoužívaný


Následující: Realizace LRU
Obsah

P000 Architektura počítačů

Obsah
Předchozí: Vyrovnávací (cache) paměť



Realizace LRU





a)   VP vybavit každý blok čítačem, který se při:

- volání daného bloku nuluje

- volání jiného bloku inkrementuje o jedničku
   v případě potřeby se vyřadí blok s nejvyšší hodnotou

př.
bloky:
1 2 3 4

volání:
1 0 1 1
2 1 0 2
3 2 0 3
 4  3 1 0
 
bl.2
bl.3
bl.3
bl.4



b)   Pomocí neúplné matice s prvky nad hlavní diagonálou

- každý prvek je jednobitová pamět

- pří volání bloku  i  se:

- nejdéle nepoužité paměťové místo má:



př. 6 5 4 3 2 1
1
2
3
4
5
6
30020.gif
pořadí volání:
2, 5, 6, 1, 3, 4



Následující: Další problémy při použití cache paměti
Obsah

P000 Architektura počítačů

Obsah
Předchozí: Realizace LRU



Další problémy při použití cache paměti





3)      Napojení OP na VP a na kanál

operační
paměť
30025.gif
cache
30025.gif
procesor
30025a.gif
kanál
30025.gif 30025a.gif




4)      V multiprocesorových systémech při

sdílení jedné paměti více procesory



Následující: Architektura procesoru Intel 8086
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Použití cache paměti

Zapojení procesorů 8086/88

8086 8088

INTR Signál žádosti o maskovatelné přerušení.
Signál testovatelný instrukcí WAIT. Při =L program pokračuje další instrukcí.
NMI Signál nemaskovatelného přerušení.
RESET Signál okamžitě ukončující aktivitu CPU a předávající řízení instrukci na adrese 0FFFF0h.
Uzamčení sběrnice pro procesor, který nastavil =L instrukčním prefixem LOCK.
Rozlišuje, zda adresa patří paměti nebo V/V v procesoru 8086.

sledující: Typy dat zpracovávané procesory Intel
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Zapojení procesorů 8086/88

Typy dat zpracovávané procesory Intel



Rozsahy zobrazení

Se znaménkem Bez znaménka
Slabika<-128, +127>10 <0, 255>10
16bitové slovo<-32 768, +32 767>10 <0, 65 535>10
32bitové slovoasi (-2.109, +2.109)10 asi (0, 4.109)10

Další zpracovávané typy dat:

sledující: Adresace paměti procesoru 8086
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Typy zpracovávané procesory Intel

Adresace paměti procesoru 8086



Adresu zapisujeme ve tvaru segment : offset.
Zápis 01A5:001216 představuje tedy dvacetibitovou adresu 01A6216.

Procesor 8086 pro uložení segmentu poskytuje čtyři 16bitové segmentové registry:

sledující: Registry procesoru 8086
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Adresace paměti procesoru 8086

Registry procesoru 8086


Implicitní přiřazení segmentových registrů

Při přístupu k se použije registr Operace
instrukcímCS (Code Segment) Výběr operačního kódu nebo přímého operandu.
zásobníkuSS (Stack Segment) Při všech přístupech k zásobníku nebo ve spojitosti s registrem BP.
datůmDS (Data Segment) Při všech přístupech k datům v paměti vyjma zásobníku a přímých operandů. V řetězcových operacích segmentuje zdrojový operand.
alternativním datům ES (Extra Segment)  V řetězcových operacích pro segmentování cílového operandu.


Registr s offsetemImplicitně použitý segmentový registr
SPSS
BPSS
BXDS
SIDS
DIDS (ES v řetězcových operacích)
BP v kombinaci s SI nebo DISS
BX v kombinaci s SI nebo DIDS

Explicitní přiřazení segmentového registru offsetovému lze zadat např.:

MOV AH,CS:[BX]
Nepřímá adresa CS:BX (nikoli DS:BX)
ADC AH,ES:Adresa
Přímá adresa segmentovaná přes ES
sledující: Příznakový registr 8086
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Registry procesoru 8086

Příznakový registr 8086

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
        OF DF IF TF SF ZF   AF   PF   CF

CF (Carry Flag) obsahuje přenos z nejvyššího bitu, a to jak při práci s 8 nebo 16 bitovým operandem.
PF (Parity Flag) se nastaví na jedničku, pokud dolní osmice bitů výsledku právě provedené operace obsahuje sudý počet "1"(sudá parita výsledku).
AF (Auxiliary Carry Flag) je rozšířením příznaku CF pro přenos přes hranici nejnižší půlslabiky operandu (vždy z bitu 3 do 4 bez ohledu na šířku operandu). Má význam v BCD aritmetice.
ZF (Zero Flag) je nastaven při nulovém výsledku operace.
SF (Sign Flag) je kopií znaménkového bitu výsledku operace.
OF (Overflow Flag) se nastaví na jedničku, pokud při právě dokončené operaci došlo k aritmetickému přeplnění(výsledek spadá mimo rozsah zobrazení).
TF (Trap Flag) uvádí procesor do krokovacího režimu, ve kterém je po provedení první instrukce generováno přerušení(INT 1). Příznak lze nastavit pouze přes zásobník instrukcí IRET.
IF (Interrupt Enable Flag) nulový zabrání uplatnění vnějších maskovatelných přerušení (generovaných signálem INTR).
DF(Direction Flag) řídí směr zpracovávání řetězcových operací.
sledující: Zásobník
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Příznakový registr 8086

Zásobník

Zásobník procesor implementuje jako strukturu LIFO kdekoli v operační paměti. Všechny odkazy na zásobník jsou segmentovány přes registr SS.

Příklad: Dno zásobníku je na adrese SS:0A1A. Zásobník byl do současného stavu naplněn posloupností instrukcí, které zapsaly hodnoty: 0AA01, 11AA, 3C00.

Příklad zásobníku

Výběr a zápis do zásobníku řídí registr SP (Stack Pointer), který obsahuje adresu právě zapsané položky.

Instrukce PUSH provede činnosti v následujícím pořadí:

  1. sníží obsah SP o dvě,
  2. na adresu SS:SP uloží obsah 16bitového operandu.

Instrukce POP provede tyto akce:

  1. operand naplní 16bitovým obsahem adresy SS:SP,
  2. zvýší obsah SP o dvě.

Procesor 8086 nemá žádný prostředek, kterým by hlídal maximální naplnění zásobníku.

sledující: Přerušení v 8086
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Zásobník

Přerušení v 8086

Vnější (generována technickými prostředky) Vnitřní (generována programově)

Vektor adres rutin obsluhujících přerušení


Každé přerušení provede akce v tomto pořadí:
  1. do zásobníku se uloží registr příznaků (F),
  2. vynulují se příznaky IF a TF,
  3. do zásobníku se uloží registr CS,
  4. registr CS se naplní 16bitovým obsahem adresy n x 4 + 2,
  5. do zásobníku se uloží registr IP,
  6. registr IP se naplní 16bitovým obsahem adresy n x 4.
Návrat do přerušeného procesu a jeho pokračování zajistí instrukce IRET, která provede činnosti v tomto pořadí:
  1. ze zásobníku obnoví registr IP,
  2. ze zásobníku obnoví registr CS,
  3. ze zásobníku obnoví příznakový registr (F).
sledující: Rezervovaná přerušení 8086, počáteční nastavení procesoru
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Přerušení 8086

Rezervovaná přerušení 8086

 INT  Význam




 Celočíselné dělení nulou (Divide by Zero) 
 Krokovací režim (Single-Step)
 Nemaskovatelná přerušení (NMI)
 Ladící bod (Breakpoint Trap)
 Přeplnění (Overflow Trap)


INT 0 nastane při dělení nulou v instrukcích DIV a IDIV. Obsah CS:IP uložený do zásobníku ukazuje za (v 80286 a vyšších na) instrukci, která přerušení způsobila.
INT 1 nastane po provedení instrukce, je-li TF=1.
INT 2 se vygeneruje po přijetí signálu NMI (v 8086 pouze chyba parity v paměti), který nelze zakázat nulovou hodnotou příznaku IF.
INT 3 se používá společně s přerušením INT 1 v ladících systémech. Přerušení 03h se vygeneruje po dekódování speciální jednoslabikové instrukce INT 3 (s operačním kódem 0CCh). Přerušení uloží do zásobníku obsah CS:IP ukazující na slabiku bezprostředně za touto instrukcí.
INT 4 provede instrukce INT 0(Interrupt on Overflow), je-li v okamžiku jejího dekódování nastaven příznak OF=1. CS:IP ukazuje na slabiku za touto instrukcí.

Počáteční nastavení procesoru


Procesor je inicializován aktivní úrovní signálu RESET.
 Registr Obsah
 Příznakový registr
 IP
 DS, ES, SS
 CS
 0
 0
 0
 0FFFFh

Tzn., že první instrukce, kterou bude procesor po inicializaci signálem RESET zpracovávat, je umístěna na adrese 0FFFF:0000h.
sledující: Adresovací techniky
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Rezervovaná přerušení 8086, počáteční nastavení procesoru

Adresovací techniky

Instrukce:     
      Příklad
Registr MOV AH,BL
Přímý operand MOV AH,50
Přímá adresaPROMDB  ?
(totožné s MOV AH,[PROM]) MOV AH,PROM
 neboMOV AH,DS:[101]
Nepřímá adresa (SI, DI, SP, BP, BX)MOV AH,[BX]
Bázovaná adresa (BP, BX)MOV AH,[BP+PROM]
Indexovaná adresa (SI, DI)MOV AH,[PROM+SI]
neboMOV AH, PROM[SI]
Báze + Index (BP, BX + SI, DI)MOV AH,[BX][DI]
neboMOV AH,[BP+DI]
Přímá + Báze + IndexMOV AH,PROM[BX][DI]
neboMOV AH,[PROM+BX+DI]
neboMOV AH,[PROM+BX+DI+1]

SEGMENT : PŘÍMÁ ADRESA + BÁZE + INDEX

sledující: Instrukce MOV
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Adresovací techniky

Instrukce MOV

Instukce MOV příznaky nemění!!
MOV r/m8,r8MOV AL,BL AL:=BL
MOV Slabika,CH Slabika:=CH
MOV r/m16,r16MOV BX,CX
MOV r8,r/m8
MOV r16,r/m8
MOV r/m16,segmentový registrMOV AX,CS
MOV segmentový registr,r/m16MOV DS,AX
Nelze MOV CS,.. !!!
MOV r/m8,imm8MOV Slabika,10
MOV r/m16,imm16

Po instrukci MOV SS,... je po dobu trvání následující instrukce zakázáno přerušení !
sledující: Aritmetické instrukce
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Instrukce MOV

Aritmetické instrukce (celočíselné)

ADD r/m8,imm8 ADD AL,80 AL:=AL+80
ADD Slabika,-10
r/m16,imm16 ADD CX,10000
r/m16,imm8 ADD CX,10 <-rozšíření s respektováním znaménka
r/m8,r8 ADD CH,CL
r/m16,r16 ADD AX,BX
r8,r/m8
r16,r/m16
ADC ADD WITH CARRY
ADC AL,CL AL:=AL+CL+CF
SUB SUBTRACTION
SUB AL,CL AL:=AL-CL
SBB SUBTRACTION WITH BORROW
SBB AL,CL AL:=AL-CL-CF
CMP COMPARE
CMP AL,CL F:=AL-CL
INC INCREMENT
INC r/m8 INC Slabika Slabika:=Slabika+1
INC r/m16 INC DX
DEC DECREMENT
DEC Slabika Slabika:=Slabika-1
NEG DVOJKOVÝ DOPLŇEK
NEG Slabika Slabika:= -Slabika
CBW CONVERT BYTE TO WORD
CBW AX:=AL se zachováním znaménka.
CWD CONVERT WORD TO DOUBLEWORD
CWD
IMUL SIGNED MULTIPLICATION respektuje znaménka!
IMUL r/m8IMUL BL AX:=AL * BL
IMUL Slabika AX:=AL * Slabika
IMUL r/m16 IMUL CX DX&AX:=AX * CX
IMUL Slovo DX&AX:=AX * Slovo
MUL UNSIGNED MULTIPLICATION
Neuvažuje znaménkový bit, jinak stejné jako IMUL
IDIV SIGNED DIVIDE
IDIV r/m8 IDIV BL AL:=AXBL
AH:=AX modulo BL
IDIV Slabika AL:=AXSlabika
AH:=AX modulo Slabika
IDIV r/m16 IDIV CX AX:=DX&AXCX
DX:=DX&AX modulo CX
IDIV Slovo AX:=DX&AXSlovo
DX:=DX&AX modulo Slovo
Je-li podíl větší než maximální rozsah zobrazení -> INT 0
Zbytek má stejné znaménko jako dělenec.
DIV UNSIGNED DIVIDE
Neznaménkové
sledující: Logické instrukce
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Aritmetické instrukce

Logické instrukce

ANDLOGICKÝ SOUČIN PO BITECH
kombinace parametrů viz "ADD" AND AL,7
AND Slovo,1FFFh
AL:=AL  /\  7
Slovo:=Slovo  /\  1FFFh
ORLOGICKÝ SOUČET
OR AL,7 AL:=AL  \/  7
XORNONEKVIVALENCE
XOR AL,7AL:=AL  7
NOTINVERZE BITů (JEDNIČKOVÝ DOPLNĚK)
NOT r/m 8NOT AH
NOT Slab
AH:= 
Slab:= 
NOT r/m16NOT SI
NOT Slovo
SI:= 
Slovo:= 
TESTLOGICAL COMPARE
TEST r/m8,imm8TEST AL,7
TEST Slab,15
F:=AL  /\  7
F:=Slab  /\  15
TEST r/m16,imm16
TEST r/m8,r8
TEST r/m16,r16


AND, OR, XOR ....... r/m16,imm8 ....... znaménkové rozšíření
sledující: Rotace, posuvy
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Logické instrukce

Rotace

ROLROTATE LEFT
ROL r/m8,1
ROL r/m8,CL
ROL r/m16,1
ROL r/m16,CL
8086  : CL neomezeno
286,.. : CL  /\  1Fh

OF je definováno pouze při rotaci o 1 bit:
ROL:OF:=CF  bitn-1
tj. OF se nastaví, pokud se hodnota CF nerovná novému nejvyššímu bitu.
RORROTATE RIGHT
ROR:OF:=bitn-1  bitn-2
ROLROTATE LEFT THROUGH CARRY
RCRROTATE RIGHT THROUGH CARRY

Posuvy

SAL
SHL
SHIFT ARITHMETIC LEFT
SHIFT LOGICAL LEFT
Obě provedou
tutéž akci.
Varianty viz instrukce "ROL"
znaménko aritmetického násobení 2n
OF:=CF  bitn-1
SARSHIFT ARITHMETIC RIGHT
OF:=0
SHRSHIFT LOGICAL RIGHT
OF:=původní bitn-1
sledující: Větvení programu
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Rotace, posuvy

Větvení programu

JMP            JUMP=NEPODMÍNĚNÝ SKOK
JMP rel8JMP SHORT návěští krátký skok
IP:=IP+vzdálenost návěští
JMP rel16JMP návěští blízký skok
IP:=IP+vzdálenost návěští
JMP ptr16:16JMP FAR_PTR návěští vzdálený skok
CS:IP:= segment:offset návěští
JMP r/m16JMP [BX]

JMP [slovo]
nepřímý blízký skok
IP:=BX
IP:=slovo
JMP m16:16JMP [dvojslovo] CS:IP:=dvojslovo
nepřímý skok vzdálený
sledující: Podmíněné skoky
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Větvení programu

Podmíněné skoky

JUMPS CONDITIONAL
Pouze krátké skoky: vzdálenost <-128; +127>
Neuvádí se "short"
JUMP SHORT IF.. TESTOVANÁ
PODMÍNKA
VÝSLEDEK
POSLEDNÍ OPERACE
JE
JZ
EQUAL
ZERO
ZF=1 roven
nulový
JNE
JNZ
NOT EQUAL
NOT ZERO
ZF=0 různý
nenulový
JP
JPE
PARITY
PARITY EVEN
PF=1 sudá
parita
JNP
JPO
NOT PARITY
PARITY ODD
PF=0 lichá
parita
JS SIGNUM SF=1 záporný
JNS NOT SIGNUM SF=0 kladný  \/  nulový
JC CARRY CF=1 nastal přenos
JNC NOT CARRY CF=0 nenastal přenos
JO OVERFLOW OF=1 nastalo přetečení
JNO NOT OVERFLOW OF=0 nenastalo přetečení
JB
JNAE
BELOW
NOT ABOVE NOR EQUAL
CF=1 nz. menší
Příklad: +2 : 0 1 0
+5 : 1 0 1
nz.
CMP 2,5     0 1 0    ZF=0
          - 1 0 1    OF=1
nz. 2<5   1 1 0 1    SF=1
                     CF=1
JL
JNGE
LESS
NOT ABOVE NOR EQUAL
SF  OF z. menší
Příklad: +2 : 0 1 0
-3 : 1 0 1
z.
CMP 2,-3  z: 2-3
                     CF=1
                     SF=1
                     OF=1
                     ZF=0
                     
CMP -3,2    1 0 1    ZF=0
          - 0 1 0    OF=1
          0 0 1 1    SF=0
                     CF=0
JA
JNBE
ABOVE
NOT BELOW NOR EQUAL
(CF=0) /\ (ZF=0) nz. větší
JG
JNLE
GREATER
NOT LESS NOR EQUAL
(SF=OF) /\ (ZF=0) z. větší
JBE
JNA
BELOW OR EQUAL
NOT ABOVE
(CF=1) \/ (ZF=1) nz. menší nebo rovno
JLE
JNG
LESS OR EQUAL
NOT GREATER
(SF  OF) \/ (ZF=1) z. menší nebo rovno
JAE
JNB
ABOVE OR EQUAL
NOT BELOW
CF=0 nz. větší nebo rovno
JGE
JNL
GREATER OR EQUAL
NOT LESS
SF=OF z. větší nebo rovno
JCXZ JUMP SHORT IF CX=0
používá se pro řízení cyklů
Jpodm rel8 JZ návěští krátký skok na návěští je-li ZF=1, jinak se pokračuje následující instrukcí.
JCXZ rel8 JCXZ návěští krátký skok na návěští je-li CX=0
sledující: Zásobník
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Podmíněné skoky

Zásobník

PUSH Uložení 16bitového objektu do zásobníku:
1) SP:=SP-2
2) [SS:SP]:=operand_16bitový
PUSH m16
PUSH r16
PUSH segment
PUSH slovo
PUSH AX
PUSH CS
POP Výběr 16bitového objektu ze zásobníku:
1) pomocná:=[SS:SP]
2) SP:=SP+2
3) operand_16bitový:=pomocná
POP m16
POP r16
POP segment
POP slovo
POP BX
NELZE: POP CS !!!
POP SS zakazuje přerušení na dobu provedení této a následujcí instrukce

8086:     SP=6 !!!             80286,...   SP=6 !!!
PUSH SP   SP:=6-2=4            PUSH SP     SP:=6-2=4
          [4]:=4                           [4]:=6
POP  SP   POM:=[4]=4           POP  SP     POM:=[4]=6
          SP:=4+2=6                        SP:=4+2=6
          SP:=POM=4                        SP:=POM=6
          SP=4 !!!                         SP=6 !!!
            
V 8086 dává posloupnost        V 80286,...  "PUSH SP" ukládá SP
instrukcí "PUSH SP" a          do zásobníku nesnížené o 2 !!
"POP SP" špatný výsledek !!
sledující: Volání a návrat z podprogramu
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Zásobník

Volání a návrat z podprogramu

CALL
CALL rel16
CALL ptr16:16
CALL r/m16
CALL m16:16
CALL návěští
CALL FAR PTR návěští
CALL [BX]
CALL [dvojslovo]
IP:=IP+vzdálenost návěští
CS:IP:=ptr 16:16
IP:=BX
CS:IP := dvojslovo
CALL: 1) PUSH CS   - pouze "FAR" varianta
2) PUSH IP+délka_instrukce
3) (CS):IP := operand
RET RETURN
RET POP IP blízký návrat
RETF POP IP
POP CS
vzdálený návrat
RET imm16 POP IP
SP:=SP+imm16
RETF imm16 POP IP
POP CS
SP:=SP+imm16
Příklad:
RET 2
PUSH parametr
CALL podprogram
návrat z podprogramu s odstraněním 1 slova
sledující: Příznakový registr
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Volání a návrat z podprogramu

Příznakový registr

PUSHF PUSH FLAG REGISTER nemění příznaky
PUSHF uloží 16bitový registr F
POPF POP FLAG REGISTER mění příznaky
POP F vybere 16bitový objekt a uloží jej do F
STI
STD
STC
CLI
CLD
CLC
IF:=1
DF:=1
CF:=1
IF:=0
DF:=0
CF:=0
povolení přerušení
řetězce odzadu

zákaz přerušení
řetězce odpředu

Poznámka: STI povolí přerušení až po provedení následující instrukce.
CMC CF:=
LAHF LOAD FLAGS INTO AH
LAHF AH := bity 0-7 FLAGS
SAFH STORE AH INTO FLAGS
SAHF bity 0-7 FLAGS := AH
sledující: Přerušení
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Příznakový registr

Přerušení

INT INTERRUPT
INT imm8 délka 2 slabiky
1) PUSHF
2) IF:=0, TF:=0
3) PUSH CS
4) CS:=[imm8 x 4 + 2]
5) PUSH IP + délka instrukce
    (obsah zásobníku ukazuje za "INT imm8"!)
6) IP:=[imm8 x 4]
INT 3
délka 1 slabika, operační kód: 0CCh
INT 0 INTERRUPT IF OVERFLOW
délka 1 slabika, operační kód 0CEh
provede INT 4, je-li OF=1
IRET INTERRUPT RETURN
1) POP IP
2) POP CS
3) POP F
sledující: Cykly
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Přerušení

Cykly

LOOP UNCONDITIONAL LOOP nemění příznaky
registr CX ... čítač průchodů
Příklad: MOV CX, počet_průchodů
OPAKUJ:
.
.
.
LOOP OPAKUJ

zde, je-li CX=0
inicializace řídící proměnné


tělo cyklu

CX:=CX-1
pokud CX  0 ... SHORT skok na OPAKUJ
LOOP rel8 LOOP OPAKUJ 1) CX:=CX-1
2) je-li CX  0 ... SHORT skok
CONDITIONAL LOOP
LOOPE
LOOPZ
LOOPE rel8 1) CX:=CX-1
2) je-li (CX  0) /\ (ZX=1) ... SHORT skok na rel8
LOOPNE
LOOPNZ
LOOPNE rel8 1) CX:=CX-1
2) je-li (CX  0) /\ (ZX=0) ... SHORT skok na rel8
sledující: Ovládání V/V
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Cykly

Ovládání V/V

IN INPUT FROM PORT
Přenos slabiky nebo slova ze V/V brány do registru AL nebo AX.
IN AL, imm8
IN AX, imm8
IN AL, DX
IN AX, DX
číslo V/V brány:
  • imm8 ... <0, 255>
  • DX ... <0, 65535>

16bitový přenos:

imm8, imm8+1
DX, DX+1
OUT OUTPUT TO PORT
Přenos slabiky nebo slova z registru AL nebo AX do V/V brány.
OUT imm8, AL
OUT imm8, AX
OUT DX, AL
OUT DX, AX
sledující: Další instrukce přesunů dat
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Ovládání V/V

Další instrukce přesunů dat

XCHG cílový, zdrojový ... zamění obsahy
XCHG r/m8, r8
XCHG r8, r/m8
XCHG r/m16, r16
XCHG r16, r/m16
XCHG AL, AH
XCHG AX, slovo
XLAT provede AL:=DS:[BX+AL]
LEA r16, imm16
totožné s: MOV r16, offset ....
MOV BX, offset Tabulka  =  LEA BX, Tabulka
LDS r16, m16:16 LDS BX, Dvojslovo DS:BX:= obsah Dvojslovo
LES r16, m16:16 LES DI, Dvojslovo ES:DI:= obsah Dvojslovo

Řídící instrukce

NOP NO OPERATION  operační kód 90h ekv. XCHG AX, AX
HLT HALT zastavení procesoru
obnova:
- NMI (návrat IRET je za instrukci HLT)
- RESET
ESC Vzorek uvádějící instrukce 8087.
WAIT Čekání na dokončení akce 8087.
LOCK Instrukční prefix "zamykající" sběrnici po dobu trvání instrukce.
Příklad: LOCK ADD Slovo, DX Slovo:=Slovo+DX
sledující: Řetězcové instrukce
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Další instrukce přesunů dat

Řetězcové instrukce

MOVSB Slabika ES:[DI]:=DS:[SI]
Je-li DF=0 : SI:=SI+1 ; DI:=DI+1
jinak : SI:=SI-1 ; DI:=DI-1
žádný příznak
MOVSW Slovo ES:[DI]:=DS:[SI]
Je-li DF=0 : SI:=SI+2 ; DI:=DI+2
jinak : SI:=SI-2 ; DI:=DI-2
žádný příznak
CMPSB/CMPSW F:=DS:[SI] - ES:[DI]
inc/dec SI, DI
všechny příznaky
SCASB/SCASW F:=AL/AX - ES:[DI]
inc/dec DI
všechny příznaky
LODSB/LODSW AL/AX:=DS:[SI]
inc/dec SI
žádný příznak
STOSB/STOSW ES:[DI]:=AL/AX
inc/dec DI
žádný příznak
REP instrukční prefix pro opakování řetězcových instrukcí nastaví ZF
  1.
2.
3.
4.
5.
Je-li CX=0 ... konec
Uplatněno případné přerušení
Jedno provedení instrukce (řetězcové)
CX:=CX-1
Je-li REP ... jdi na 1
Má význam pouze
u CMPS a SCAS
Je-li REPZ (REPE) a je-li ZF=1 ... jdi na 1.
Je-li REPNZ (REPNE) a je-li ZF=0 ... jdi na 1.
Jinak neopakuj = KONEC.
sledující: Instrukce pro podporu BCD aritmetiky
Obsah

 

P000 Architektura počítačů

Obsah
Předchozí:
Řetězcové instrukce

Instrukce pro podporu BCD aritmetiky

BCD číslice 4 bity; 0 - 9
půlslabika (nibble)
Nezhuštěný tvar Unpacked Decimal
1 číslice v dolní půlslabice,
horní musí být rovna 0
Zhuštěný tvar Packed Decimal
2 číslice v jedné slabice
AAA Ascii Adjust After Adition
Je-li AF=1  \/  AL>9 => AH:=AH+1; AL:=AL+6 ;
AL1-4:=0; AF:=CF:=1
Jinak: AF:=CF:=0
AAD Ascii Adjust AX Before Division
sledující: Zapojení procesoru 80286
Obsah

Michal Brandejs brandejs@informatics.muni.cz