Intel architektrai bdinga savyb – naudojama vienoda mnemonika visi?kai
skirtingoms komandoms.
?emiau pateikiami sutrumpinim, naudojam komand apra?ymuose, paai?kinimai:
d – krypties (destination) bitas, jis nurodo, ar operacijos kryptis yra i? procesoriaus
atmint, ar i? atminties procesori;
0 – i? procesoriaus registro atmint
d =
1 – i? atminties procesoriaus registr
w - ploio (width) bitas, jis nurodo operacijoje dalyvaujanio lauko ilg;
0 – operandas baitas
w =
1 – operandas ?odis
mod lauko reik?ms:
00 – operandas r/m atmintyje (r/m = m), poslinkio nra;
mod = 01 – operandas r/m atmintyje (r/m = m), vieno baito poslinkis;
10 – operandas r/m atmintyje (r/m = m), dviej bait poslinkis;
11 – operandas r/m registre (r/m = r);
kur laukas r/m nurodo operand atmintyje m – (memory) arba registre r – (register);
bet.op. – betarpi?kas operandas.
j.b v.b
adr.j.b. – adreso jaunesnysis baitas
adr.v.b. – adreso vyresnysis baitas
sreg – segmento registras;
00 – ES;
sreg = 01 – CS;
10 – SS;
11 – DS;
portas – porto numeris diapazone 0 – 255
posl.j.b. – poslinkio jaunesnysis baitas
posl.v.b. – poslinkio vyresnysis baitas
seg.reg.j.b. – segmento registro jaunesnysis baitas
seg.reg.v.b. – segmento registro vyresnysis baitas
64
5.1. Bendrosios mikroprocesoriaus komandos
MOV – MOVe – persiuntimas
1. registras registras / atmintis;
1000 10dw mod reg r/m [poslinkis];
d = 0: reg r / m
d = 1: r / m reg
2. betarpi?kas operandas registras / atmintis;
1100 011w mod 000 r/m [poslinkis] bet.op1 [bet.op.2, jei w = 1]
Krypties bito nra, nes kryptis jau yra apibr?ta.
Laukas reg nereikalingas, jis yra naudojamas kaip operacijos kodo i?pltimas.
Poslinkis suformuojamas priklausomai nuo lauko mod reik?ms.
3. betarpi?kas operandas registras
1011 w reg bet.op.1 [bet.op.2, jei w = 1]
4. atmintis akumuliatorius
1010 000w adr.j.b adr.v.b.
Komandos formatas yra toks, kad registras ir operandas betarpi?kai nenurodyti.
I? operacijos kodo yra ?inoma, kad registras yra akumuliatorius.
5. akumuliatorius atmintis
1010 001w adr.j.b adr.v.b.
Pastaba.
Atvej 4. ir 5. negalima sujungti vien 101000 d w adr.j.b adr.j.b adr.v.b. ,
nes bitas d apib?ia prie?ingos krypties perdavim, negu yra nurodyta 4. ir 5. atvejais.
6. registras / atmintis segmento registras
1000 11d0 mod 0 sreg r/m [poslinkis]
sreg negali bti lygus 01, nes negalima nusisti reik?ms registr CS, nes prie?ingu
atveju priskyrimo veiksmu pakeistume CS registro reik?m, o ji gali bti pakeista tik
valdymo perdavimo komandomis.
Nra w bito, nes operandas visada 2 bait.
PUSH – djimas stek.
Prie? ra?ant stek reikia suma?inti steko rodykl : SP = SP - 2 (steke operuojame
?od?iais).
1. registras / atmintis stekas
1111 1111 mod 110 r/m [poslinkis]
65
Tai yra vieno operando komanda, laukas reg yra naudojamas kaip operacijos kodo
i?pltimas.
2. registras stekas
0101 0reg
Nra varianto, ar registras baitinis ar ?odinis, nes vienarei?mi?kai jis yra ?odinis.
3. segmento registras stekas
000 sreg 110
POP – pamimas i? steko.
Pamus i? steko reikia padidinti steko rodykl : SP = SP + 2 (steke operuojame
?od?iais).
1. stekas registras / atmintis
1000 1111 mod 110 r/m [poslinkis]
2. stekas registras
01011 reg
3. stekas segmento registras
000 sreg 111
sreg negali bti lygu 01, nes tada pakeistume CS registro reik?m, o ji gali bti
pakeista tik valdymo perdavimo komandomis.
XCHG – eXCHanGe – apsikeitimas reik?mmis.
1. registras / atmintis registras
1000 011w mod reg r/m [poslinkis]
2. registras akumuliatorius
10010 reg
Nra w bito, nes ?ia komanda vykdomas apsikeitimas tarp akumuliatoriaus AX ir
dviej bait registro, reg = { AX, CX, DX, BX, SP, BP, SI, DI }
Komanda XCHG AX, AX yra ekvivalenti NOP, t.y., operacijos kodas yra 1001 0000,
t.y., 90h.
OUT – i?vedimas port.
1. Fiksuotas portas.
1110 011w portas;
66
Registre AL (jei w = 0) arba registre AX (jei w = 1) esanti reik?m nusiuniama
port, nurodyt komandoje porto numeriu.
2. Kintamas portas.
1110 111w
Porto numeris yra imamas i? registro DX, todl galima nurodyti 65 536 skirtingus
portus. Vykdant komand, reik?m i? AL (jei w = 0) arba i? AX (jei w = 1) yra
siuniama port.
IN – nuskaitymas i? porto.
1. Fiksuotas portas.
1110 010w portas
Vykdant komand, i? porto su nurodytu numeriu padedama reik?m registr AL (jei
w = 0) arba registr AX (jei w = 1).
2. Kintamas portas.
1110 110w
Porto numeris yra imamas i? registro DX, todl galima nurodyti 65 536 skirtingus
portus. Vykdant komand, reik?m i? porto u?ra?oma registr AL (jei w = 0) arba
AX (jei w = 1). Kai atliekamas veiksmas yra ?odinis, tai tie 2 baitai yra imami ne i?
dviej gretim port, bet abu i? to paio porto, skaitant i? jo per du taktus.
XLAT – transLATe – kodo pamimas pagal poslink.
1101 0111
Komanda naudojama duomen perkodavimui. Registre BX esantis adresas rodo
perkodavimo lentel. Imamas registre AL esantis baitas ir jis traktuojamas kaip
poslinkis nuo perkodavimo lentels prad?ios. Vykdant komand, reik?m, esanti
perkodavimo lentelje su poslinkiu, nusiuniama registr
AL.
AL
Perkodavim lentel
BX
...
67
KOMPIUTERI ARCHITEKTRA
LEA – Load Effective Address – pakrauti (patalpinti) vykdomj adres.
1000 1101 mod reg r/m [poslinkis]
Komanda atlieka vykdomojo (efektyvaus) adreso nusiuntim registr.
reg yra bet kuris 16 bit registras, i?skyrus segmento registrus.
Kadangi antras operandas btinai yra atmintis, mod negali bti lygus 11.
LDS – Load ponter using DS – bendro registro ir DS u?pildymas.
1100 0101 mod reg r/m [poslinkis]
Komanda atlieka atminties dvigubo ?od?io jaunesnij adresu dviej bait nusiuntim registr, nurodyt lauke reg, ir vyresni adres dviej bait nusiuntim registr DS.
jaunesnysis ?odis registras, nurodytas lauke reg
vyresnysis ?odis registras DS
Kadangi antras operandas btinai yra atmintis, mod negali bti lygus 11.
Komandos lauku r/m [poslinkis] nurodomas dvigubo ?od?io lauk atmintyje;
operando adresas suformuojamas panaudojant registr DS : DS + efektyvus adresas .
LES – Load pointer using ES – bendro registro ir ES u?pildymas.
1100 0100 mod reg r/m [poslinkis]
Komanda LES yra pana?i komand LDS: atlieka atminties dvigubo ?od?io
jaunesnij adresu dviej bait nusiuntim registr, nurodyt lauke reg, ir vyresni
adres dviej bait nusiuntim registr ES.
jaunesnysis ?odis registras, nurodytas lauke reg
vyresnysis ?odis registras ES
Kadangi antras operandas btinai yra atmintis, mod negali bti lygus 11.
Komandos lauku r/m [poslinkis] nurodomas dvigubo ?od?io lauk atmintyje;
operando adresas suformuojamas panaudojant registr DS (ne registr ES !) :
DS + efektyvus adresas.
LAHF – Load AH status Flag – registro AH u?pildymas registro SF jaunesniuoju
baitu.
1001 1111
68
SAHF – Save AH status Flag – registro AH nusiuntimas registro SF jaunesnj
bait.
1001 1110
Pastaba:
Intel 8080 procesoriuje buvo komandos LAHF ir SAHF. Intel 8088
komand sistem jos trauktos tam, kad veikt programos, kurios buvo ra?ytos
senesniam, Intel 8080, procesoriui.
PUSHF – PUSH status Flag – registro SF nusiuntimas stek.
1001 1100
POPF – POP status Flag – registro SF u?pildymas i? steko vir?ns.
1001 1101
Tai yra vienintel komanda, kuri pakeiia vis registre SF esani reik?m i? karto.
Kitomis komandomis galima keisti atskirus bitukus.