Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

Setul de instructiuni al mr z-80 ( i ) - microprocesoare

SETUL DE INSTRUCTIUNI AL mR Z-80 ( I ) - MICROPROCESOARE

1. Obiectul lucrarii

Lucrarea isi propune prezentarea setului de instructiuni al microprocesorului Z-80. Setul de instructiuni este impartit in mai multe grupe. In aceasta lucrare se prezinta grupa instructiunilor de transfer pe 8 biti, cea a transferurilor pe 16 biti si in final lucrul cu stiva. De asemenea, instructiunile respective sunt ilustrate cu aplicatii.



2. Breviar teoretic

Setul de instructiuni al mR z - 80

Setul de instructiuni al microprocesorului Z-80 este impartit in 16 grupe. Instructiunile sunt reprezentate in memoria microsistemelor pe 1 pana la 4 octeti. O instructiune este formata din codul propriu-zis al acesteia si, optional, din operanzi. Primul sau primii doi octeti reprezinta codul propriu-zis al instructiunii. Urmatorul sau urmatorii doi octeti, daca exista, reprezinta operanzii.

I. Grupa instructiunilor de transfer pe 8 biti :

Instructiunile din aceasta grupa transfera un octet (8 biti) in cadrul executiei, de la o sursa catre o destinatie. Simbolic, acest lucru se reprezinta astfel:

d s

unde d - este destinatia, iar s - sursa. Destinatia si sursa pot fi registri, locatii de memorie etc., motiv pentru care apar mai multe subgrupe ale acestui tip de instructiune. Instructiunile din aceasta grupa lasa nemodificat registrul F al indicatorilor de conditii.

LD r,s - (load r with s ) - incarca registrul r cu sursa s

Simbolic:r s (continutul sursei s trece in registrul r)

r = registru general pe 8 biti al microprocesorului; r I

s I

n8 = constanta pe 8 biti(numar cuprins in gama 00h ,, 0ffh);

e = numar reprezentat in cod complement fata de 2 (CC2) pe 8 biti (deplasament).

NOTA:. O notatie de tipul (XX) reprezinta continutul locatiei de memorie adresat de entitatea XX, aflata in interiorul parantezei, care semnifica chiar adresa locatiei de memorie. Pentru microprocesorul Z-80, adresa unei locatii de memorie este un numar pe 16 biti (cuvant), iar continutul unei locatii de memorie (data) este un numar pe 8 biti (octet). Intotdeauna entitatea XX (care poate fi un registru dublu) trebuie sa reprezinte un numar pe 16 biti.

Cele 5 posibilitati in cadrul acestei subgrupe sunt:

a) LD r,r(incarcarea unui registru de la alt registru)

Simbolic : r r

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

LD r, r

4

1

0 1 d d d s s s

Daca A = 1Dh

si C = 4Fh

LD A,C

final : A=4Fh

si C=4Fh

d d d = reprezinta codarea destinatiei

ss s = semnifica codarea sursei

Tabelul de codare (valabil pentru toate instructiunile ce contin aceste coduri) se prezinta mai jos:

d d d

(s) (s) (s)

Registrul

0 0 0

0 0 1

0 1 0

0 1 1

B

C

D

E

1 0 0

1 0 1

1 1 0

1 1 1

H

L

(HL)

A

Spre exemplu, instructiunea LD A,C va avea codul masina 0 1 1 1 1 0 0 1 (in binar) sau 79h.

OBSERVATIE. Din punctul de vedere al notatiei, in codul mnemonic al unei instructiuni de transfer, entitatea aflata in partea dreapta (sursa) va trece in entitatea aflata in stanga (destinatia).

b) LD r,n8(incarcarea unui registru simplu cu o constanta pe 8 biti, n8).

Simbolic : r n8

Instructiune

S

Z

H

O

N

C

T

L

Cod masina

Exemplu

LD r, n8

7

2

0 0 d d d 1 1 0

n8

daca A = 1Dh

LD A, 3Fh

final : A = 3Fh

NOTA Instructiunea LD B,7Ah va avea codul masina format din octetii 06h si 7Ah (in aceasta ordine).

c) LD r,(HL)- (incarcarea unui registru cu continutul locatiei de memorie adresat de HL).

Simbolic : r (HL)

Instructiune

S

Z

H

O

N

C

T

L

Cod masina

Exemplu

LD r, (HL)

7

1

0 1 s s s 1 1 0

daca HL = 100h si (100h) =0xF4h

LD D, (HL)

final : D = 0xF4h

Pentru ca instructiunea sa se desfasoare corect, in prealabil este necesar sa se incarce registrul dublu HL, cu adresa locatiei de memorie cu care se va lucra. De exemplu, acest lucru se poate face folosind instructiunile LD H,n8 si LD L,n8 (pentru incarcarea octetului mai semnificativ si respectiv, mai putin semnificativ ai adresei).

Nu exista o instructiune de tipul LD (HL), (HL), care ar avea codul 76h. La intalnirea acestui cod, microprocesorul executa instructiunea HALT (oprire).

Exemplu de instructiune : LD D,(HL) are codul 0 1 0 1 0 1 1 0 (binar) sau 56h.

d) LD r, (IX+e) - (incarcarea registrului r cu continutul locatie de memorie avand adresa IX + e).

Simbolic : r (IX+e)

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

LD r, (IX+e)

19

3

DDh

0 1 s s s 1 1 0

e

daca IX = 200h si (204h) = 0xF4h

LD D, (IX+04h)

final : D = 0xF4h

(IX+e) = continutul locatiei de memorie adresata indexat cu deplasamentul " e ";

e (deplasament) = numar reprezentat in cod complement fata de 2 (CC2); este folosit pentru a reprezenta numerele binare cu semn.

In acest mod de adresare, adresa operandului implicat in operatie (in cazul nostru, adresa sursei) se gaseste prin insumarea algebrica a continutului registrului index IX cu numarul cu semn "e" (deplasamentul).

Daca e < 0, operandul se afla in spatele locatiei de memorie de referinta, a carei adresa se gaseste in registrul index IX (acest lucru inseamna catre adresa 0000h). Daca e > 0, operandul se afla in fata locatiei de memorie de referinta, adica catre adresa 0FFFFh.

Astfel, prin folosirea deplasamentului (exprimat fata de adresa de referinta indicata de IX) putem sa selectam 255 de locatii (127 catre inainte si 128 catre inapoi).

NOTA. Reprezentarea in CC2 permite transformarea operatiilor de scadere in operatii de adunare. De exemplu :

07h - 03h = 07h + 0FDh = 04h ! ! ! (trunchind rezultatul final la doar 8 biti ). Pentru aceasta operatie, indicatorul de conditii V (overflow) ia valoarea "0"-logic, semnificand nedepasirea gamei de reprezentare pe 8 biti. Daca acest indicator este "1"-logic, rezultatul obtinut trebuie corectat tinand seama de depasire si bitul de transport (carry).

e) LD r,(IY+e)

Simbolic : r (IY+e)

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

LD r, (IY+e)

19

3

FDh

0 1 s s s 1 1 0

e

daca IY = 200h si (204h) = 0xF4h

LD C, (IY+04h)

final : C = 0xF4h

Exemplu : LD A, (IY +23h) COD MASINA : FDh 7Eh 23h

Practic, toate observatiile facute la instructiunea anterioara raman valabile si pentru registrul index IY.

OBSERVATII. Pentru toate instructiunile ce folosesc registrul index IX, la reprezentarea codului masina apare prefixul 0DDh, iar la cele ce folosesc registrul index IY , prefixul 0FDh.

Nu exista nici o instructiune care sa lege direct registri IX cu IY sau IX cu HL sau IY cu HL.

LD d,r - (load d with r) - incarca destinatia d cu registrul r

Simbolic : d r(continutul registrului r trece in destinatia d)

d I

Apar urmatoarele 4 posibilitati ale acestei instructiuni :

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

LD r, r

4

1

0 1 d d d s s s

daca IY = 200h

(204h) = 0xF4h

si C = 0Eh

LD (IY+04h) , C

final : (204h) = 0Eh

LD (HL), r

7

1

0 1 1 1 0 s s s

LD (IX+e),r

19

3

DDh

0 1 1 1 0 s s s

e

LD (IY+e),r

19

3

FDh

0 1 1 1 0 s s s

e

LD d,n8 - (load d with data n8) incarcarea unei destinatii cu constanta pe 8 biti , n8

Simbolic : d n8 d I

Apar urmatoarele 3 situatii posibile :

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

LD (HL) , n8

10

2

36h n8

daca HL=100h si (100h)=0xF4h

LD (HL), 0xF4h

final : (100h)=0xF4h



HL=100h

LD (IX+e), n8

19

4

DDh 36h

n8

e

LD(IY+e) , n8

19

4

FDh 36h

n8

e

LD A,s - (load accumulator from s) - incarca acumulatorul de la o sursa s

Simbolic : A s s I

Apar urmatoarele 5 posibilitati:

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

LD A , (BC)

7

1

0Ah

daca BC=2400h si (2400h)=0x9Dh

LD A, (BC)

final :

A=0x9Dh

(2400h)=0x9Dh

BC=2400h

LD A , (DE)

7

1

1Ah

LD A , (n16)

13

3

3Ah

n16L n16H

LD A , I

0

0

9

2

EDh 57h

LD A , R

0

0

9

2

EDh 5Fh

NOTA . Reprezentarea unei constante pe 16 biti in memoria microsistemului se face in ordinea ocmps ( n16L ) - partea "low", urmat de ocms ( n16H ) - partea "high". Acest lucru este valabil pentru toate instructiunile care opereaza cu constante pe 16 biti.

OBSERVATIE . Ultimele doua instructiuni reprezinta singurele posibilitati pentru citirea si, respectiv, scrierea informatiilor din si in registri I si R.

LD d,A - (load d with accumulator) - transfera acumulatorul in destinatia d

Simbolic : d A d I

Apar urmatoarele 5 posibilitati:

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

LD (BC) , A

7

1

02h

daca BC=2400h (2400h)=0x9Dh

si A=0Ch

LD (BC), A

final : (2400h)=0Ch

BC=2400h

LD (DE), A

7

1

12h

LD (n16), A

13

3

32h

n16L n16H

LD I, A

0

0

9

2

Edh 47h

LD R, A

0

0

9

2

Edh 4Fh

OBSERVATIE . Ultimele doua instructiuni reprezinta singurele posibilitati pentru scrierea

si, respectiv, citirea informatiilor in si din registri I si R.

Toate instructiunile de transfer pe 8 biti se pot prezenta unitar in urmatoarea diagrama:


II. Grupa instructiunilor de transfer pe 16 biti :

Instructiunile din aceasta grupa transfera in cadrul executiei, un cuvant (16 biti) de la o sursa dubla catre o destinatie dubla. Sursa si, respectiv, destinatia dubla sunt entitati pe 16 biti. Simbolic, acest lucru se reprezinta astfel :

dd ss

dd - semnifica destinatie dubla, iar ss - sursa dubla. Destinatia si sursa pot fi diverse (registri pereche, locatii de memorie), din acest motiv aparand mai multe subgrupe ale acestui tip de instructiune. Instructiunile din aceasta grupa lasa nemodificat registrul F al indicatorilor de conditii.

LD dd,n16 - Incarcarea unei destinatii duble cu constanta pe 16 biti , n16.

Simbolic : dd n16

dd = destinatie dubla

dd I

Apar urmatoarele situatii :

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

LD dd , n16

10

3

0 0 rp1 rp2 0 0 0 1 n16L

n16H

LD BC, 2400h

final :

BC=2400h

LD dd , n16 - realizeaza incarcarea unui registru dublu cu constanta pe 16 biti, n16 - pentru registri dubli               BC,DE, HL si SP.

Simbolic: dd n16 . Instructiunea incarca partea "low" a constantei n16 (8 biti) in registrul mai putin semnificativ al registrului extins, iar partea "high" a aceleiasi constante este incarcata in registrul mai semnificativ al registrului pereche.

Combinatia rp1, rp2 desemneaza registrul pereche implicat in operatie si este specificata in tabelul urmator:

NOTA. Prin rp1, rp2 se indica atat sursa cat si destinatia. Combinatiile prezentate sunt valabile pentru toate instructiunile ce folosesc registri dubli.

rp1

rp2

registrul

0

0

BC

0

1

DE

1

0

HL

1

1

SP

AF

De exemplu, instructiunea LD HL,1234h va avea codul masina 0 0 1 0 0 0 0 1 (binar) adica 21h si operanzii 34h si 12h (in aceasta ordine). Instructiunea provoaca incarcarea in H a constantei 12h , iar in L a constantei 34h. La acelasi efect s-ar fi ajuns folosind doua instructiuni de transfer pe 8 biti : LD H,12hsiLD L,34h .

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

LD IX, n16

14

4

DDh 21h

n16L

n16H

daca IX=2435h

LD IX, 60F3h

final :

IX=60F3h

LD IY, n16

14

4

FDh 21h

n16L

n16H

LD dd,(n16) - Incarcarea unei destinatii duble cu continutul locatiei de memorie cu adresa n16si respectiv, cu continutul locatiei imediat urmatoare ce are adresa n16 + 1.

Simbolic : ddL (n16)- octetul aflat la adresa specificata prin constanta pe16biti , n16, trece in partea " low " a destinatiei duble;

ddH (n16 + 1)- octetul aflat la adresa imediat urmatoare, n16 + 1, trece in partea " high " a destinatiei duble.

dd = destinatie dubladd I

NOTA. Se atrage atentia asupra faptului ca mnemonica instructiunii nu exprima exact ceea ce se executa. Se efectueaza de fapt, doua transferuri pe 8 biti (sau unul pe 16 biti).

Apar urmatoarele cazuri:

Instructiune

S

Z

H

O

N



C

t

L

Cod masina

Exemplu

LD dd, (n16)

20

4

EDh

0 1 rp1 rp2 1 0 1 1

n16L

n16H

daca IX=2435h

(04FAh)=77h si

(04FBh)=79h

LD IX, (04FAh)

final :

IX=7977h

LD IX, (n16)

20

4

DDh 2Ah

n16L

n16H

LD IX, (n16)

20

4

FDh 2Ah

n16L

n16H

LD dd, (n16) - realizeaza incarcarea unui registru pereche destinatie, dd, de la doua locatii succesive de memorie incepand cu adresa pe 16 biti, n16 - pentru registri BC, DE,HL, SP.

OBSERVATIE. Registrul dublu HL nu se supune acestei reguli de codare si, pentru instructiunea LD HL, (n16) exista urmatorul cod masina : 2Ah , n16L , n16H . Explicatia exceptiei consta in faptul ca microprocesorul Z-80 a fost creat in idea de a fi compatibil cu un alt microprocesor, creat anterior de firma INTEL, denumit 8080. La acest microprocesor exista doar instructiunea de echivalenta pentru LD HL ,(n16), ceilalti registri neavand instructiuni echivalente. A fost pastrat codul masina specificat anterior.

LD IX, (n16) - realizeaza incarcarea registrului index IX cu continutul a doua locatii succesive de memorie.

LD IX, (n16) - realizeaza incarcarea registrului index IY cu continutul a doua locatii succesive de memorie.

LD (n16),ss - Transferarea continutului unei surse duble, ss, in doua locatii succesive de memorie, incepand cu adresa specificata de constanta pe 16 biti , n16.

Simbolic : (n16) ssL - octetul aflat in partea " low " a sursei duble , se transfera in locatia de memorie specificata prin constanta pe 16 biti, n16;

(n16 + 1) ssH - octetul aflat in partea " low " a sursei duble , se transfera in locatia de memorie imediat urmatoare, n16 + 1.

ss I ss = sursa dubla

NOTA. Se atrage atentia asupra faptului ca mnemonica instructiunii nu exprima exact ceea ce se executa . Se efectueaza de fapt, doua transferuri pe 8 biti (sau unul pe 16 biti).

Apar urmatoarele cazuri:

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

LD (n16), ss

20

4

EDh

0 1 rp1 rp2 0 0 1 1

n16L

n16H

daca BC=040Ah

(04FAh)=77h si

(04FBh)=79h

LD (04FAh), BC

final :

(04FAh)=0Ah si

(04FBh)=04h

LD (n16), IX

20

4

DDh 22h

n16L

n16H

LD (n16), IY

20

4

FDh 22h

n16L

n16H

LD (n16),ss - realizeaza incarcarea a doua locatii succesive de memorie, incepand cu adresa pe 16 biti, n16, cu continutul sursei duble ss - pentru registri BC, DE, HL, SP.

ss I

Totusi, registrul dublu HL nu se supune acestei reguli de codare si pentru instructiunea LD (n16), HL exista urmatorul cod masina : 22h, n16L , n16H . Explicatia exceptiei consta in faptul ca microprocesorul Z-80 a fost creat in ideea de a fi compatibil cu un alt microprocesor, creat anterior de firma INTEL, denumit 8080. La acest microprocesor exista doar instructiunea echivalenta pentru LD (n16), HL, ceilalti registri neavand instructiuni echivalente. A fost pastrat codul masina specificat anterior.

LD (n16),IX - realizeaza transferarea registrului index IX in continutul a doua locatii succesive de memorie.

LD (n16),IY - realizeaza transferarea registrului index IX in continutul a doua locatii succesive de memorie.

LD SP,ss - Transferarea sursei duble ss in registrul SP, cu pastrarea gradului de semnificatie al celor doi octeti ce se transfera.

Simbolic : SP ss ss I ss = sursa dubla

Apar situatiile:

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

LD SP,HL

6

1

F9h

daca SP=0440h

HL=0C00h

LD SP, HL

final :

SP=0C00h

LD SP, IX

10

2

DDh F9h

LD SP, IY

10

2

FDh F9h

PUSH ss - salvarea in stiva a sursei duble ss.

Stiva este o portiune a memoriei RAM externa a procesorului. Adresarea stivei se face prin folosirea registrului SP.

Simbolic : ( SP-1 ) ssH

( SP-2 ) ssL

SP SP-2

ss I

Practic, are loc depunerea a doi octeti in doua locatii succesive de stiva (in ordinea indicata in simbolizarea anterioara), iar registrul SP este reactualizat printr-o dubla decrementare. El indica dupa aceasta operatie, adresa ultimei depuneri in stiva.

OBSERVATIE. Orice operatie cu stiva trebuie sa fie precedata de fixarea bazei stivei prin incarcarea registrului SP cu o constanta pe 16 biti ce exprima adresa bazei stivei.

Apar urmatoarele situatii:

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

PUSH ss

11

1

1 1 rp1 rp2 0 1 0 1

daca SP=0440h

BC=0C0Eh

PUSH BC

final :

SP=043Eh

(043Fh)=0Ch

(043Eh)=0Eh

PUSH, IX

15

2

DDh E5h

PUSH, IY

15

2

FDh E5h

NOTA: PUSH ss- (pentru registri dubli BC, DE, HL, AF).

APLICATIE. Considerand registrul dublu BC si continutul acestuia 4567h si, respectiv, baza stivei fixata la adresa 8100h, se cere analiza efectului instructiunii PUSH BC asupra stivei.

Solutie

Conform structurii instructiunii, depunerea se face secvential (in doua etape) - mai intai se depune in stiva ocms-ul registrului dublu (partea High - registrul B), apoi ocmps-ul (partea Low - registrul C). Prima depunere se face la adresa de stiva 80FFh, iar a doua depunere la adresa 80FEh. Dupa depunere, registrul SP se reactualizeaza, indicand adresa ultimei depuneri in stiva, adica 80FEh. Se observa ca la o depunere in stiva, SP-ul se decrementeaza, apropiindu-se de adresa de inceput a memoriei (stiva creste catre inapoi). Pentru zona de memorie implicata, lucrurile sunt prezentate grafic astfel:


POP dd - restaurarea din stiva a destinatiei duble dd .

Simbolic:ddL (SP)

ddH (SP+1)

SP SP +2                  dd I

Practic, are loc extragerea a doi octeti din doua locatii succesive de stiva (in ordinea indicata in simbolizarea anterioara), iar registrul SP este reactualizat printr-o dubla incrementare. El indica dupa aceasta operatie, adresa ultimei depuneri in stiva.

Apar urmatoarele situatii:

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

POP dd

10

1

1 1 rp1 rp2 0 0 0 1

daca

SP=043Eh

(043Fh)=0Ch

(043Eh)=0Eh

POP IX

final :

SP=0440h

IX=0C0Eh

POP, IX

14

2

DDh E1h

POP, IY

14

2

FDh E1h

NOTA: POP dd- (pentru registri dubli BC, DE, HL, AF).

APLICATIE. Sa se analizeze efectul executiei instructiunii POP DE , in conditiile ramase dupa efectuarea aplicatiei anterioare (de la instructiunea PUSH).

Solutie

Conditiile anterioare ramase sunt:

- adresa initiala a varfului stivei SP = 80FE(H)



- continutul de la adresa 80FE(H) = 67(H)

- continutul de la adresa 80FF(H) = 45(H)


Derularea operatiilor efectuate de instructiune poate fi prezentata astfel:

Etapa IE (FE(H))adicaE 67(H)

Etapa II D (FE(H) + 1) = (FF(H)) adicaD 45(H)

Etapa III SP FE(H) + 2 = 100(H)

OBSERVATII.

- Instructiunile PUSH si POP permit utilizatorului folosirea manuala a stivei, prin intermediul registrului SP ce adreseaza aceasta parte de memorie. SP-ul se decrementeaza la depunerile in stiva si se incrementeaza la extragerile din ea. SP-ul actioneaza de asa natura incat stiva este adresata prin tehnica LIFO (Last In First Out). Stiva poate fi accesata si automat de microprocesor, in anumite situatii speciale (apelarea subrutinelor, tratarea cererilor de intrerupere), situatii pentru care in stiva se salveaza si, respectiv, se restaureaza registrul PC (cazul microprocesorului Z-80).

- Instructiunile PUSH AF si POP AF sunt singurele posibilitati de citire si, respectiv, scriere ale registrului F, acesta neavand o alta legatura cu ceilalti registri ai microprocesorului.

3. Probleme rezolvate

a) Incarcati locatia de memorie 8200h cu constanta 55h, locatia cu adresa 8201h cu constanta 66h, locatia 8202h cu constanta 77h si locatia 8203h cu constanta 88h. Se cere ca fiecare transfer sa fie realizat printr-o procedura distincta.

Solutie

Rezolvarea unei probleme in limbaj de asamblare se recomanda a fi facuta in urmatoarele etape:

1. - elaborarea organigramei problemei; se pleaca de la o organigrama generala urmand un proces de detaliere al fiecarui bloc logic pana se ajunge la faza in care este posibila corespondenta cu o instructiune (sau grup de instructiuni) in limbaj de asamblare; pot fi mai multe etape succesive de detaliere, functie de complexitatea problemei.

2. - trecerea in limbaj de asamblare prin echivalarea fiecarui bloc logic din organigrama cu o instructiune sau grup de instructiuni; se obtine in acest fel formatul sursa al programului; se va avea in vedere respectarea regulilor de sintaxa ale directivelor programului asamblor (crossasamblor) si, respectiv, ale instructiunilor .

3. - trecerea in cod masina propriu-zis prin asamblarea programului; asamblarea se poate face manual (prin folosirea de tabele de echivalare) sau automat (cu programe de tip asamblor sau crossasamblor); listing-ul rezultant prezinta adresa instructiunilor si codul masina al acestora.

Aceasta organigrama reprezinta cea mai generala forma de rezolvare a problemei propuse. Intr-o a doua faza a primei etape de rezolvare se va urmari detalierea blocurilor logice in vederea ajungerii in faza in care fiecarui bloc ii corespunde o instructiune (sau grup de instructiuni). Trecerea trebuie facuta avand in vedere particularitatile lucrului in limbaj de asamblare la microprocesorul Z-80 si cerintele problemei. Problema propusa este una cu grad scazut de dificultate si un utilizator experimentat poate trece direct in faza programului sursa fara a mai face detalieri ale organigramei.

Pentru problema propusa, organigrama generala este urmatoarea :

Organigrama detaliata, precum si formele sursa si respectiv, obiect ale programului sunt prezentate in continuare. In forma sursa a programului se constata prezenta a doua directive ale programului asamblor. Este vorba deORG 100hsiEND . Prima directiva exprima originea programul obiect (locul in care se va depune in memoria microsistemului, in vederea rularii - in cazul nostru 100h) , iar cea de-a doua indica sfarsitul programului.

ORG 8100h

LD H,82h                        100h: 26h,82h

LD L,00h                         102h: 2Eh,00h

LD (HL),55H                  104h: 36h,55h

LD A,66h                        106h: 3Eh,66h

LD B,H              108h: 44h

LD C,01h                        109h: 0Eh,01h

LD (BC),A                      10Bh: 02h

LD D,77h                        10Ch: 16h,77h

LD L,02h                         10Eh: 2Eh,02h

LD (HL),D                      111h: 72h

LD A,88h                        112h: 3Eh,88h

LD (8203h),A 114h: 32h,03h,82h

END

 

cati cicli masina sunt necesari pentru rularea fiecarei instructiuni?

- ce valori au registri procesorului Z80 dupa rularea fiecarei instructiuni in parte?

- la sfarsitul rularii programului, care este continutul registrului B ?

- ce modificare se va face pentru a muta valoarea 20h la adresa 8210h si nu la adresa 8200h?

- realizati un program asemanator in care constantele zecimale 10, 45 si 100 sunt depuse la adresele 9000h, 9001h si 9002h.

b) Sa se realizeze un program in care se efectueaza urmatoarele transferuri de date utilizand doar registri index:

Solutie:

Dupa acum s-a aratat in partea teoretica in adresarea indexata se foloseste un deplasament care trebuie exprimat in complement fata de 2. Asadar valorile 10 , -10 , 20 si -20 au urmatoarele echivalente in CC2: 0Ah, 0xF6h, 14h si respectiv 0xECh. In continuare sunt prezentate organigrama, codul sursa si codul masina:

ORG 9100h                                 

LD IX, 8100h 100h: DDh, 21h, 00h, 81h

LD A, 20h                       104h: 2Eh, 20h

LD (IX+00h), A 106h: DDh, 77h, 00h

LD (IX+0Ah), 30h         109h: DDh, 36h, 0Ah, 30h

LD (IX-10h), 40h           10Dh: DDh, 36h, F6h, 40h

LD IY, 8100h 111h: FDh, 21h, 00h, 81h

LD B, 50h                       115h: 06h, 50h

LD (IY+14h), B 117h: FDh, 70h, 14h

LD C, 60h                       11Ah: 0Eh, 60h

LD (IY-14h), C 11Ch: FDh, 71h, ECh

END

 

cati cicli masina sunt necesari pentru rularea fiecarei instructiuni?

- ce valori au registri procesorului Z80 dupa rularea fiecarei instructiune in parte?

recalculati deplasamentele din enuntul problemei si verificati, dupa ce rulati programul, daca octetii respectivi au fost depusi la adresele corecte;

- realizati un program in care sa fie depusa constanta zecimala 23 de la adresa 0A03Dh in 5 locatii consecutive dar numai prin modificarea indexului de deplasament.

c) Sa se realizeze un program in care utilizand instructiuni pe 16 biti se completeaza adresele 8000h, 80001h, 8002h, 8003h, 8004h, 8005h cu valorile 01h, 02h, 03h, 04h, 05h, 06h.

Solutie:

ORG     9300h

LD B, 02h                       300h: 06h, 02h

LD C, 01h                       302h: 0Eh, 01h

LD (8000h), BC              304h: EDh, 43h, 00h, 80h

LD HL, 0403h                308h: 21h, 03h, 04h

LD (8002h), HL             30Bh: 22h, 02h, 80h

LD IX, 0605h                 30Eh: DDh, 21h, 05h, 06h

LD (8004h), IX               312h: DDh, 22h, 04h, 80h

END

 

cati cicli masina sunt necesari pentru rularea fiecarei instructiuni?

- de ce este diferit numarul de cicli masina la unele instructiuni?

- ce valori au registri procesorului Z80 dupa rularea fiecarei instructiuni in parte?

- daca dorim sa plasam constanta hexazecimala 3FC9h incepand de la adresa 80D0h, la ce adresa va fi plasat fiecare octet in parte?

d) Realizati un program care sa schimbe intre ele continuturile locatiilor de memorie cu adresele 8602h si 8603h.

Solutie:

Organigrama generala de rezolvare este:

O operatie directa de schimb intre doua locatii de memorie nu este posibila in mod direct, printr-o singura instructiune. Pentru rezolvare vom folosi un registru liber al microprocesorului (de exemplu registru D), in vederea pastrarii temporare a unei informatii (de exemplu, cea existenta in locatia de memorie cu adresa 8603h. Organigrama detaliata care rezulta, codul sursa si codul masina sunt :

 

ORG 8200h                    

LD A, (8602h)                200h: 3Ah, 02h, 86h

LD HL, 8603h                203h: 21h, 03h, 86h

LD D, (HL)                     206h: 56h

LD (8603h), A                207h: 32h, 03h, 86h

LD A, D                           20Ah: 7Ah

LD (8602h), A                20Bh: 32h, 02h, 86h

END

 

ce modificari apar asupra programului daca vom scrie ORG 8400h in loc de directiva existenta?

- la sfarsitul rularii programului, care este continutul registrului L ?

- care este ultima adresa ocupata pentru programul obiect a acestei probleme?

- rezolvati problema printr-o alta modalitate;

e) Realizati un program care sa schimbe intre ele locatiile de memorie cu adresele 8200h si 8300h utilizand instructiunile de accesare a stivei.

Solutie:

In acest exemplu stiva este folosita pentru salvarea temporara a valorii din locatia 8200h. Salvarea in stiva se face cu instructiunea PUSH ss, in cazul de fata PUSH AF, in A fiind incarcat octetul de la adresa 8200h. Extragerea din stiva s-a facut cu instructiunea POP AF. In continuare sunt prezentate organigrama, codul sursa si codul masina al programului:

ORG 700h

LD A, (8200h)                700h: 3Ah, 00h, 82h

PUSH AF                        703h: F5h

LD A, (8300h)                704h: 3Ah, 00h, 83h

LD (8200h), A                707h: 32h, 00h, 82h

POP AF                           70Ah: F1h

LD (8300h), A                707h: 32h, 00h, 83h

END

 

- ce valori va avea stiva si specificati adresa indicatorului de stiva dupa rularea fiecarei instructiuni.

- plasati baza stivei la adresa 700h si determinati problemele care apar la rularea programului. Care este cauza acestora?

4. Desfasurarea lucrarii

1. Se va citi si conspecta breviarul teoretic. Se atrage atentia asupra faptului ca toate cunostintele capatate in acest laborator vor fi necesare si in derularea celorlalte lucrari.

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). Realizati un program care sa efectueze urmatorul schimb de date prezentat in diagrama:

(8401h) B

D (8502h)

b). Realizati un program care sa efectueze urmatorul schimb de date :

(8600h) H

C A

5. Se va raspunde la urmatoarele intrebari:

a). Ce intelegeti prin notatia " (1234h) " ?

b). Exista instructiunea LD (1234h), (5678h) ?

c). Care sunt exprimarile in CC2 pe 8 biti pentru urmatoarele numere zecimale cu semn :

+47 , -125 , -89 , +120 , -64 ?

d). Explicati efectul rularii instructiunilor urmatoare folosind si reprezentarea grafica:

LD IX , 3456h

LD B, (IX + 0FEh)

e). Se considera urmatoarele doua forme de instructiuni :


si LD HL, 5678h

Care sunt asemanarile si deosebirile legate de toate aspectele executiei acestor doua tipuri de instructiuni ?

f). Care va fi continutul stivei dupa rularea urmatoarei secvente de instructiuni:

LD BC, 1234h

LD HL, 5678h

LD SP, 200h

PUSH BC

PUSH HL

g). Cum s-ar putea incarca registrul F cu constanta 00h ?

biologie

botanica






Upload!

Trimite cercetarea ta!
Trimite si tu un document!
NU trimiteti referate, proiecte sau alte forme de lucrari stiintifice, lucrari pentru examenele de evaluare pe parcursul anilor de studiu, precum si lucrari de finalizare a studiilor universitare de licenta, masterat si/sau de doctorat. Aceste documente nu vor fi publicate.