2013 m. sausio 9 d., trečiadienis

5.3. Mikroprocesoriaus komandų sistema



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;
Ø   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                     ; 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 komandoje SUB)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.

Komentarų nėra:

Rašyti komentarą

Tinklaraščio archyvas

Etiketės