2012 m. gruodžio 28 d., penktadienis

3. Komandų sistemos



Tikslai:
  1. Suprasti komandų struktūrą ir įvairovę.
  2. 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į (loadstore)
Registrų grupė
IBM  370, DEC VAX
2 arba 3
Registrai arba atmintis
Registrų/atminties įkrovimas, įrašymas (loadstore)
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ų tipaiJų 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
SPARCMIPS
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.
3.2. MP 8080 Komandų sistema
Š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 (ADRHADRL);
Ø            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;
Ø            SP        - 16 skilčių dėklo rodyklė (SPHSPL)
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 (AddADI (Add immediate) - naudojama sudėti vieno baito operandams arba žemiausiems baitams, jei operandai yra kelių baitų:
                           ADD             R                       AA+R,
                           ADD             M                                           AA+M[HL],
                           ADI              D8                                          ; AA+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                   AA+R+CY,
ADC                                       M                  AA+M[HL]+CY,
ACI                                        D8                 ; AA+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   ←   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                           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 (Callt.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.

3.5. Asemblerio pradmenys
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:
  1. 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ą
  1. 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ą

  1. 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).
3.7. SVK
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.
  1. MP 8080 naudojami 1-o, 2-jų, 3-jų baitų komandų formatai. Operacijos kodui skiriama nuo 2 iki 8 vieno baito skilčių.
  2. Vieno baito komandose be operacijos kodo gali būti nurodyti: bendros paskirties registrų adresai, registrų poros adresas, nukreipimo sąlygos kodas.
  3. Dviejų baitų komandų  antruose  baituose  teikiami  betarpiški  operandai,  dalyvaujantys operacijose arba įvesties – išvesties prievadų adresai.
  4. Trijų baitų formatuose antras ir trečias komandų baitai skirti operatyviosios atmintinės ląstelės adresui nurodyti.
  5. Mikroprocesoriaus I8080 komandose yra naudojami tokie adresavimo režimai: tiesioginis registrinis, šalutinis registrinis, neaiškiai išreikštas, tiesioginis, betarpiško operando, dėklo.
  6. Bet kokia programa kompiuteriui vykdoma tik    pervedus ją į mašininių kodų kalbą.
  7. Programos tekstas mašinos kalba vadinamas objektine programa.
  8. Artimiausias mašininių kodų kalbai yra asembleris.  
  9. 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.
  10. 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.
  11. 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.
  1. Nukreipimo ir kreiptis į paprogrames komandos keičia įprastinę komandų   vykdymo tvarką.
  2. Nukreipimo komandos JMP (jump) naudojamos skaičiavimų eigai nukreipti
  3. Besąlyginio nukreipimo komandos pakeičia komandų skaitiklio turinį (įrašo naują reikšmę iš antrojo ir trečiojo komandos baito).
  4. Kreiptis į paprogrames komandos CALL (Callt.p. nukreipia skaičiavimų eigą ir papildomai įrašo į dėklą komandų skaitiklio turinį.
  5. 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į.
  6. Sąlyginės nukreipimo  ir kreiptis į paprogrames komandos keičia komandų skaitiklio
  7. parodymą, tik esant įvykdytai t.t. sąlygai.
  8. 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ą

Etiketės