Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Meseria se fura, ingineria se invata.Telecomunicatii, comunicatiile la distanta, Retele de, telefonie, VOIP, TV, satelit




Aeronautica Comunicatii Constructii Electronica Navigatie Pompieri
Tehnica mecanica

Electronica


Index » inginerie » Electronica
» Setul de instructiuni al mr z -80


Setul de instructiuni al mr z -80


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 B,00h

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

 

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) ?





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate