ĮVADAS
Viena iš būdingiausių šiandieninės mokslinės – techninės pažangos ypatybių yra platus mikroelektronikos gaminių naudojimas įvairiose ūkio šakose.
Mikroprocesoriuose – ypač sudėtinguose mikroelektronikos įtaisuose – įdiegti pažangiausi mokslo ir inžinerinės minties laimėjimai. Jie naudojami šiandien daugelyje žmogaus veiklos sričių – nuo kosminių tyrimų iki buities. Tai personaliniai kompiuteriai, automatizuotos informacijos rinkimo ir apdorojimo sistemos, valdymo ir kontrolės sistemos, telekomunikacijos ir kt.
Mikroprocesorinėje technikoje išsiskyrė savarankiška didelių integrinių grandynų klasė – vieno kristalo mikrokompiuteriai, skirti įvairios paskirties įrenginių „intelektualizacijai“. Jų architektūra – tai mikroprocesorių ir mikroprocesorinių sistemų architektūros evoliucijos rezultatas, užtikrinantis žymiai mažesnę sistemos aparatinės dalies apimtį bei kainą.
16 skilčių mikroprocesoriaus dauguma registrų turi po 16 bitų. Pirmas toks – Intel 8086 pasirodė 1978 metais. Jame buvo apie 29000 MOP technologijos tranzistorių, skiriamoji geba 3 μm. Jis buvo naujos 80×86 šeimos pradininkas. Buvo du galimi darbo režimai: Real Mode ir Virtual 86.
Pagrindinės charakteristikos: dažnis 5 – 8 – 10 MHz, duomenų magistralė 16 bitų, adresų 20 bitų, 1 MB atminties, galia 1,75 W.
Užduoties analizė
Visos aritmetinės komandos keičia požymius (požymių registrą)sudėties, atimties, log sudėties, log atimties ADD/SUB/ADC/SBB AL, data8; AX, data16; r/m8, r8; r/m16, r16; r8, r/m8; r16, r/m16; r/m8, data 16; r/m16, data16.
Dalyba DIV, IDIV operandu laikomas tik daliklis, o dalmuo turi būti kaupiklyje. Pvz.:DIV r/m16 DX:AX AX DX (daliklis dalmuo dalinys liekana)
Duomenų registrai naudojami atliekant aritmetines ir logines operacijas. Išskirtinę vietą užima kaupiklis AX. Jame dažnai laikomas vienas iš operandų, o atlikus operaciją, – jos rezultatas. Registrai BX, CX, DX be dalyvavimo loginėse operacijose turi ir specialią paskirtį. Registras BX dažnai vadinamas baziniu registru ir naudojamas apskaičiuojant adresus; CX naudojamas ciklinėse procedūrose, kaip ciklų skaitiklis; DX naudojamas įvesties/išvesties operacijose, jame laikomi prievadų adresai.
Svarbiausias 8088/6, skirtumas nuo kitų 1-s kartos MP yra tas, kad 88/86 procesoriuje procesai vyksta lygiagrečiai vienu metu.
88/86 yra keturi 16 bitų bendro naudojimo registrai AX, BX, CX ir DX, du 16 bitų rodikliai SP (stack pointer) ir BP (bus pointer), du 16 bitų indeksų registrai, SI (source index) ir DI (destintion index), vienas 16 bitų programos skaitiklis PC (program counter), keturi 16 bitų segmento registrai CS (code segment), DS (data segment), SS (stack segment), ES (extra segment) ir vienas 16 bitų žymių registras F (flag register).
AX = AH+AL – akumuliatorius AL atitinka 8080 A registrą
BX = BH+BL – bazės registras. B atitinka HL registrų porą (8080)
CX = CH+CL – (count) skaičiavimo registras. Jis atitinka 80 A B C registrų porą
SP leidžia realizuoti steko atminties procedūrą.
BP leidžia paimti duomenis iš SS – steko segmento, tai yra tuos parametrus, kurie buvo perduoti per steką. Indeksų registrai leidžia paimti duomenis iš duomenų atminties, vykdant eilutės tipo operacijas. Jie gali būti naudojami ir kaip operandai 16 bitų aritmetinėse ir loginėse operacijose.
Segmento registrai dalyvauja visuose atminties operacijos skaičiavimuose. Kiekvienas segmento registras aprašo savą 64 K baitų atminties bloką.
Komandų paskirtis ir operandų adresavimas
Komandų paskirtis
Mikroprocesoriaus intel 80×86 komandos DIV, IDIV ir AAD yra aritmetines, tad trumpai aprašysiu jų paskirtį:
DIV – dauguma intel mikroprocesorių turi savas dalybos komandas. Nors ši komanda ne itin greita, už tai komfortabili. Atliekant veiksmą su DIV komanda, atsakymas įrašomas į registrą AX. Iš to išplaukia, kad jis dalijasi pats iš savęs ir daliklis gali būti bet koks binarinis skaičius. Operandu gali būti baitas – žodis, taip pat turėti registro adresą arba registrą. Operandas yra pateiktas 16 baitu formatu, tuomet darom išvadą, jog galima dalyba registrų porose AX:DX. AX registras yra dalmuo, o DX registras dalija dalmenį su liekana. Galima ir kita situacija, AX registrą dalyti iš 8 bitų vertės, nes viskas priklauso nuo santykio AL registre ir likučio AH registre.
IDIV – šita komanda, tai AX registro dalyba iš mažesnio ženklo operando. Iš viso tai išeina, kad dalmens ir daliklio santykis bei komandos veikimas priklauso nuo ženklų skaičiaus binariniais skaičiais. Operandu gali būti baitai arba žodis, turėti ir naudoti registro adresą arba registrą. Kai operandas turi 16 baitų operandą, tuomet galima dalyba tarp registrų porų AX:DX. Registras AX turi dalmens savybę ir DX registras dalyboje nusako liekaną. Galima ir atvirkščia dalyba iš aštuonių bitų vertės, nes viskas priklauso nuo santykio AL registre ir likučio AH registre. Kaip ir DIV, visos tos pačios funkcijos ir IDIV komandos, jokių galimybių, tiesioginis dalinimas iš tiesioginio žodžio. Tokiu atveju galima pirmiausia daliklis į registrą įkelti arba registro adresą iki dalijimo veiksmo.
AAD – ši komanda skaičius BCD verčia į dvejetainius – natūralusis arba reguliarusis dvejetainis-dešimtainis kodas (DDK, angl. BCD – binary coded decimals), dar vadinamas kodu 8421.
Operandų adresavimas
1 lentelė. DIV ir IDIV komandų operandų adresavimai.
Komanda Adresacija
DIV komanda
DIV r8, AL Registrinis
DIV m8, AL Bazinė – indeksinė, šalutinė registrinė, tiesioginė, indeksinė, bazinė
DIV r16, AX Registrinis
DIV m16, AX Bazinė – indeksinė, šalutinė registrinė, tiesioginė, indeksinė, bazinė
IDIV komanda
IDIV r8, AL Registrinis
IDIV m8, AL Bazinė – indeksinė, šalutinė registrinė, tiesioginė, indeksinė, bazinė
IDIV r16, AX Registrinis
IDIV m16, AX Bazinė – indeksinė, šalutinė registrinė, tiesioginė, indeksinė, bazinė
Komandų formatai
2 lentelė. Bendrasis komandos formatas DIV komandai
Kartojimo prefiksas Segmento pakeitimo prefiksas Operacijos kodas (COP) Mod
Reg
R / M Adresas Duomenys
0 0 1 1 2 2
4 baitų ilgis
3 lentelė. Bendrasis komandos formatas IDIV komandai
Kartojimo prefiksas Segmento pakeitimo prefiksas Operacijos kodas (COP) Mod
Reg
R / M Adresas Duomenys
0 0 1 1 2 2
4 baitų ilgis
4 lentelė. Bendrasis komandos formatas AAD komandai
Kartojimo prefiksas Segmento pakeitimo prefiksas Operacijos kodas (COP) Mod
Reg
R / M Adresas Duomenys
0 0 2 0 2 2
6 baitų ilgis
Komandų šešioliktainiai kodai
5 lentelė. Komandų šešioliktainiai kodai
Mnemoninis kodas Šešioliktainiai kodai
DIV komanda
DIV AL,AL (OKB) – F6, (AB) – F0
DIV CL,AL (OKB) – F6, (AB) – F1
DIV DL,AL (OKB) – F6, (AB) – F2
DIV BL,AL (OKB) – F6, (AB) – F3
DIV AH,AL (OKB) – F6, (AB) – F4
DIV CH,AL (OKB) – F6, (AB) – F5
DIV DH,AL (OKB) – F6, (AB) – F6
DIV BH,AL (OKB) – F6, (AB) – F7
DIV [BX+SI],AL (OKB) – F6, (AB) – 30
DIV [BX+DI],AL (OKB) – F6, (AB) – 31
DIV [BP+SI],AL (OKB) – F6, (AB) – 32
DIV [BP+DI],AL (OKB) – F6, (AB) – 33
DIV [SI],AL (OKB) – F6, (AB) – 34
DIV [DI],AL (OKB) – F6, (AB) – 35
DIV disp16,AL (OKB) – F6, (AB) – 36
DIV [BX],AL (OKB) – F6, (AB) – 37
DIV [BX+SI]+disp8,AL (OKB) – F6, (AB) – 70
DIV [BX+DI]+disp8,AL (OKB) – F6, (AB) – 71
DIV [BP+SI]+disp8,AL (OKB) – F6, (AB) – 72
DIV [BP+DI]+disp8,AL (OKB) – F6, (AB) – 73
DIV [SI]+disp8,AL (OKB) – F6, (AB) – 74
DIV [DI]+disp8,AL (OKB) – F6, (AB) – 75
DIV [BP]+disp8,AL (OKB) – F6, (AB) – 76
DIV [BX]+disp8,AL (OKB) – F6, (AB) – 77
DIV [BX+SI]+disp16,AL (OKB) – F6, (AB) – B0
DIV [BX+DI]+disp16,AL (OKB) – F6, (AB) – B1
DIV [BP+SI]+disp16,AL (OKB) – F6, (AB) – B2
DIV [BP+DI]+disp16,AL (OKB) – F6, (AB) – B3
DIV [SI]+disp16,AL (OKB) – F6, (AB) – B4
DIV [DI]+disp16,AL (OKB) – F6, (AB) – B5
DIV [BP]+disp16,AL (OKB) – F6, (AB) – B6
DIV [BX]+disp16,AL (OKB) – F6, (AB) – B7
DIV AX,AX (OKB) – F7, (AB) – F0
DIV CX,AX (OKB) – F7, (AB) – F1
DIV DX,AX (OKB) – F7, (AB) – F2
DIV BX,AX (OKB) – F7, (AB) – F3
DIV SP,AX (OKB) – F7, (AB) – F4
DIV BP,AX (OKB) – F7, (AB) – F5
DIV SI,AX (OKB) – F7, (AB) – F6
DIV DI,AX (OKB) – F7, (AB) – F7
DIV [BX+SI],AX (OKB) – F7, (AB) – 30
DIV [BX+DI],AX (OKB) – F7, (AB) – 31
DIV [BP+SI],AX (OKB) – F7, (AB) – 32
DIV [BP+DI],AX (OKB) – F7, (AB) – 33
DIV [SI],AX (OKB) – F7, (AB) – 34
DIV [DI],AX (OKB) – F7, (AB) – 35
DIV disp16,AX (OKB) – F7, (AB) – 36
DIV [BX],AX (OKB) – F7, (AB) – 37
DIV [BX+SI]+disp8,AX (OKB) – F7, (AB) – 70
DIV [BX+DI]+disp8,AX (OKB) – F7, (AB) – 71
DIV [BP+SI]+disp8,AX (OKB) – F7, (AB) – 72
DIV [BP+DI]+disp8,AX (OKB) – F7, (AB) – 73
DIV [SI]+disp8,AX (OKB) – F7, (AB) – 74
DIV [DI]+disp8,AX (OKB) – F7, (AB) – 75
DIV [BP]+disp8,AX (OKB) – F7, (AB) – 76
DIV [BX]+disp8,AX (OKB) – F7, (AB) – 77
DIV [BX+SI]+disp16,AX (OKB) – F7, (AB) – B0
DIV [BX+DI]+disp16,AX (OKB) – F7, (AB) – B1
DIV [BP+SI]+disp16,AX (OKB) – F7, (AB) – B2
DIV [BP+DI]+disp16,AX (OKB) – F7, (AB) – B3
DIV [SI]+disp16,AX (OKB) – F7, (AB) – B4
DIV [DI]+disp16,AX (OKB) – F7, (AB) – B5
DIV [BP]+disp16,AX (OKB) – F7, (AB) – B6
DIV [BX]+disp16,AX (OKB) – F7, (AB) – B7
IDIV komanda
IDIV AL,AL (OKB) – F6, (AB) – F8
IDIV CL,AL (OKB) – F6, (AB) – F9
IDIV DL,AL (OKB) – F6, (AB) – FA
IDIV BL,AL (OKB) – F6, (AB) – FB
IDIV AH,AL (OKB) – F6, (AB) – FC
IDIV CH,AL (OKB) – F6, (AB) – FD
IDIV DH,AL (OKB) – F6, (AB) – FE
IDIV BH,AL (OKB) – F6, (AB) – FF
IDIV [BX+SI],AL (OKB) – F6, (AB) – 38
IDIV [BX+DI],AL (OKB) – F6, (AB) – 39
IDIV [BP+SI],AL (OKB) – F6, (AB) – 3A
IDIV [BP+DI],AL (OKB) – F6, (AB) – 3B
IDIV [SI],AL (OKB) – F6, (AB) – 3C
IDIV [DI],AL (OKB) – F6, (AB) – 3D
IDIV disp16,AL (OKB) – F6, (AB) – 3E
IDIV [BX],AL (OKB) – F6, (AB) – 3F
IDIV [BX+SI]+disp8,AL (OKB) – F6, (AB) – 78
IDIV [BX+DI]+disp8,AL (OKB) – F6, (AB) – 79
IDIV [BP+SI]+disp8,AL (OKB) – F6, (AB) – 7A
IDIV [BP+DI]+disp8,AL (OKB) – F6, (AB) – 7B
IDIV [SI]+disp8,AL (OKB) – F6, (AB) – 7C
IDIV [DI]+disp8,AL (OKB) – F6, (AB) – 7D
IDIV [BP]+disp8,AL (OKB) – F6, (AB) – 7E
IDIV [BX]+disp8,AL (OKB) – F6, (AB) – 7F
IDIV [BX+SI]+disp16,AL (OKB) – F6, (AB) – B8
IDIV [BX+DI]+disp16,AL (OKB) – F6, (AB) – B9
IDIV [BP+SI]+disp16,AL (OKB) – F6, (AB) – BA
IDIV [BP+DI]+disp16,AL (OKB) – F6, (AB) – BB
IDIV [SI]+disp16,AL (OKB) – F6, (AB) – BC
IDIV [DI]+disp16,AL (OKB) – F6, (AB) – BD
IDIV [BP]+disp16,AL (OKB) – F6, (AB) – BE
IDIV [BX]+disp16,AL (OKB) – F6, (AB) – BF
IDIV AX,AX (OKB) – F7, (AB) – F8
DIV CX,AX (OKB) – F7, (AB) – F9
DIV DX,AX (OKB) – F7, (AB) – FA
DIV BX,AX (OKB) – F7, (AB) – FB
DIV SP,AX (OKB) – F7, (AB) – FC
DIV BP,AX (OKB) – F7, (AB) – FD
DIV SI,AX (OKB) – F7, (AB) – FE
DIV DI,AX (OKB) – F7, (AB) – FF
IDIV [BX+SI],AX (OKB) – F7, (AB) – 38
IDIV [BX+DI],AX (OKB) – F7, (AB) – 39
IDIV [BP+SI],AX (OKB) – F7, (AB) – 3A
IDIV [BP+DI],AX (OKB) – F7, (AB) – 3B
IDIV [SI],AX (OKB) – F7, (AB) – 3C
IDIV [DI],AX (OKB) – F7, (AB) – 3D
IDIV disp16,AX (OKB) – F7, (AB) – 3E
IDIV [BX],AX (OKB) – F7, (AB) – 3F
IDIV [BX+SI]+disp8,AX (OKB) – F7, (AB) – 78
IDIV [BX+DI]+disp8,AX (OKB) – F7, (AB) – 79
IDIV [BP+SI]+disp8,AX (OKB) – F7, (AB) – 7A
IDIV [BP+DI]+disp8,AX (OKB) – F7, (AB) – 7B
IDIV [SI]+disp8,AX (OKB) – F7, (AB) – 7C
IDIV [DI]+disp8,AX (OKB) – F7, (AB) – 7D
IDIV [BP]+disp8,AX (OKB) – F7, (AB) – 7E
IDIV [BX]+disp8,AX (OKB) – F7, (AB) – 7F
IDIV [BX+SI]+disp16,AX (OKB) – F7, (AB) – B8
IDIV [BX+DI]+disp16,AX (OKB) – F7, (AB) – B9
IDIV [BP+SI]+disp16,AX (OKB) – F7, (AB) – BA
IDIV [BP+DI]+disp16,AX (OKB) – F7, (AB) – BB
IDIV [SI]+disp16,AX (OKB) – F7, (AB) – BC
IDIV [DI]+disp16,AX (OKB) – F7, (AB) – BD
IDIV [BP]+disp16,AX (OKB) – F7, (AB) – BE
IDIV [BX]+disp16,AX (OKB) – F7, (AB) – BF
AAD komanda
AAD D50A
Eksperimentinė dalis
-A100
1374:0100 MOV AX,30 AX registrui priskiriame dalmenį
1374:0103 MOV BL,3 BL registrui priskiriame daliklį
1374:0105 DIV BL Dalybos veiksmas
1374:0107
-RIP
IP 0107
:100
-T Žingsnio režimu stebime vykdymą
AX=0030 BX=0010 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1374 ES=1374 SS=1374 CS=1374 IP=0103 NV UP EI PL NZ NA PO NC
1374:0103 B303 MOV BL,03
-T Žingsnio režimu stebime vykdymą
AX=0030 BX=0003 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1374 ES=1374 SS=1374 CS=1374 IP=0105 NV UP EI PL NZ NA PO NC
1374:0105 F6F3 DIV BL
-T Gautas rezultatas AX registre
AX=0010 BX=0003 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1374 ES=1374 SS=1374 CS=1374 IP=0107 NV UP EI PL NZ NA PO NC
-A100
1374:0100 MOV AX,40 AX registrui priskiriame dalmenį
1374:0103 MOV BL,4 BL registrui priskiriame daliklį
1374:0105 IDIV BL Dalybos veiksmas
1374:0107
-RIP
IP 0107
:100
-T Žingsnio režimu stebime vykdymą
AX=0040 BX=0003 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1374 ES=1374 SS=1374 CS=1374 IP=0103 NV UP EI PL NZ NA PO NC
1374:0103 B304 MOV BL,04
-T Žingsnio režimu stebime vykdymą
AX=0040 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1374 ES=1374 SS=1374 CS=1374 IP=0105 NV UP EI PL NZ NA PO NC
1374:0105 F6FB IDIV BL
-T Gautas rezultatas AX registre
AX=0010 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1374 ES=1374 SS=1374 CS=1374 IP=0107 NV UP EI PL NZ NA PO NC
-A100
1374:0100 MOV AX,0302 AX registrui priskiriama reikšmė
1374:0103 AAD Keitimas į dvejetainius skaičius
1374:0105
-RIP
IP 0107
:100
-T Žingsnio režimu stebime vykdymą
AX=0302 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1374 ES=1374 SS=1374 CS=1374 IP=0103 NV UP EI PL NZ NA PO NC
1374:0103 D50A AAD
-T Gautas rezultatas AX registre
AX=0020 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1374 ES=1374 SS=1374 CS=1374 IP=0105 NV UP EI PL NZ NA PO NC
Apibendrinimas:
Kursinio projekto užduotyje, „Mikroprocesorių intel 80×86 komandų sistemos analizė“ iš analizavau komandų DIV, IDIV ir AAD paskirtį, išnagrinėjau jų formatus, operandų adresavimo būdus bei patikrinau programų veikimą, taikant kompiuterinę programą „Debug“.
Kaip pastebime iš gautų rezultatų, komandos DIV ir IDIV atlieka tą pačią f – ją, tik skiriasi jų šešioliktainiai kodai. Taip pat iš analizavau komandą AAD, kuri šešioliktainius skaičius paverčia į dvejetainius. Atlikęs darbą nustačiau pagrindinius mikroprocesoriaus intel 80×86 techninius parametrus:
Programiškai suderinamas su 8080, turi panašų registrų rinkinį,
Duomenų ilgis išplėstas iki 16 bitų,
6 baitų išankstinio komandų išrinkimo eilė,
Keturi 16 bitų bendrieji registrai,
Keturi 16 bitų adresavimui skirti registrai,
Segmentų registrai,
Adresuojama atmintis – 1 MB,
Tranzistorių skaičius – 29 000 (3 μm),
Dažnis – 4,77 MHZ
Naudota literatūra:
1. J. Stankūnas, A. Gražulevičius “Mokomosios mikroprocesorių sistemos” Vilnius “Technika” 1996
2. A. Gražulevičius “Mikroprocesoriai” Vilnius “Technika” 2000