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 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ą