Aeronautica | Comunicatii | Constructii | Electronica | Navigatie | Pompieri | |
Tehnica mecanica |
SETUL DE INSTRUCTIUNI AL mR Z -80 ( II )
1.Obiectul lucrarii
Lucrarea isi propune continuarea prezentarii setului de instructiuni al microprocesorului Z-80. Sunt prezentate grupa instructiunilor de schimb, a transferurilor blocurilor de memorie, a cautarii in blocuri de memorie, precum si cea a operatiilor aritmetico-logice pe 8 biti. Se realizeaza aplicatii cu instructiunile din aceste grupe.
2.Breviar teoretic
III. Grupa instructiunilor de schimb (exchange)
a). EX DE,HL - registri specificati isi schimba intre ei continutul
Simbolic : DE HL
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
EX DE,HL |
0EBh |
Daca DE=1D00h iar HL=0C4Fh EX DE,HL final : DE = 0C4Fh si HL = 1D00h |
b). EX AF,AF' - schimba AF din setul de registri principal cu A' F' din setul secundar de registri.
Simbolic : AF A'F'
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
EX AF,AF' |
08h |
vezi instr. anterioara |
c). EXX - schimba in acelasi timp registri generali din setul principal cu registri corespunzatori din setul secundar.
Simbolic : BC B'C'
DE D'E'
HL H'L'
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
EXX |
D9h |
vezi instr. anterioara |
ObservaTie. Schimbarea setului de registri generali principali cu registri aflati in setul secundar, presupune rularea instructiunilor EX AF,AF' si EXX, fiind singura posibilitate de realizare.
Figura urmatoare prezinta in mod schematizat si unitar transferurile posibile pe 16 biti la microprocesorul Z-80:
d). EX (SP),ss - continutul a doua locatii succesive de stiva se schimba cu sursa dubla pe 16 biti specificata.
Simbolic unde ss I
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
EX (SP),HL |
E3h |
daca SP=100h iar HL=0C4Fh EX (SP),HL final (100h) = 4Fh si (101h) = 0Ch |
||||||||
EX (SP),IX |
DDh E3h |
|||||||||
EX (SP),IY |
FDh E3h |
IV. Grupa instructiunilor pentru mutarea blocurilor de memorie
a). LDI - (load & increment) - incarca si incrementeaza.
Simbolic :
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
LDI |
EDh A0h |
daca avem HL=100h DE=200h, (100h)=0Fh si BC=04h LDI final: (200h)=0Fh HL=101h, DE=201h si BC=03h |
OBSERVATIE. Instructiunea transfera continutul locatiei de memorie adresata de registrul dublu HL, in locatia de memorie adresata de registrul dublu DE. Cei doi registri dubli se incrementeaza in vederea unui transfer ulterior. Registrul BC se decrementeaza, el putand fi folosit pe post de contor al numarului de transferuri ce se vor efectua. Inaintea executiei acestei instructiuni, utilizatorul trebuie sa incarce in registrul HL adresa de inceput a zonei de memorie sursa, in DE - adresa de inceput a zonei de memorie destinatie, iar in BC numarul locatiilor de memorie ce se vor transfera. Prin executie, instructiunea se auto pregateste pentru o noua rulare. La executie repetata se transfera numarul de locatii corespunzator numarului de repetari.
b) LDIR - (load, increment & repeat) - incarca, incrementeaza si repeta.
Simbolic: se repeta secventa * (de la instructiunea anterioara), automat, pana cand BC = 0.
OBSERVATIE. Numarul de repetari trebuie incarcat initial in registrul dublu BC. Se mentin observatiile de la instructiunea anterioara.
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
LDIR |
EDh B0h |
Se repeta secventa ** pana cand BC=0 |
c) LDD - (load & decrement) - incarca si decrementeaza.
Simbolic :
**
OBSERVATIE. Registri ce adreseaza cele doua zone de memorie implicate in transfer (HL si DE) se incarca initial cu adresele de sfarsit ale acestora. Sensul de transfer care se obtine prin executia instructiunii este de la sfarsitul zonelor adresate, catre inceputul acestora. Registri indicatori ai adresei se decrementeaza, pregatind o noua rulare a aceleiasi instructiuni. Registrul BC este un contor al numarului de transferuri ce se vor efectua, initial trebuind sa fie incarcat cu acest numar.
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
LDD |
EDh A8h |
daca avem HL=100h DE=200h, (100h)=0Fh si BC=04h LDD final: (200h)=0Fh HL=0FFh, DE=1FFh si BC=03h |
d) LDDR - (load, decrement & repeat) - incarca , decrementeaza si repeta
Simbolic: se repeta secventa ** (de la instructiunea anterioara), automat, pana cand BC = 0.
OBSERVATIE. Numarul de repetari trebuie incarcat initial in registrul dublu BC. Se mentin observatiile de la instructiunea anterioara.
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
LDDR |
EDh B8h |
Se repeta secventa ** pana cand BC=0 |
V. Grupa instructiunilor pentru cautarea in zone (blocuri) de memorie
a) CPI - (compare & increment) -compara si incrementeaza.
Simbolic:
#
OBSERVATIE. Pentru derularea corecta a instructiunii, in prealabil trebuie sa se:
- incarce in acumulator data (constanta pe 8 biti) ce trebuie gasita in memorie;
- incarce registrul dublu HL cu adresa de inceput a zonei de memorie in care se va face cautarea;
- incarce registrul dublu BC cu numarul de locatii de memorie ale zonei respective (numarul de cautari).
Instructiunea compara continutul acumulatorului cu cel al locatiei de memorie adresata de registrul dublu HL. Comparatia se face printr-o operatie de scadere intre aceste entitati. Nici unul dintre cei doi operanzi implicati nu este afectat, iar rezultatul scaderii nu se depune nicaieri. Sunt afectati in schimb indicatorii de conditii din cadrul registrului F. Instructiunea se auto pregateste pentru o noua rulare. Utilizatorul va putea sa ia act de rezultatul comparatiei prin executia unei instructiuni care testeaza valoarea indicatorilor de conditii (vor fi prezentate ulterior).
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
CPI |
EDh A1h |
daca avem HL=100h BC=04h, A=3Dh si la adresa (102h)=3Dh CPI HL=101h, BC=03h A=3Dh, (102h)=3Dh - se poate efectua test daca s-a gasit valoarea din A - se face o singura comparare |
b) CPIR - (compare , increment & repeat) - compara, incrementeaza si repeta.
Simbolic: se repeta secventa # (de la instructiunea anterioara), automat, pana cand A = (HL) sau BC = 0 .
OBSERVATIE. Numarul de repetari trebuie incarcat initial in registrul dublu BC. Se mentin observatiile de la instructiunea anterioara.
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
CPIR |
sau |
EDh A1h |
daca avem HL=100h BC=04h, A=3Dh si la adresa (102h)=3Dh CPIR HL=103h, BC=01h A=3Dh, (102h)=3Dh -in acest caz se fac 3 comparari |
c) CPD - (compare & decrement) - compara si decrementeaza.
Simbolic :
OBSERVATIE. Registrul ce adreseaza zona de memorie in care se face cautarea - HL , se incarca initial cu adresa de sfarsit a acesteia. Sensul cautarii care se obtine prin executia instructiunii este de la sfarsitul zonei adresate, catre inceputul acesteia. Registrul HL, indicator al adresei se decrementeaza pregatind o noua rulare a aceleiasi instructiuni. Registrul BC este un contor al numarului de cautari ce se vor efectua, initial trebuind sa fie incarcat cu acest numar.
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
CPD |
EDh A9h |
daca avem HL=100h BC=04h, A=3Dh si la adresa (0FFh)=3Dh CPD HL=0FFh, BC=03h A=3Dh, (0FFh)=3Dh - se poate efectua test daca s-a gasit valoarea din A - se face o singura comparare |
d) CPDR - (compare , decrement & repeat) - compara, decrementeaza si repeta.
Simbolic: se repeta secventa * (de la instructiunea anterioara) , automat, pana cand A = (HL) sau BC = 0 .
OBSERVATIE. Numarul de repetari trebuie incarcat initial in registrul dublu BC. Se mentin observatiile de la instructiunea anterioara.
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
CPDR |
sau |
EDh B9h |
daca avem HL=100h BC=04h, A=3Dh si la adresa (0FFh)=3Dh CPDR HL=0FEh, BC=02h A=3Dh, (0FFh)=3Dh - se fac 2 comparari |
VI. Grupa instructiunilor aritmetico-logice pe 8 biti
Este una din grupele importante de instructiuni, constituind un argument al existentei microprocesorului. Orice operatie aritmetico-logica pe 8 biti se efectueaza asupra a doi operanzi. La microprocesorul Z-80 este obligatoriu ca unul dintre cei doi operanzi sa fie adus in acumulator (eventual, printr-o operatie de transfer anterioara). Cel de-al doilea operand se specifica prin chiar instructiunea aritmetico-logica. Acest operand poate fi continutul unui registru, continutul unei locatii de memorie (adresata prin diverse mijloace) sau o data imediata (constanta pe 8 biti). Dupa executia instructiunii aritmetico-logice, rezultatul se depune in acumulator, cu stergerea primului operand. Instructiunile acestei grupe afecteaza registrul indicatorilor de conditii - F, prin natura rezultatelor obtinute. Indicatorii pot fi testati folosind instructiuni specifice ce vor fi prezentate ulterior. Sursa s care intervine in derularea acestor instructiuni este:
s I r I
A . Subgrupa operatiilor aritmetice
1) Adunarea (addition)
a) ADD A,s
Simbolic : A A + s - vechiul continut al acumulatorului se aduna cu continutul sursei s specificate, rezultatul depunandu-se in acumulator, cu stergerea vechiului operand.
Apar urmatoarele situatii:
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
ADD A,r |
V |
1 0 0 0 0 s s s |
daca A=0Dh si B=04Fh ADD A,B final A=11h C=0 (carry) Z=0 |
|||||||
ADD A,n8 |
V |
C6h n8 |
||||||||
ADD A,(HL) |
V |
86h |
||||||||
ADD A,(IX+e) |
V |
DDh 86h e |
||||||||
ADD A,(IY+e) |
V |
FDh 86h e |
b) ADC A,s - (addition with carry)
Simbolic : A A + s + Cy - se tine seama de eventualul transport (carry) al unei operatii anterioare. Operatia este folosita la adunarea operanzilor reprezentati pe mai multi octeti, pentru adunarea celor de rang superior.
Apar situatiile:
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
ADC A,r |
V |
1 0 0 0 1 s s s |
daca A=09h si Cy=1 ADC A, 0xF8h final A=02h C=1 (carry) Z=0 |
|||||||
ADC A,n8 |
V |
CEh n8 |
||||||||
ADC A,(HL) |
V |
8Eh |
||||||||
ADC A,(IX+e) |
V |
DDh 8Eh e |
||||||||
ADC A,(IY+e) |
V |
FDh 8Eh e |
2) Scaderea (substraction)
a) SUB A,s
Simbolic : A A - s - din vechiul continut al acumulatorului se scade sursa s specificata, rezultatul depunandu-se tot in acumulator cu pierderea primului operand.
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
SUB A,r |
V |
1 0 0 1 0 s s s |
daca A=10h HL=100h si (100h)=0Fh SUB A, (HL) final A=01h C=0 (carry) Z=0 |
|||||||
SUB A,n8 |
V |
D6h n8 |
||||||||
SUB A,(HL) |
V |
96h |
||||||||
SUB A,(IX+e) |
V |
DDh 96h e |
||||||||
SUB A,(IY+e) |
V |
FDh 96h e |
b) SBC A,s - substract with carry.
Simbolic : A A - s - Cy - din vechiul continut al acumulatorului se scade continutul sursei specificate s, precum si valoarea indicatorului de transport (carry). Instructiunea se foloseste pentru operatiile de scadere ale operanzilor exprimati pe mai multi octeti, in vederea scaderii octetilor de rang superior.
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
SBC A,r |
V |
1 0 0 1 1 s s s |
daca A=1Ah IY=200h si Cy=1 (200h)=1Fh SUB A, (HL) final A=FAh C=1 (carry) Z=0 |
|||||||
SBC A,n8 |
V |
DEh n8 |
||||||||
SBC A,(HL) |
V |
9Eh |
||||||||
SBC A,(IX+e) |
V |
DDh 9Eh e |
||||||||
SBC A,(IY+e) |
V |
FDh 9Eh e |
B. Subgrupa operatiilor logice
Operatiile din aceasta subgrupa afecteaza registrul indicatorilor de conditii - F, exceptie facand indicatorul Cy care este adus in starea "0" - logic.
1) Produsul logic ( SI logic )
AND s
Simbolic : A A s - asupra vechiului continut al acumulatorului se aplica operatia SI LOGIC cu operandul specificat de sursa s, rezultatul depunandu-se in A, stergandu-se primul operand.
Apar situatiile:
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
AND r |
P |
1 0 1 0 0 s s s |
daca A=1Ah B=0Fh AND A, B final A=0Ah |
|||||||
AND A,n8 |
P |
E6h n8 |
||||||||
AND A,(HL) |
P |
A6h |
||||||||
AND A,(IX+e) |
P |
DDh A6h E |
||||||||
AND A,(IY+e) |
P |
FDh A6h E |
2) Suma logica ( SAU logic )
OR s
Simbolic : A A s - asupra vechiului continut al acumulatorului se aplica operatia SAU LOGIC cu operandul specificat de sursa s, rezultatul depunandu-se in A, stergandu-se primul operand.
Apar situatiile:
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
OR r |
P |
1 0 1 1 0 s s s |
daca A=1Ah B=0Fh OR A, B final A=1Fh |
|||||||
OR A,n8 |
P |
F6h n8 |
||||||||
OR A,(HL) |
P |
B6h |
||||||||
OR A,(IX+e) |
P |
DDh B6h e |
||||||||
OR A,(IY+e) |
P |
FDh B6h e |
3) Sau exclusiv (Exclusive or)
a) XOR s
Simbolic : A A s - asupra vechiului continut al acumulatorului se aplica operatia SAU EXCLUSIV cu operandul specificat de sursa s, rezultatul depunandu-se in A, stergandu-se primul operand.
Apar situatiile:
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
XOR r |
P |
1 0 1 0 1 s s s |
daca A=1Ah B=0Fh XOR A, B final A=15h |
|||||||
XOR A,n8 |
P |
EEh n8 |
||||||||
XOR A,(HL) |
P |
AEh |
||||||||
XOR A,(IX+e) |
P |
DDh AEh e |
||||||||
XOR A,(IY+e) |
P |
FDh AEh e |
C. Subgrupa operatiei de comparatie
CP s
Simbolic: A - s - instructiunea realizeaza operatia de scadere intre acumulator si sursa s indicata. Scaderea nu afecteaza pe nici unul dintre cei doi operanzi, iar rezultatul nu se depune nicaieri. In schimb, sunt afectati bitii din registrul indicatorilor de conditii. Astfel, tabelul urmator prezinta pozitionarea indicatorilor de conditii Z si Cy, functie de relatia dintre cei doi operanzi (Op1, Op2) care se compara:
Op1 (A) Op2 (s) |
Z |
Cy |
|
Op1 = Op2 | |||
Op1 > Op2 | |||
Op1 < Op2 |
De obicei, dupa executia unei instructiuni de comparatie va urma o instructiune ce testeaza indicatorii de conditii, prin care se iau decizii functie de rezultatul comparatiei.
Spre exemplu, un algoritm de decizie asupra relatiei de ordine intre doi operanzi, ce este provocat de executia instructiunii de comparatie, este urmatorul:
DA
Z = 1
Un astfel de algoritm va putea fi implementat prin folosirea instructiunilor de testare a indicatorilor de conditii, ce vor fi prezentate ulterior, in locul blocurilor de decizie din organigrama.
Apar urmatoarele situatii:
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
CP r |
V |
1 0 1 1 1 s s s |
daca A=1Ah B=0Fh CP B final A=15h |
|||||||
CP A,n8 |
V |
FEh n8 |
||||||||
CP A,(HL) |
V |
BEh |
||||||||
CP A,(IX+e) |
V |
DDh BEh e |
||||||||
CP A,(IY+e) |
V |
FDh BEh e |
D. Subgrupa instructiunilor de incrementare-decrementare pe 8 biti
1) Incrementarea
INC s
Simbolic: s s + 1
s I
Apar situatiile:
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
INC |
V |
0 0 s s s 1 0 0 |
daca E=1Ah INC E final E=1Bh |
|||||||
INC (HL) |
V |
34h |
||||||||
INC (IX+e) |
V |
DDh 34h e |
||||||||
INC (IY+e) |
V |
FDh 34h e |
2) Decrementarea
DEC s
Simbolic : s s - 1
s I
Apar situatiile:
Instructiune |
S |
Z |
H |
O |
N |
C |
t |
L |
Cod masina |
Exemplu |
INC |
V |
0 0 s s s 1 0 1 |
daca E=1Ah DEC E final E=19h |
|||||||
INC (HL) |
V |
35h |
||||||||
INC (IX+e) |
V |
DDh 35h e |
||||||||
INC (IY+e) |
V |
FDh 35h e |
OBSERVATIE. Instructiunile de incrementare-decrementare pe 8 biti afecteaza registrul indicatorilor de conditii, cu exceptia bitului Cy (carry), care ramane nemodificat. Astfel, daca consideram spre exemplu, registrul B si continutul sau 0FFh, dupa operatia de incrementare INC B, continutul sau devine 00h. Desi ne asteptam sa avem indicatorul Cy pozitionat in " 1 " logic, totusi acesta ramane nemodificat, avand aceeasi valoare ca si inaintea operatiei de incrementare. In schimb, indicatorul Z devine " 1 " logic (anuntand aparitia unui rezultat nul ).
3. Probleme rezolvate
a) Realizati un program pentru depunerea in locatiile de memorie cu adresele 200h si 201h a constantei 1234h, respectiv la locatiile cu adresele 300h si 301h a constantei 5678h. Efectuati apoi operatia de adunare a celor 2 constante cu preluarea lor din memorie si depunerea rezultatului la adresele 400h si 401h. Rezultatul se va depune incepand cu octetul cel mai putin semnificativ.
Solutie
Schema bloc a programului:
Detaliind aceasta organigrama se obtine urmatoarea forma si corespunzator, programul sursa:
- modificati programul astfel incat sa utilizati facilitatile registrilor index;
- realizati dupa modelul enuntului de mai sus un program in care sunt adunate doua numere pe cate trei octeti. Adresele numerelor sunt aceleasi iar constantele care trebuie adunate 123456h si 567890h;
b) Se considera o zona de memorie formata din 5 locatii succesive, zona ce incepe cu adresa 200h si respectiv, o a doua zona de memorie, formata tot din 5 locatii succesive, ce incepe cu adresa 300h. Continutul zonelor de memorie este oricare. Se cere:
- Realizarea unui program prin care suma continuturilor locatiilor din prima zona este depusa in memorie incepand cu adresa 400h si cu octetul cel mai putin semnificativ.
2. - Realizarea operatiei XOR intre continuturile corespunzatoare celor 2 zone de memorie cu depunerea rezultatelor in memorie, in 5 locatii succesive, incepand cu adresa 500h.
Solutie
Punctul 1:
Pentru realizarea sumei continuturilor locatiilor de memorie vom folosi registrul dublu HL in vederea adresarii memoriei.
Rezultatul obtinut in urma adunarii poate fi un numar pe 2 octeti. Vom folosi registrul B pentru stocarea octetului cel mai semnificativ al acestuia, octet ce va fi depus la adresa 401h. Acumulatorul este folosit atat pentru obtinerea ocmps-ului rezultatului, cat si pentru obtinerea ocms-ului acestuia. O organigrama de rezolvare, precum si forma sursa a programului corespunzator sunt prezentate in continuare. Se atrage atentia asupra faptului ca rezolvarea propusa nu este optima, ea bazandu-se pe cunostintele capatate pana in prezent.
ORG
100h LD
HL,201h LD
A,(200h) ADD
A,(HL) LD
(400h),A LD
A,00h ADC
A,B LD
B,A LD
A,(400h) INC
L ADD
A,(HL) LD
(400h),A LD
A,00h ADC
A,B LD
B,A LD
A,(400h) INC
L ADD
A,(HL) LD
(400h),A LD
A,00h ADC
A,B LD
B,A LD
A,(400h) INC
L ADD
A,(HL) LD
(400h),A LD
A,00h ADC
A,B LD
(401h),A END
LD B,00h
sa se realizeze un program asemanator in care se aplica operatorul logic AND asupra elementelor din primul sir;
sa se realizeze un program in care se aduna la fiecare element al sirului constanta 4h. Se presupune ca numerele de la adresele respective nu sunt mai mari de 0Bh.
Punctul 2 :
Vom folosi registrul dublu HL pentru adresarea zonei de memorie ce incepe cu adresa 300h. O rezolvare (organigrama si programul sursa corespunzator) este prezentata in continuare. Solutia se bazeaza pe cunostintele acumulate pana in prezent. Alte solutii (optimizate) se vor putea genera folosind cunostintele ce vor fi capatate ulterior.
ORG
0100h LD
A,(200h) LD
HL,300h XOR
(HL) LD
(500h),A LD
A,(201h) INC
L XOR
(HL) LD
(501h),A LD
A,(202h) INC
L XOR
(HL) LD
(502h),A LD
A,(203h) INC
L XOR
(HL) LD
(503h),A LD
A,(204h) INC
L XOR
(HL) LD
(504h),A END
realizati acelasi program sub o forma mai optimizata;
ce modificari apar asupra programului daca utilizam registri index?.
c) Sa se realizeze un program in care se face adunarea a trei numere pe cate 2 octeti. Primul numar se afla la adresa 8100h si contine valoarea zecimala 32425, al doilea numar se afla la adresa 8110h si contine valoarea zecimala 16233 si al treilea numar se afla la adresa 8120 si are valoarea zecimala 25226. Rezultatul se va depune de la adresa 8130 incepand cu octetul cel mai putin semnificativ
(doua metode + explicatii in cuvinte)
Solutie:
Rezolvarea acestei probleme poate fi abordata in doua metode:
1- adunarea se face la nivelul octetilor cel mai putin semnificativi si eventualul transport rezultat in urma adunarii va fi adunat la suma octetilor cei mai semnificativi. Pentru pastrarea transportului vom folosi un registru liber al procesorului ( in cazul de fata C). In continuare sunt prezentate organigrama si codul sursa al programului:
ORG 100h LD IX, 8100h LD A, (IX+0h) ADD A,
(IX+10h) LD B, A LD A, 0h ADC A, 0h LD C, A LD A, B ADD A,
(IX+20h) LD (IX+30h), A LD A, C ADC A,(IX+01h) LD B, A LD A, 0h ADC A, 0h LD C, A LD A, B ADD A,
(IX+11h) LD B, A LD A, C ADC A, 0h LD C, A LD A, B ADD A,
(IX+21h) LD (IX+31h), A LD A, C ADC A, 0h LD (IX+32h), A END
2- a doua metoda presupune efectuarea adunarii dintre primul si al doilea numar insotita de salvarea sumei temporare la adresa unde trebuie depus rezultatul, urmata de adunarea la aceasta suma temporara a celui de-al treilea numar.
ORG 300h LD IX, 8100h LD A, (IX+0h) ADD A,
(IX+10h) LD (IX+30h), A LD A, (IX+01h) ADC A,
(IX+11h) + Cy LD (IX+31h), A LD A, 0h ADC A, 0h LD (IX+32h), A LD A, (IX+30h) ADD A,
(IX+20h) LD (IX+30h), A LD A, (IX+31h) ADC A,
(IX+21h) LD (IX+31h), A LD A, 0h ADC A, 0h LD (IX+32h), A END
modificati programul pentru a realiza inmultirea cu 3 a unui numar pe un octet care este plasat la adresa 8200h. Rezultatul se va depune de la dresa 8210h incepand cu octetul cel mai putin semnificativ.
d) Se da un sir de numere de 10 octeti, fiind plasat incepand cu adresa 9010h. Sa se realizeze un program care gaseste prima pozitie a octetului care are valoarea 20h si va fi depusa la adresa 9020h. Daca 20h nu exista in sir va fi depus 0h la adresa indicata.
Solutie:
Pentru rezolvarea problemei vom folosi instructiunea CPDR. Pentru aceasta va trebui sa incarcam HL cu adresa de sfarsit a zonei in care se face cautarea si registrul BC cu numarul de comparari care trebuiesc facute. Deoarece cunostintele insusite pana in prezent nu ne permit sa determinam daca compararea s-a terminat datorita faptului ca A = (HL) sau BC=0 vom proceda in felul urmator: vom face 11 comparari incepand cu adresa 9019h, adica vom compara si valoarea de la adresa 8FFFh. Astfel daca valoarea 20h este gasita in zona 9019h-9010h, BC va avea exact valoare pozitiei fata de adresa 9010h (9010h este considerata pozitia 1 iar 9019h pozitia 10). Compararea cu valoarea de la adresa 8FFFh se face doar pentru a permite contorului BC sa ajunga la 0 (daca nu este gasita valoarea in zona specificata). In continuare prezentam organigrama si programul sursa:
ORG LD
HL, 9019h LD
A, 20h LD
BC , 0Bh CPDR LD
A, C LD
(9020h), A END
- cati cicli masina utilizeaza instructiunea CPRD? De ce?;
- ce alta modalitate gasiti pentru rezolvarea problemei ?
Desfasurarea lucrarii
1. Se vor citi si prelua in scris toate informatiile teoretice prezentate pana in acest moment. Se atrage atentia ca aceste informatii vor fi folosite si la desfasurarea altor lucrari de laborator.
2. Se vor studia problemele rezolvate, incercand gasirea altor posibilitati de rezolvare si se va raspunde la intrebarile anexate.
3. Programele obiect ale problemelor rezolvate vor fi introduse in memoria microsistemelor existente in laborator (prin intermediul programului monitor) si se vor rula. Se va observa efectul rularii si buna lor executie.
4. Se vor rezolva urmatoarele probleme propuse si se va urmari executia corecta prin introducerea programelor obiect in memoria microsistemelor si rulare:
a). Se cere realizarea unui program care sa inmulteasca continutul locatiilor de memorie cu adresele 500h si 501h (indiferent de cat sunt acesta), cu constanta 3. Rezultatul va fi depus in memorie incepand cu adresa 600h si cu octetul cel mai putin semnificativ.
b). Se considera doua numere binare reprezentate pe cate 4 octeti. Primul numar este plasat in memorie incepand cu adresa 700h si cu ocmps-ul, iar cel de-al doilea numar se afla plasat de la adresa 800h, incepand tot cu ocmps-ul. Realizati programul ce efectueaza operatia de scadere a celor doua numere, cu plasarea rezultatului de la adresa 900h , incepand cu ocmps-ul. Cele doua numere sunt oarecare, dar primul este mai mare decat al doilea.
5. Se va raspunde la urmatoarele intrebari:
a). Exista posibilitatea transferarii continutului unei locatii de memorie intr-o alta locatie de memorie, printr-o singura instructiune la microprocesorul Z-80 ? Daca da, cum ?
b). Se considera instructiunea EX (SP), HL. Prezentati o secventa de instructiuni prin care sa obtineti acelasi efect ca si al acesteia.
c). In microcalculatoarele TIM-S (compatibile Spectrum), zona de memorie ROM are 16 Ko si incepe cu adresa 0h. Restul memoriei, pana la 64 Ko, este reprezentata de RAM. Dupa initializare microcalculatorul are nevoie de transferarea intregii zone de memorie ROM in memoria RAM incepand cu adresa 8000h. Prezentati o solutie pentru realizarea acestui lucru.
d). Este posibila instructiunea ADD B, C ? Explicati raspunsul .
e). Se considera operanzii 0A3h si 95h. Care sunt rezultatele operatiilor AND, OR si XOR intre acestia ?
f). Cu ce instructiuni puteti echivala instructiunea INC L , la microprocesorul Z-80 ?
g). Care sunt asemanarile si deosebirile ce apar la rularea instructiunilor INC A si ADD A, 01h ?
h). Ce efect are instructiunea XOR A ?
i). Se considera urmatoarea situatie la un microprocesor Z-80: Cy = 1 , B = 01h , A = 03h
In aceste conditii, se efectueaza urmatoarea secventa de instructiuni:
DEC B
DEC B
DEC B
DEC B
ADC A,B
Care sunt continuturile registrilor A si B dupa executia secventei, precum si a indicatorilor Cy si Z ?
Care vor fi aceleasi continuturi daca se pleaca de la Cy = 0 , B = 02h si A = 02h ?
j). In conditiile problemei rezolvate b, pentru punctul 1 al acesteia, de ce este nevoie initial de incarcarea registrului B cu 00h ?
k). Care este continutul registrului L in urma executiei programelor rezolvate a si b (pentru problema b, atat la punctul 1 cat si la 2) ?
Copyright © 2024 - Toate drepturile rezervate