Mikroelektronikos gaminių naudojimas įvairiose ūkio šakose

Į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