Tikslai:
- Suprasti komandų struktūrą ir įvairovę.
- Atpažinti skirtingų komandų tipų stipriąsias ir silpnąsias puses.
3. Išnagrinėti bazinio CISC procesoriaus komandų sistemą
Temos studijoms reikalingas laikas: 1,8 val. teorijos;
2 val. savarankiško darbo.
Projektuojant procesorių, pirmiausiai parenkama komandų sistema.
Komandų sistemas galima klasifikuoti pagal šiuos pagrindinius požymius
Ø Operando saugojimo vieta
Ø Operandų tipas ir dydis
Ø Komandoje aiškiai nurodomų operandų skaičius
Ø Operacijų tipai
Vidinės CPU atminties tipas yra pagrindinis skiriamasis požymis. Čia yra 3 alternatyvos: dėklas, kaupiklis ir registrų grupė.
Lentelė 3.1. Pagrindiniai komandų sistemų tipai
Vidinės atminties tipas
|
Pavyzdžiai
|
Aiškiai nurodomas operandų skaičius ALU komandose
|
Rezultato talpinimo vieta
|
Operandų išrinkimo procedūra
|
Dėklas
|
B5500
|
0
|
Dėklas
|
PUSH, POP
|
Kaupiklis
|
PDP-8,Motorola 6809
|
1
|
Kaupiklis
|
Kaupiklio įkrovimas, įrašymas į atmintį (load, store)
|
Registrų grupė
|
IBM 370, DEC VAX
|
2 arba 3
|
Registrai arba atmintis
|
Registrų/atminties įkrovimas, įrašymas (load, store)
|
Procesorius nebūtinai naudoja vieno tipo architektūros komandas. Dažniausiai jame rasime bent dviejų tipų komandas. Pavyzdžiui, Intel 80x86 procesoriai - kaupiklio ir bendrųjų registrų tipo architektūrų junginys. Dėklo architektūroje operandai yra dėklo viršuje, o kaupiklio tipo komandų sistemose vienas iš operandų yra kaupiklyje.
Čia paminėti neišreikšti operandai, t.y. žinoma, kad jie ten yra, ir jokių nuorodų į tai komandoje nėra. Tuo tarpu registrų architektūroje visi operandai aiškiai nurodomi komandoje - tai registrai arba atminties ląstelės. Operandai gali būti imami tiesiai iš atminties arba gali būti pirma įkraunami į registrus, jei to reikalauja komandų specifika.
Lentelė 3.2 Pagrindiniai komandų sistemų tipai. Jų privalumai ir trūkumai
Tipas
|
Privalumai
|
Trūkumai
|
Dėklo
|
Trumpos komandos, kompaktiškas kodas. Paprastas išraiškų paskaičiavimo modelis.
|
Negalimas laisvas išrinkimas iš dėklo, todėl sunku generuoti efektyvų kodą
|
Kaupiklio
|
Komandos gana trumpos. Jos minimizuoja vidinį procesoriaus valdymo įtaisą.
|
Kadangi kaupiklis - laikino saugojimo priemonė, tenka vykdyti nemažai mainų su atmintimi
|
Bendrųjų registrų
|
Paprastas kodo generavimas
|
Visi operandai turi būti įvardyti, todėl komandos ilgesnės
|
Pirmieji kompiuteriai (įskaitant UNIVAC 1, EDSAC) buvo kaupiklio tipo. Pirmasis bendrosios paskirties registrų tipo kompiuteris buvo Pegasus (Ferranti, 1956 m.). Jame buvo 8 bendrosios paskirties registrai. Šie registrai buvo įkraunami, persiunčiant duomenų bloką iš būgno. Registro R0 turinys visuomet buvo lygus 0.
Pastaruoju metu vyrauja bendrosios paskirties registrų tipo architektūra.Tai paaiškinama tuo, kad:
Ø Registrai, kaip ir kiti CPU mazgai, greitesni, nei atmintis;
Ø Kompiliatoriai juos panaudoja kodo generavimui efektyviau, nei kitas vidines CPU atminties formas (pvz., dėklą);
Ø Saugant operandus ir tarpinius rezultatus registruose, sumažėja kreipinių į atmintį skaičius, tuo atlaisvinant ją kitiems tikslams (pvz., įvedimui ar išvedimui);
Ø Generuojamas kompaktiškesnis kodas, nes registrams nurodyti reikia mažiau vietos.
Yra dvi pagrindinės charakteristikos, kurios skiria bendrosios paskirties registrų architektūras:
Ø aritmetinių komandų operandų skaičius - 2 ar 3; pirmu atveju rezultatas talpinamas į vieno iš operandų vietą);
Ø kiek operandų komandoje gali būti atmintyje; šis skaičius gali būti nuo 0 iki 3.
Lentelė 3.3. Pagrindiniai komandų sistemų tipai. Adresų ir operandų skaičius
Atminties adresų skaičius
tipinėje ALU komandoje
|
Maksimalus operandų
skaičius
|
Pavyzdžiai
|
0
|
2
3 |
IBM RT-PC
SPARC, MIPS |
1
|
2
3 |
MC68000, dalis IBM 360
dalis IBM 360 (RS) |
2
|
2
3 |
PDP-11,
dalis IBM 360 (SS)
|
3
|
3
|
VAX
|
Taigi, yra 7 galimos kombinacijos. Trys iš jų būdingesnės ir naudojamos klasifikuojant daugumą egzistuojančių kompiuterių:
Ø registras-registras,
Ø registras-atmintis,
Ø atmintis-atmintis.
Lentelė 3.4. Pagrindiniai komandų tipai.
Tipas
|
Privalumai
|
Trūkumai
|
Registras-registras(0,3)
|
Paprastos, fiksuoto ilgio komandos. Paprastas kodo generavimo modelis. Komandų vykdymo trukmė maždaug vienoda
|
Didesnis komandų skaičius programoje. Trumpų komandų kodavimas perteklinis
|
Registras-atmintis(1,2)
|
Duomenis galima panaudoti be išankstinio jų įkrovimo į registrus. Komandų formatai nesudėtingi, pakankamai kompaktiškas kodas
|
Operandai ne ekvivalentiški. Vienas iš šaltinių pakeičiamas rezultatu, todėl jis prarandamas. Komandų vykdymo trukmė priklauso nuo operandų vietos
|
Atmintis-atmintis(3,3)
|
Kompaktiškiausia programa. Nereikia registrų tarpiniams rezultatams saugoti
|
Labai įvairus komandų ilgis, ypač 3 operandų komandų. Daug kreipinių į atmintį, todėl ji labai apkrauta
|
Jei komandoje nėra nė vieno adreso, reiškia, kad abu operandai turi būti iš anksto sutartoje vietoje. Paprastai tai būna dvi "viršutinės" dėklo ląstelės, todėl 0 adresų kompiuteris dar vadinamas dėklo tipo architektūros kompiuteriu.
Šios temos tikslas -išmokti programavimo asembleriu principų.
Siekdami šio tikslo, Jūs turėsite susipažinti su MP 8080 komandų formatais, adresavimo režimais, komandų sistema, išmokti asemblerio sintaksės ir įgyti programų sudarymo įgūdžių.
3.2.1. Mikroprocesoriaus komandų formatai
MP 8080 naudojami 1-o, 2-jų, 3-jų baitų komandų formatai. Operacijos kodui skiriama nuo 2 iki 8 vieno baito skilčių. Vieno baito komandose be operacijos kodo gali būti nurodyti:
Ø bendros paskirties registrų adresai,
Ø registrų poros adresas,
Ø nukreipimo sąlygos kodas.
Dviejų baitų komandų antruose baituose teikiami betarpiški operandai, dalyvaujantys operacijose arba įvesties – išvesties prievadų adresai.
Trijų baitų formatuose antras ir trečias komandų baitai skirti operatyviosios atmintinės ląstelės adresui nurodyti.
3.2.3. Asemblerio sintaksė
Bet kokia programa kompiuteriui vykdoma tik pervedus ją į mašininių kodų kalbą.
Programos tekstas mašinos kalba vadinamas objektine programa. Artimiausias mašininių
kodų kalbai yra asembleris. Jame kiekviena kompiuterio komanda užrašoma simboliniais
kodais.
Asemblerio komandos aprašą sudaro 4 dalys:
Ø Žymė - vardas, vartojamas komandos adresui žymėti
Ø Operacijos kodas - simbolinis operacijos pavadinimas
Ø Operandas - duomens adresas arba pats duomuo, su kuriuo atliekama operacija
Ø Komentarai - informacija, kuria programuotojas paaiškina operacijas.
Asemblerio skyrikliai:
Ø : - po žymės
Ø - - tarpas tarp operacijos kodo ir operando
Ø , - tarp operandų
Ø ; - prieš komentarus.
Komandų sistemą sudaro šios komandų grupės:
Ø aritmetinės loginės,
Ø 16 bitų duomenų apdorojimo,
Ø 8 bitų duomenų siuntimo,
Ø nukreipimo (duomenų srautų valdymo),
Ø kreiptis į paprogramę,
Ø grįžimo iš paprogramės,
Ø pagalbinės.
Pilna komandų lentelė su paaiškinimais yra priede A.
Žymenys ir santrumpos
Aprašant komandų sistemą, vartojami šie žymenys ir santrumpos:
Ø ADR - 16 bitų duomenų arba komandos adresas (ADRH, ADRL);
Ø D8 - 8 bitų duomenys;
Ø D16 - 16 bitų duomenys (D16H, D16L);
Ø PORT - 8 bitų prievado adresas;
Ø OP - viena iš galimų operacijų;
Ø R, Rl, R2 - vienas iš galimų 8 skilčių registrų;
Ø M [ ]- atmintinės ląstelė; laužtiniuose skliaustuose nurodomas jo adresas [ADR] ar registrų pora [RP], kurioje yra ląstelė adresas;
Ø RP - registrų pora: RP1 - pirmasis poros registras, pavyzdžiui, vienas
iš registrų B, D ar H, RP2 - antrasis - C, E ar L;
iš registrų B, D ar H, RP2 - antrasis - C, E ar L;
Ø SP - 16 skilčių dėklo rodyklė (SPH, SPL)
Siuntimo komandos
Šios grupės komandos naudojamos duomenims persiųsti tarp registrų arba tarp registrų ir atmintinės. Požymiai nekinta.
MOV (Move) - naudojama duomenims persiųsti;MOV R1, R2 ; R1 ← R2,
MOV R, M ; R ← M[HL],
MOV M, R ; M[HL] ← R.
Tuo pat metu abu operandai negali būti atmintinėje (M), t.y. duomenų negalima persiųsti tarp dviejų atmintinės ląstelių.
MVI (Movė immediate) - naudojama tiesioginiam operandui (antram komandos baitui) siųsti į registrą arba atmintinę; adresuojama tiesioginiu operandu (mnemonikoje tai rodo raidė I -iš angl. immediate):
MVI R, D8 ; R ← D8,
MVI M, D8 ; M[HL] ← D8.
LDA (Load accumulator direct) - naudojama atmintinės ląstelės, kurios adresas nurodytas antrame ir trečiame komandos baituose, turiniui siųsti į kaupiklį A (tiesioginis adresavimas):
LDA ADR ; A ← M[ADR].
STA (Store accumulator direct) - naudojama registro A turiniui įrašyti į atmintinės ląstelę, kurios adresas nurodytas antrame ir trečiame komandos baituose:
STA ADR ; M[ADR] ← A
LDAX (Load accumulator indirect) - naudojama atmintinės ląstelės, kurios adresą nurodo registrų poros BC ar DE, turiniui siųsti į registrą A (šalutinis - registrinis adresavimas):
LDAX RP ; A ← M[RP].
STAX (Store accumulator indirect) - naudojama kaupiančiojo registro A turiniui įrašyti į atmintinės ląstelę, kurios adresą nurodo registrų poros BC ar DE:
STAX RP ; M[RP] ← A.
Dviejų baitų operandų komandos
LXI (Load register pair immediate) - naudojama tiesioginiam operandui (antram ir trečiam komandos baitui) siųsti į nurodytą registrų porą:
LXI RP,D16 ; RP1← D16H, RP2 ← D16L.
XCHG (Exchange HL with DE) - naudojama registrų porų HL ir DE turiniams sukeisti.
Aritmetinės komandos
Visoms pagrindinėms šios grupės komandoms būdinga tai, kad pirmasis operandas išrenkamas iš kaupiklio, 2-asis-iš bendrojo registro, atmintinės ląstelės ar 2-ojo komandos baito. Operacijos rezultatas lieka kaupiklyje.
Pvz.: Komanda ADD M prisumuoja prie kaupiklio turinio atmintinės ląstelės turinį. Komandoje naudojamas neaiškiai išreikštas adresavimo režimas. Į atmintinę kreipiamasi tuo adresu, kuris yra HL registrų poroje. Šios grupės komandos keičia žymes.
ADD (Add\ ADI (Add immediate) - naudojama sudėti vieno baito operandams arba žemiausiems baitams, jei operandai yra kelių baitų:
ADD R ; A←A+R,
ADD M ; A←A+M[HL],
ADI D8 ; A←A+D8.
Komanda ADD A padvigubina registro A turinį - tai atitinka loginį postūmį į kairę per vieną skiltį.
ADC (Add with Carry), - analogiška ADD, tik prie žemiausios skilties pridedama požymio C Y reikšmė. Ši komanda naudojama kelių baitų ilgio operandams, antram ir tolesniems baitams sudėti:
ADC R ; A←A+R+CY,
ADC M ; A←A+M[HL]+CY,
ACI D8 ; A←A+D8+CY.
SUB (Subtract) \ SUI(Subtract immediate) - naudojama operandui (R, M, D8) atimti (sudėti papildomuoju kodu) iš registro A turinio.
Atmintinės operacijoje kitaip formuojamas požymis CY. Jis įgauna kėlimo signalo iš aukščiausios skilties inversinę reikšmę. Todėl, jei CY=O, tai rodo, kad rezultatas yra teigiamas, o CY=1 rodo, kad rezultatas neigiamas ir yra pateiktas papildomu kodu.
Požymio C Y formavimu ir skiriasi ši operacija nuo ADD. Pavyzdžiui, sudedant 12 ir (-15) rezultatas bus (-3) ir C = O, nes vieneto perkelti nereikėjo. Tačiau, jei iš 12 atimsime 15, rezultatas taip pat bus ( -3), bet CY=1.
SUB R ; A ← A -R,
SUB M ; A ← r A-M[HL],
SUI D8 ; A ← r A-D8.
Komandą SUB A galima naudoti registro A turiniui ištrinti ir CY nuslopinti.
SBB (Subtract with borrow), SBI - atimti, atsižvelgiant į skolintinę pernašą CY (atmintinės operacijoje požymis C Y vadinamas paskola). Požymio bitas C Y pridedamas prie operando, o šis po to atimamas iš registro A. Požymis C Y formuojamas kaip ir operacijoje SUB. Ši komanda naudojama veiksmams su kelių baitų ilgio operandais:
SBB R ; A ← A -(R+CY),
SBB M ; A ← A - (M[HL]+Cy),
SBI D8 ; A ← A-(D8+CY).
Loginės komandos
ANA (And), ANI - naudojama registro A turiniui ir operandui logiškai sudauginti:
ANA R ; A ← AVR
ANA R ; A ← AVR
ANA M ; A ← AVM[HL],
ANI D8 ; A ← AVD8.
Komanda ANA A nustato CY=0, išsaugodama registro A turinį.
ORA (Or), ORI - naudojama registro A turiniui ir operandui logiškai sudėti, kai reikia įrašyti vienetus į bitų grupę.
ORA R ; A ← R
ORA M ; A ← AVM[HL],
ORI D8 ; A ← AVD8.
Komanda ORA A, kaip ir ANA A, nustato CY=0, išsaugodama registro A turinį. XRA (Exclusive OR), XRI - naudojama registro A turiniui ir operandui sudėti moduliu 2.
• Nagrinėkite kitas šios grupės komandas ir bandykite nustatyti, kokie jų rezultatai.
Kaip ištrinti registrų turinius?
Moduliu 2 sudedant operandą su tuo pačiu operandu gaunamas nulis. Todėl XRA A galima naudoti registro A turiniui ištrinti ir požymiui CY slopinti. Pavyzdžiui, registrų A, B ir C turiniams ištrinti naudojamos komandos:
XRA A
MOV B, A
MOV C, A
Jei registre A yra skaičius OFFH (visi vienetai), tai, įvykdžius komandą XRA B, registre A bus registro B turinio inversija.
Dviejų baitų duomenų apdorojimo komandos
Šios grupės komandos skirtos dviejų baitų duomenims persiųsti ar sukeisti. Mnemonikoje raidė X (eXtended) parodo, kad būtent kalba eina apie dviejų baitų duomenis.
LXI RP, B3B2 ; RP ← [B3], [B2]
Šiai grupei priskiriamos ir komandos įkeliančios registrų porų turinius į dėklą (PUSH) bei atstatančios iš dėklo registrų porų turinius (POP).
PUSH RP ; {SP-1} ← [RP1]; [SP-2] ← [RP2] POP RP ; [RP]1 ← [SP-1]; [RP2] ← [SP-2 ]
Sulyginimo komandos
CMP (Compare CPI) - naudojama registro A turiniui ir operandui palyginti. Palyginama atimant, bet rezultatas niekur neįrašomas, o formuojamos tik požymių reikšmės. Požymis Z=l, jei abu dydžiai lygūs; požymis OI, jei nėra kėlimo signalo iš aukščiausios skilties (formuojamas kaip ir komandojeSUB)Jis rodo, kad registre A yra mažesnis dydis. Kaip formuojamos žymės, matome iš šio pavyzdžio: Registre A saugomas kodas 74H. Vykdant komandą CPI su skirtingais operandais , formuojamos tokios žymės:
CPI 74H ;C = 0, Z 1
CPI 23H ;C =0,Z0
CPI Al C =1, Z =0
Nukreipimo ir kreiptis į paprogrames komandos
Šios komandos keičia įprastinę komandų vykdymo tvarką.
Nukreipimo komandos JMP (jump) naudojamos skaičiavimų eigai nukreipti
Besąlyginio nukreipimo komandos pakeičia komandų skaitiklio turinį (įrašo naują reikšmę iš antrojo ir trečiojo komandos baito).
JMP B3:B2 ; PC ← [B3], [B2]
Sąlyginio nukreipimo komandos pakeičia komandų skaitiklio turinį (įrašo naują reikšmę iš antrojo ir trečiojo komandos baito), jei nukreipimo sąlyga įvykdyta. Priešingu atveju komandų skaitiklio turinys didinamas, kaip ir vykdant apdorojimo ar pan. komandas, pvz.:.
JNZ B3:B2 ; PC ← [B3], {B2], jei Z =0
Nukreipimas gali būti vykdomas pagal visas F registre formuojamas žymes C, Z, P, S (tiek atsižvelgiant į jų būvimą, tiek nebūvimą. Žr. Komandų lentelę.
Kreiptis į paprogrames komandos CALL (Call) t.p. nukreipia skaičiavimų eigą ir papildomai
įrašo į dėklą komandų skaitiklio turinį.
CALL B3:B2 ; [SP-1] [SP-2] ← PC ; PC <-[B3], {B2];
Besąlyginės kreipties į paprogramę komandos pakeičia komandų skaitiklio turinį (įrašo naują reikšmę iš antrojo ir trečiojo komandos baito) bei įsimena dėkle komandų skaitiklio PC turinį. Tą būtina padaryti, nes įvykdžius paprogramę būtina sugrįžti į nutrauktą programos vietą ir pratęsti jos darbą.
Sąlyginės nukreipimo ir kreiptis į paprogrames komandos keičia komandų skaitiklio
parodymą, tik esant įvykdytai t.t. sąlygai.
CC B3:B2 ; PC [B3], {B2], jei C =1
Išsaugotą komandų skaitiklio turinį panaudoja grįžimo iš paprogramės komanda RET.
RET ; PC←SP
RET komanda yra vieno baito beadresinė besąlyginė komanda, atstatanti iš dėklo komandų skaitiklio turini. Ja paprasta užbaigiamos paprogramės.
Panašiai, kaip nukreipimo ir kreipties į paprogrames RET komandos t.p. gali būti sąlyginės. Sąlygos formuojamos pagal tas pačias F registro žymes.
RC B3:B2 ; PC← SP, jei C =1
Sąlyginės grįžimo iš paprogramės komandos grįžimą į programą vykdo, tik sąlygos pagal atitinkamą žymę fiksavimo atveju.
Tikslai:
1. Suprasti adresavimo režimų įvairovę
2. Atskirti, kokie adresavimo režimai taikomi komandose.
Temos studijoms reikalingas laikas: 0,2 val. teorijos;
Tradiciškai taip susiklostė, kad CISC architektūros procesoriuose taikomi įvairūs ir gana sudėtingi adresavimo režimai.
Tais laikais, kai buvo projektuojami pirmieji mikroprocesoriai, vidinės atmintinės buvo palyginti brangios, todėl projektuotojai stengėsi kurti tokias komandų sistemas, kuriose komandos užimtų mažai vietos atmintinėje.
Komandos buvo kuriamos taip, kad vartotojas galėtų jas taikyti programoje įvairiai, lanksčiai. Kaip matysite vėliau ypač komandų lankstumas ištobulintas nuo I8086 procesoriaus. Deja, tada priimti sprendimai yra tikras „galvos skausmas šiuolaikinių procesorių projektuotojams...
Šio mikroprocesoriaus komandose yra naudojami tokie adresavimo režimai:
Ø tiesioginis registrinis,
Ø šalutinis registrinis,
Ø neaiškiai išreikštas,
Ø tiesioginis,
Ø betarpiško operando,
Ø dėklo.
Sudėtingi adresavimo režimai leidžia naudoti trumpesnius komandų formatus.
Tiesioginio registrinio adresavimo režimo atveju komandoje nurodomas registras iš kurio išrenkamas operandas.
Komandų pavyzdžiai:
ADD B; ORA C; MOV C, D;
Šalutinio registrinio adresavimo režimo atveju komandoje nurodoma registrų pora, kurioje saugomas atmintinės ląstelės, į kurią kreipiamasi, adresas.
Komandų pavyzdžiai:
ADD B; ORA C; MOV C, D;
Neaiškiai išreikšto adresavimo atveju komandos adresinėje dalyje įrašyta raidė M reiškia kreiptį į atmintine (Memory). Pagal susitarimą kreiptis vykdoma tuo adresu, kuris saugomas registrų poroje HL.
Komandų pavyzdžiai:
ADD M; ORA M; MOV C, M; MOV M, B.
Esant tiesioginiam adresavimo režimui, komandoje tiesiogiai nurodomas operatyviosios atmintinės ląstelės, iš kurios turi būti išrinktas operandas, adresas, gali būti adresas siunčiamas į registrų porą.
Komandų pavyzdžiai:
STA 00 85H; LDA 00 84H ; LXI H 00 83H;
Betarpiško adresavimo režimo atveju, pats operandas pateikiamas antrajame komandos baite.
Komandų pavyzdžiai:
ADI 38H; ORI A6 H; MVI C, BB H;
Dėklinio adresavimo režimo atveju į atmintinę kreipiamasi dėklo viršūnės registre saugomu adresu.
Komandų pavyzdžiai:
PUSH D; POP B.
Tikslai:
1. Suprasti programų rengimo principus.
2. Įgyti programų rengimo įgūdžių.
3. Žinoti algoritmų rengimo principus.
Temos studijoms reikalingas laikas: 1,8 val. teorijos;
10 val. praktika;
8 val. savarankiško darbo.
Programos kuriamos pagal užduoties reikalavimus.
Sudarant nesudėtingas programas, rašoma nuosekli komandų seka pagal užduoties sąlygą. Jei uždavinys sudėtingesnis, tikslinga sudaryti programos algoritmą.
Kai reikia apdoroti masyvų duomenis, rašomos ciklinės programos.
Išnagrinėkite pateiktų programų pavyzdžius:
- Logiškai sudėti registrų B, C ir D turinius , o gautą rezultatą įrašyti į 8600 atminties ląstelę.
Adresas
|
Mašininis kodas
|
Asembleriokomanda
|
Komentaras
|
8200
|
MOV A, B
|
; registro B turinį persiųsti į A
| |
8201
|
ORA C
|
; logiškai pridėti C registro turinį
| |
8202
|
ORA D
|
; logiškai pridėti D registro turinį
| |
8203
|
STA 00 86
|
; registro A turinį nusiųsti adresu 8600
| |
8206
|
RST 8
|
; užbaigti programos darbą
|
- Susumuoti atmintinės ląstelių 8400, 8401 ir 8402 turinius , o gautą rezultatą įrašyti į 8500 atmintinės ląstelę.
Adresas
|
Mašininis kodas
|
Asembleriokomanda
|
Komentaras
|
8200
|
LXI H 00 84
|
; adresą 8400 nusiųsti į registrų porą HL
| |
8203
|
MOV A, M
|
; 8400 ląstelės turinį persiųsti į registrą A
| |
8204
|
INX H
|
; adresą HL poroje padidinti vienetu
| |
8205
|
ADD M
|
; prie A registro turinio prisumuoti 8401 ląstelės turinį
| |
8206
|
INX H
|
; adresą HL poroje padidinti vienetu
| |
8207
|
ADD M
|
; prie A registro turinio prisumuoti 8402 ląstelės turinį
| |
8208
|
STA 00 85
|
; registro A turinį nusiųsti adresu 8500
| |
820B
|
RST 8
|
; užbaigti programos darbą
|
- Sudaryti programą skaičių sumai rasti: sekos ilgis nurodytas ląstelėse 0040 ir 0041, seka prasideda nuo ląstelės 0042H, rezultatas ne didesnis kaip 255 ir įrašomas į ląstelę 0050H.
Adresas
|
Mašininis kodas
|
Asembleriokomanda
|
Komentaras
|
040
|
DUOM
|
EQU 0042H
| |
041
|
REZ
|
EQU 0050H
| |
100
|
XRA A
|
; ištrinti seną registro turinį
| |
101
|
LXI H, DUOM
|
; siųsti sekos ilgio adresą į registrus HL
| |
104
|
MOV B, M
|
; B registre formuoti sekos skaitiklį
| |
105
|
INXH
|
; padidinti adresą
| |
106
|
SUMD:
|
ADD M
|
; pridėti operandą
|
107
|
DCR B
|
; sumažinti sekos ilgį
| |
108
|
JNZ SUMD
|
; kartoti, jei ne visa seka
| |
10B
|
STA REZ
|
; įrašyti rezultatą
| |
10E
|
END
|
Tam, kad gerai suprasti programiškai valdomą duomenų apdorojimą, užpildykite lentelę, nurodydami joje, kaip keičiasi programinio modelio registrų bei atmintinės ląstelių turiniai, vykdant atskiras programos komandas. Įrašyti registrų turinius, po nurodytos komandos įvykdymo).
PC
|
RG A
|
RG B
|
RG H
|
RG L
|
RG F
|
Atmintinė (duomenys, rezultatai)
Adresas
|
Ląstelės turinys
|
Dėmesio !
Simbolinėje programoje galima nenaudoti tikrųjų adresų. Ląstelei 40H suteikiamas simbolinis adresas DUOM. Dirbant su konkrečiu kompiuteriu ar programų derinimo stendu, pagal dokumentaciją nustatomi leistini konkretūs adresai.
Dirbant su programų derinimo stendais asembleriu parašyta programa iš karto koduojama mašininiais kodais, todėl makrokomandos nenaudojamos.
Atskirų tipų programų rengimo principai aptarti laboratorinių darbų teorinėje dalyje.
Algoritmu vadinama baigtinė nuoseklių veiksmų seka, kurią procesorius turi atlikti su pradiniais duomenimis, kad gautų uždavinio sprendinį.
Parašyti sudėtingos programos tekstą iš karto, dažniausiai nelengva. Pirmiausia būtina sukurti uždavinio sprendimo algoritmą. Priklausomai nuo to, kas sprendžia uždavinį (kas yra uždavinio sprendimo procesorius), algoritmas gali būti pateikiamas įvairiai: - kompiuterio mikroprocesoriui algoritmą reikia pateikti mašinine kalba (dvejetainis, aštuntainis arba šešioliktainis kodai), nes tik tokią kalbą supranta mikroprocesorius; - žmogui, esančiam procesoriaus vaidmenyje, algoritmą galima pateikti daugelyje formų: -teksto forma, t.y., programos , parašytos pseudo kodu, arba bet kuria, algoritmine kalba (paskalis, C++, asembleris, mašininė kalba); -grafine forma, t.y., blok-schemos pavidalu.
Pirmiausia išsiaiškinkime, kodėl pradėjom kalbėti apie žmogų kaip procesorių. Reikia priminti, kad kompiuteris pats dar nėra išsprendęs nei vieno uždavinio, o sprendžia uždavinį tik tuomet, kai žmogus sudaro to uždavinio sprendimo ALGORITMĄ ir jį užkoduoja (parašo programą) taip, kad būtų “aišku” kompiuteriui. Taigi, žmogus paprastai k u r i a uždavinio sprendimo algoritmą, o kompiuteris tik v y k d o sukurtą ir patikrintą algoritmą.
Kūrimo ir tikrinimo procese naudotina informatyviausia - grafinė algoritmo forma, pvz., algoritmo blokinė schema.
Algoritmo blokinės schemos elementai
Atskirus algoritmo veiksmus (veiksmų grupes) grafiškai priimta vaizduoti skirtingomis geometrinėmis figūromis vadinamomis blokais. Projektuojant arba analizuojant algoritmo blok-schemą nustatoma sprendimo proceso valdymo perdavimo, iš vieno bloko į kitą, tvarka.
Kiekvienam algoritmui privalu turėti pradžios ir pabaigos blokus. Valdymo procesas prasideda PRADŽIOS bloke , nuosekliai praeina visus algoritmo blokus ir baigiasi PABAIGOS bloke. Priimta tuos blokus vaizduoti tam tikrų matmenų ovalais, su juose įrašytais žodžiais PRADŽIA ir PABAIGA (kaip parodyta pav.1).
Kiekvieną bloką rėminanti linija kairiajame viršutiniame kampe privalo būti trūki, čia įrašomas bloko numeris. Visi blokai numeruojami pradedant pradžios ir baigiant pabaigos bloku. PASTABA. Kadangi PRADŽIOS ir PABAIGOS blokai yra unikalūs, tai jų numeracija nebūtina. Paprastai sprendimą (algoritmą) sudaro nuosekli veiksmų kompozicija, todėl pageidautina ir blokus numeruoti pagal valdymo perdavimo eigą.
Nesudėtingame algoritme, kai jo blokinė schema telpa į vieną lapą, blokus numeruojame sveikais skaičiais. Jeigu algoritmas sudėtingas ir jam pavaizduoti reikia kelių lapų, tai bloko numeracija gali turėti kelias dalis, atskirtas taškais: pvz. -2.12 (lapo numeris.bloko numeris). Santakos blokus (paprastai tai atitinkamo spindulio apskritimai, kurių viduje nurodytas vardas) įvardinti taip pat galima skaičiais, bet galima ir raidėmis. Pav. 1.
Algoritmo blokinės schemos grafinio vaizdavimo elementai
Aritmetinių ir loginių veiksmų blokas vaizduojamas stačiakampiu, su jame įrašytais aritmetinių (loginių) išraiškų sakiniais (pav.1. -2 blokas). Sąlygos tikrinimo blokui vaizduoti naudojama rombo forma (4-blokas) , jo viduje įrašoma tikrinama sąlyga. Informacijos įvedimo/išvedimo blokui panaudota lygiagretainio forma, kur įvedami/išvedami duomenys užrašomi skliaustuose. Įvedimo bloko kairiojoje pusėje įrašomas požymis IN, išvedimo bloke-požymis OUT (8-BLOKAS).
Kreipimosi į paprogramę blokas turi stačiakampio su dvigubom šoninėm linijom formą, jame nurodoma, kuriai paprogramei bus perduodamas valdymas. Visi algoritmo blokai tarpusavyje sujungiami taip vadinamomis valdymo linijomis, kurios gali būti tik vertikalios arba tikhorizontalios.Valdymo krypčiai nurodyti valdymo linijos užsibaigia rodyklėmis.
PASTABA. Jeigu valdymas perduodamas į dešinę arba žemyn, linijos gale rodyklės nebūtinos. Išskyrus blokus, kuriuose vienaip ar kitaip tikrinama sąlyga, valdymo linijos į bloką patenka tik iš viršaus, išeina tik iš apačios. Į sąlygos tikrinimo blokus valdymas gali patekti tik iš viršaus, išeiti - tik per šonus. Išimtį sudaro tik FOR ciklo parametro modifikavimo ir sąlygos tikrinimo blokas (pav.1- 5 blokas), kur šalia pagrindinio įėjimo viršuje, kairėje pusėje yra dar modifikuoto parametro įėjimas.
Valdymo linijos gali sueiti į vieną vietą, ji žymima apskritimu ir vadinama santakos bloku. Apskritimo viduje gali būti nurodyta santakos žymė (pav1.-α). Į santaką valdymo linijos gali įeiti ir išeiti iš bet kurios pusės, tačiau keliama sąlyga-įėjimai gali būti keli, išėjimas tik vienas. Kai algoritmo schema gaunasi sudėtinga, neįmanoma išvengti valdymo linijų kryžiavimosi, tenka linijas nutraukti. Nutraukimo vietose dedamos ŽYMĖS, rodančios iš kur ateina nutrauktoji linija (iš kurio bloko) ir kur ji nueina toliau (į kurį bloką) (pav1. -6 ir 7 blokai).
Kas vadinama ir nuo ko priklauso procesoriaus adresavimo erdvė?
1. Ką nusako procesoriaus skilčių skaičius?
2. Iš kokių dalių sudaryta procesoriaus komanda?
3. Kas vadinama operandu?
4. Kas yra ir kam reikalingas adresavimas?
5. Kokia loginė operacija vadinama neigimu ( NOT)?
6. Kokia loginė operacija vadinama konjunkcija ( AND)?
7. Kokia loginė operacija vadinama disjunkcija ( OR)?
8. Kokia loginė operacija vadinama i išskirties disjunkcija (XOR)?
9. Ką vadiname įvesties ir išvesties ( I /O) prievadu?
10. Kas vadinama prievado adresu?
11. Kas yra ir kam taikomi prievado registrai?
12. Kurios komandos skirtos tik darbui su prievadais?
13. Ką vadiname programine duomenų įvestimi ir išvestimi?
14. Iš kur išrenkami duomenys ir kur išsaugomi duomenų apdorojimo komandų rezultatai?
15. Kuo kreipties į paprogramę komandos skiriasi nuo paprogramių iškvietimo komandų?
1. Komandų sistemas galima klasifikuoti pagal šiuos pagrindinius požymius: operando saugojimo vieta, operandų tipas ir dydis, komandoje aiškiai nurodomų operandų skaičius, operacijų tipai.
2. Pastaruoju metu vyrauja bendrosios paskirties registrų tipo architektūra..
3. Yra dvi pagrindinės charakteristikos, kurios skiria bendrosios paskirties registrų architektūras: aritmetinių komandų operandų skaičius - 2 ar 3; pirmu atveju rezultatas talpinamas į vieno iš operandų vietą.
4. Pagrindiniai naudojami komandų tipai: registras-registras, registras-atmintis, atmintis-atmintis.
5. Jei komandoje nėra nė vieno adreso, reiškia, kad abu operandai turi būti iš anksto sutartoje vietoje. Paprastai tai būna dvi "viršutinės" dėklo ląstelės, todėl 0 adresų kompiuteris dar vadinamas dėklo tipo architektūros kompiuteriu.
- MP 8080 naudojami 1-o, 2-jų, 3-jų baitų komandų formatai. Operacijos kodui skiriama nuo 2 iki 8 vieno baito skilčių.
- Vieno baito komandose be operacijos kodo gali būti nurodyti: bendros paskirties registrų adresai, registrų poros adresas, nukreipimo sąlygos kodas.
- Dviejų baitų komandų antruose baituose teikiami betarpiški operandai, dalyvaujantys operacijose arba įvesties – išvesties prievadų adresai.
- Trijų baitų formatuose antras ir trečias komandų baitai skirti operatyviosios atmintinės ląstelės adresui nurodyti.
- Mikroprocesoriaus I8080 komandose yra naudojami tokie adresavimo režimai: tiesioginis registrinis, šalutinis registrinis, neaiškiai išreikštas, tiesioginis, betarpiško operando, dėklo.
- Bet kokia programa kompiuteriui vykdoma tik pervedus ją į mašininių kodų kalbą.
- Programos tekstas mašinos kalba vadinamas objektine programa.
- Artimiausias mašininių kodų kalbai yra asembleris.
- I8080 komandų sistemą sudaro šios komandų grupės: aritmetinės loginės, 16 bitų duomenų apdorojimo, 8 bitų duomenų siuntimo, nukreipimo (duomenų srautų valdymo), kreiptis į paprogramę, grįžimo iš paprogramės, pagalbinės.
- 8-ių bitų duomenų persiuntimo komandos grupės komandos naudojamos duomenims persiųsti tarp registrų arba tarp registrų ir atmintinės. Požymiai nekinta. Visoms pagrindinėms šios grupės komandoms būdinga tai, kad pirmasis operandas išrenkamas iš kaupiklio, 2-asis-iš bendrojo registro, atmintinės ląstelės ar 2-ojo komandos baito. Operacijos rezultatas lieka kaupiklyje.
- Dviejų baitų duomenų apdorojimo komandos skirtos dviejų baitų duomenims persiųsti ar sukeisti. Mnemonikoje raidė X (eXtended) parodo, kad būtent kalba eina apie dviejų baitų duomenis.
17. Sulyginimo komandos naudojama registro A turiniui ir operandui palyginti. Palyginama atimant, bet rezultatas niekur neįrašomas, o formuojamos tik požymių reikšmės.
- Nukreipimo ir kreiptis į paprogrames komandos keičia įprastinę komandų vykdymo tvarką.
- Nukreipimo komandos JMP (jump) naudojamos skaičiavimų eigai nukreipti
- Besąlyginio nukreipimo komandos pakeičia komandų skaitiklio turinį (įrašo naują reikšmę iš antrojo ir trečiojo komandos baito).
- Kreiptis į paprogrames komandos CALL (Call) t.p. nukreipia skaičiavimų eigą ir papildomai įrašo į dėklą komandų skaitiklio turinį.
- Besąlyginės kreipties į paprogramę komandos pakeičia komandų skaitiklio turinį (įrašo naują reikšmę iš antrojo ir trečiojo komandos baito) bei įsimena dėkle komandų skaitiklio PC turinį.
- Sąlyginės nukreipimo ir kreiptis į paprogrames komandos keičia komandų skaitiklio
- parodymą, tik esant įvykdytai t.t. sąlygai.
- Sudarant nesudėtingas programas, rašoma nuosekli komandų seka pagal užduoties sąlygą. Jei uždavinys sudėtingesnis, tikslinga sudaryti programos algoritmą.
26. Algoritmu vadinama baigtinė nuoseklių veiksmų seka, kurią procesorius turi atlikti su pradiniais duomenimis, kad gautų uždavinio sprendinį.
27. Kompiuteris pats dar nėra išsprendęs nei vieno uždavinio, o sprendžia uždavinį tik tuomet, kai žmogus sudaro to uždavinio sprendimo ALGORITMĄ ir jį užkoduoja (parašo programą) taip, kad būtų “aišku” kompiuteriui. Taigi, žmogus paprastai k u r i a uždavinio sprendimo algoritmą, o kompiuteris tik v y k d o sukurtą ir patikrintą algoritmą.
28. Atskirus algoritmo veiksmus (veiksmų grupes) grafiškai priimta vaizduoti skirtingomis geometrinėmis figūromis vadinamomis blokais. Projektuojant arba analizuojant algoritmo blok-schemą nustatoma sprendimo proceso valdymo perdavimo, iš vieno bloko į kitą, tvarka.
29. Kiekvienam algoritmui privalu turėti pradžios ir pabaigos blokus. Valdymo procesas prasideda PRADŽIOS bloke , nuosekliai praeina visus algoritmo blokus ir baigiasi PABAIGOS bloke. Priimta tuos blokus vaizduoti tam tikrų matmenų ovalais, su juose įrašytais žodžiais PRADŽIA ir PABAIGA (kaip parodyta pav.1).
30. Kiekvieną bloką rėminanti linija kairiajame viršutiniame kampe privalo būti trūki, čia įrašomas bloko numeris.
31. Visi blokai numeruojami pradedant pradžios ir baigiant pabaigos bloku.
Komentarų nėra:
Rašyti komentarą