Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Prezentarea microsistemului realizat cu microprocesorul Z80

calculatoare



+ Font mai mare | - Font mai mic



Introducere



Scopul indrumarului este de a prezenta studentilor o structura minimala a unui microsistem realizat cu microprocesorul Z80. Microsistemul permite rularea programelor ciclu cu ciclu sau instructiune cu instructiune. In acest fel se poate urmari modul de executie a setului de instructiuni si efectul executiei instructiunilor asupra resurselor hard. Studentul este antrenat in perceptia instructiunilor scrise in cod masina prin urmarirea efectelor acestora.

In prima parte se prezinta structura microsistemului cu resursele hard aferente. Se pune in evidenta rolul dispozitivelor si circuitelor electronice utilizate.

In cea de-a doua parte se prezinta setul instructiunilor microprocesorului Z80 si modul de executie al acestor instructiuni.

Se are in vedere de asemenea si modul de tratare a intreruperilor mascabile si nemascabile.

Pentru a face trecerea de la rularea programelor in regim - pas cu pas catre regimul automat se prezinta un program cu ajutorul caruia se genereaza semnale dreptunghiulare de frecventa variabila.

Prin modul de prezentare a microsistemului se urmareste transferul unor cunostinte solide, care au la baza realitatea prin care se percep notiunile referitoare la modul de lucru a microprocesoarelor.

Prezentarea microsistemului realizat cu

microprocesorul Z80

In cadrul laboratorului se prezinta structura unui microsistem realizat cu microprocesorul Z80 de 8 biti. Microsistemul contine urmatoarele dispozitive electronice:

Microprocesorul Z80 - circuitul nr. 1;

Amplificatoarele magistralei de adrese 2 74LS373 - circuitele nr. 2 si 3;

Amplificatoarele magistralei de date 2 8216 - circuitele nr. 4 si 5;

Memoria EPROM 2716 - circuitul nr. 7;

Memoria RAM static 2 2114 - circuitele nr. 8 si 9;

Amplificatorul magistralei de comenzi 74LS125 - circuitul nr. 6;

Decodorul de adrese 74LS138 - circuitul nr. 18;

Buffer-ele de intrare/iesire 2 74LS373 - circuitele nr. 10 si 11;

Circuitele pentru generarea CLK;

Circuitele pentru generarea starilor de WAIT.

Microsistemul permite rularea programelor in regim pas cu pas si afiseaza adresele, datele si comenzile; astfel se pune in evidenta modul de executie al instructiunilor si efectul acestora. In timpul executiei se poate urmari modul de activare a semnalelor de selectie a memoriilor si circuitelor de intrare/iesire.

In cadrul orelor de laborator se urmareste evidentierea functiilor dispozitivelor electronice si modul de transfer a informatiei intre resursele microsistemului.

Instructiuni de transfer pe 8 biti

Mnemonica

Descrierea simbolica

LD r,r

r r

LD r,n

r n

LD r,(HL)

r (HL)

LD r,(Ix+d)

r (Ix+d)

LD r,(Iy+d)

r (Iy+d)

LD (HL),r

(HL) r

LD (Ix+d), r

(Ix+d) r

LD (Iy+d),r

(Iy+d) r

LD (HL),n

(HL) n

LD (Ix+d),n

(Ix+d) n

LD (Iy+d),n

(Iy+d) n

LD A,(BC)

A (BC)

LD A,(DE)

A (DE)

LD A,(nn)

A (nn)

LD (BC),A

(BC) A

LD (DE),A

(DE) A

LD (nn),A

(nn) A

LD A,I

A I

LD A,R

A R

LD I,A

I A

LD R,A

R A

unde:

r,r' reprezinta oricare dintre registrele B, C, D, E, H, L, A;

n este un octet;

(DE), (HL), (BC) o locatie de memorie a carei adresa este furnizata de data din registrele (DE), (HL), (BC);

(Ix+d), (Iy+d) indica o adresa de memorie, iar d reprezinta deplasamentul.

Instructiuni de transfer pe 16 biti, transfer pe blocuri, cautari

Mnemonica

Descrierea simbolica

LD dd,nn

dd nn

LD IX,nn

IX nn

LD IY,nn

IY nn

LD HL,(nn)

H (nn+1)

L (nn)

LD (nn),HL

(nn+1) H

(nn) L

LD dd,(nn)

ddH (nn+1)

ddL (nn)

LD (nn),dd

(nn+1) ddH

(nn) ddL

LD SP,HL

SP HL

LD SP,IX

SP IX

LD SP,IY

SP IY

PUSH qq

(SP-2) qqL

(SP-1) qqH

SP SP-2

POP qq

qqH (SP+1)

qqL (SP)

SP SP+2

PUSH IX

(SP-2) IXL

(SP-1) IXH

SP SP-2

PUSH IY

(SP-2) IYL

(SP-1) IYH

SP SP-2

POP IX

IXH (SP+1)

IXL (SP)

SP SP+2

POP IY

IYH (SP+1)

IYL (SP)

SP SP+2

EX DE,HL

DE HL

EX AF,AF'

AF AF

EXX

BC BC

DE DE

HL HL'

EX (SP),HL

H (SP+1)

L (SP)

LDI

(DE) (HL)

DE DE+1

HL HL+1

BC BC-1

LDIR

(DE) (HL)

DE DE+1

HL HL+1

BC BC-1

Se repeta pana cand BC=0

LDD

(DE) (HL)

DE DE-1

HL HL-1

BC BC-1

LDDR

(DE) (HL)

DE DE-1

HL HL-1

BC BC-1

Se repeta pana cand BC=0

CPI

A-(HL)

HL HL+1

BC BC-1

CPIR

A-(HL)

HL HL+1

BC BC-1

Se repeta pana BC=0 sau

A=(HL)

CPD

A-(HL)

HL HL-1

BC BC-1

CPDR

A-(HL)

HL HL-1

BC BC-1

Se repeta pana BC=0 sau

A=(HL)

unde: nn - reprezinta un numar format din doi octeti;

(nn) - reprezinta octetul de memorie de la adresa nn.

dd: 00, 01, 10, 11.

registre: BC, DE, HL, SP.

00 BC 01 DE    10 HL    11 SP

Instructiuni de intrare/iesire

Mnemonica

Descrierea simbolica

IN A,(n)

A (n)

IN r,(c)

r (c)

INI

(HL) (c)

B B-1

HL HL+1

INIR

(HL) (c)

B B-1

HL HL+1

Se repeta pana cand B=0

IND

(HL) (c)

B B-1

HL HL-1

INDR

(HL) (c)

B B-1

HL HL-1

Se repeta pana cand B=0

OUT (n),A

(n) A

OUT (c),r

(c) r

OUTI

(c) (HL)

B B-1

HL HL+1

OTIR

(a) (HL)

B B-1

HL HL+1

Se repeta pana cand B=0

OUTD

(c) (HL)

B B-1

HL HL-1

OTDR

(c) (HL)

B B-1

HL HL-1

Se repeta pana cand B=0

Observatie: In cazul instructiunilor IN A,(n) si OUT (n),A, pe magistrala de adrese, in timpul executiei instructiunii se afla:

A0-A7 n si A8-A15 A

In toate celelalte cazuri, in timpul executiei instructiunilor de intrare/iesire, pe magistrala de adrese se afla informatia:

A0-A7 C    A8-A15 B

Instructiuni de salt si apel de subrutina, reveniri

Mnemonica

Descrierea simbolica

JP nn

PC nn

JP cc, nn

Daca cc adevarata PC nn, altfel continua

JR e

PC PC+e

JR c, e

c=0-continua, c=1-PC PC+e

JR Nc, e

c=1-continua, c=0-PC PC+e

JR z, e

z=0-continua, z=1-PC PC+e

JR Nz, e

z=1-continua, z=0-PC PC+e

JP (HL)

PC (HL)

CALL nn

(SP-1) PCH

(SP-2) PCL

SP SP-2

PC nn

CALL cc, nn

cc=0-continua, cc=1-CALL nn

RET

PCL (SP)

PCH (SP+1)

SP SP+2

RET cc

cc=0-continua, cc=1-RET

RETN

Revenire din intrerupere nemascabila

RETI

Revenire din intrerupere

RST p

(SP-1) PCH

(SP-2) PCL

PCH

PCL p

Este echivalent cu CALL p

unde: cc conditia:

000 NZ non-zero

Z zero

010 NC non-carry

c carry

100 PO impar

101 PE par

P pozitiv

M negativ

Variabila p poate lua una din valorile 00h, 08h, 10h, 18h, 20h, 28h, 30h, 38h, iar e reprezinta un numar scris in complement fata de 2 cuprins intre -126 si 128.

Instructiuni aritmetice si logice

Mnemonica

Descrierea simbolica

ADD A, r

A A+r

ADD A, n

A A+n

ADD A, (HL)

A A+(HL)

ADD A, (Ix+d)

A A+(Ix+d)

ADD A, (Iy+d)

A A+(Iy+d)

ADD A, S

A A+S+CY

SUB S

A A-S

SBC A, S

A A-S-CY

AND S

A A S

OR S

A A S

XOR S

A A S

CP S

A-S

INC r

r r+1

INC (HL)

(HL) (HL)+1

INC (Ix+d)

(Ix+d) (Ix+d)+1

INC (Iy+d)

(Iy+d) (Iy+d)+1

DEC m

m m-1

ADD HL, ss

HL HL+ss

ADC HL, ss

HL HL+ss+CY

SBC HL, ss

HL HL-ss-CY

ADD Ix, pp

Ix Ix+pp

ADD Iy, rr

Iy Iy+rr

INC ss

ss ss+1

INC Ix

Ix Ix+1

INC Iy

Iy Iy+1

DEC ss

ss ss-1

DEC Ix

Ix Ix-1

DEC Iy

Iy Iy-1

Variabilele r, s, m, ss, pp, rr au urmatoarea semnificatie: s - poate fi r, n, (HL), (Ix+d), (Iy+d),


r Registre ss Registre pp Registre rr Registre

000 B 00 BC 00 BC 00 BC

001 C 01 DE 01 DE 01 BE

010 D 10 HL 10 Ix 10 Iy

011 E 11 SP 11 SP 11 SP

100 H

101 L

A

Instructiuni de comanda si control, rotatii si deplasari,

prelucrari pe bit

Mnemonica

Descrierea simbolica

CPL

NEG

A 0-A

CCF

CY CY

SCF

CY

NOP

nici o operatie

HALT

oprirea UC - Z80

DI

dezactivare sistem intrerupere/IFF 1, 2

EI

activare sistem intrerupere/IFF 1, 2

IM 0

stabilire mod intrerupere 0

IM 1

stabilire mod intrerupere 1

IM 2

stabilire mod intrerupere 2

RLCA

RLA

RRCA

RRA

BIT b,

Z

BIT b,

Z

BIT b,

Z

BIT b,

Z

unde: - r poate fi oricare din registrele: B, C, D, E, H, L, A.

- b reprezinta bitul testat al registrului r sau al locatiei de memorie adresata de (HL), (IX+d), (IY+d).


b Bit testat


0

1

2

3

4

5

6

7

Studiul intreruperilor si a cererilor de magistrala

In cadrul acestui laborator se prezinta modul de executie a unei intreruperi mascabile, a unei intreruperi nemascabile respectiv modul de tratare a unei cereri de magistrala.

Se descrie intreruperea mascabila si se urmareste cum se trateaza o intrerupere in modul 1. Se pune in evidenta faptul ca intreruperea mascabila este preluata si tratata la sfarsitul instructiunii curente.

Se descrie intreruperea nemascabila si se urmareste modul de tratare si felul cum se revine din intrerupere. Se pune in evidenta faptul ca intreruperea NMI este preluata in orice moment si se trateaza la sfarsitul instructiunii curente.

Se desfasoara experimentul prin care se pune in evidenta modul de preluare si cedare a magistralei sistemului. Se observa faptul ca magistralele sistemului sunt trecute in S.I.R. si se pot accesa resursele microsistemului.

Lucrari de laborator:

Lucrarea 1:

Folosinduse simulatorul de Z80 aflat pe fiecare calculator din laborator sa se ruleze pas cu pas urmatorul program realizat in limbaj de asmblare urmarindu-se cu atentie modul de executie:

Exemplu de program in asamblare z80

Fisierul

Prog . asm

Fisierul

Prog . lst

Fisierul

Prog . obj

; Ex. de pr. in asamblare Z80

; Se seteaza ; indicatorul de stiva

LD SP,0020H

JP ST

; Se stabileste adresa unde

; se plaseaza codul programului

ORG 0020H

ST: JP LP1

; Se definesc datele de intrare

LD1: .DB 04H

.DB 03H

.DB 02H

; Se defineste spatiul destinatie

SD1: .DB 00H

.DB 00H

.DB 00H

; Se seteaza constanta CT1

CT1 .EQU 14H

LP1: LD BC,LD1

LD HL,SD1

LD D,03H;

LP2: CALL R1

DEC D

JP NZ,LP2

HALT

; Rutina care aduna la data

; din memorie de la adresa (BC)

; contanta CT1si o depune

; la adresa de memorie (HL)

R1: LD A,(BC)

ADD A,CT1

LD (HL),A

INC BC

INC HL

RET

.END

0000 ; Ex. de pr. in asamblare Z80

0000 ; Se seteaza indicatorul de stiva

LD SP, 0020H

C3 20 00 JP ST

0006 ; Se stabileste adresa unde

0006 ; se plaseaza codul programului

0007 0020 .ORG 0020H

C3 29 00 ST: JP LP

0023 ; Se definesc datele de intrare

LD1: .DB 04H

.DB 03H

.DB 02H

0026 ; Se defineste spatiul destinatie

SD1: .DB 00H

.DB 00H

.DB 00H

0029 ; Se seteaza constanta CT1

0018 0029 CT1 .EQU 14H

LP1: LD BC,LD1

0020 002C LD HL,SD1

0021 002F LD D,03H;

CD 39 00 LP2: CALL R1

DEC D

C2 31 00 JP NZ,LP2

HALT

0039 ; Rutina care aduna la data

0039 ; din memorie de la adresa (BC)

0039 ; contanta CT1si o depune

0039 ; la adresa de memorie (HL)

0A R1: LD A,(BC)

0031 003A C6 14 ADD A,CT1

0032 003C LD (HL),A

0033 003D INC BC

0034 003E INC HL

0035 003F C9 RET

0036 0040 .END

0003 C3 20 00

000A 00

000B 00

000C 00

000D 00

000E 00

000F 00

001A 00

001B 00

001C 00

001D 00

001E 00

001F 00

0020 C3 29 00

002C 21 26 00

002F 16 03

0031 CD 39 00

0035 C2 31 00

0039 0A

003A C6 14

003C 77

003D 03

003E 23

003F C9

Spatiul de memorie necesar executiei programului, inaintea rularii acestuia

Spatiul de memorie necesar executiei programului, dupa rularea acestuia

Lucrara 2:

Sa se rezolve urmatoarele cerinte si apoi sa se ruleze fiecare program in parte cu ajutorul simulatorului Z80:

1. Sa se transfere in registrul B valoarea 80H si in C valoarea 10 prin intermediul unei instructiuni pe 16 biti.

2. Sa se incarce la locatia de memorie 8010H valoarea 05H.

3. Sa se incarce la adresa 8010H plus un deplasament de 10H valoarea FFH folosindu-se registrul index IX.

4. Sa se schimbe continutul locatiilor de memorie 8020H si 8010H.

5. Sa se schimbe continutul registrului D cu E dupa ce in prealabil au fost incarcate cu valorile 03H si EFH.

Lucrarea 3:

Sa se rezolve urmatoarele cerinte si apoi sa se ruleze fiecare program in parte cu ajutorul simulatorului Z80:

1. Sa se puna la adresele de memorie 7030H, 702FH,702EH,702DH,703CH valorile 55H, 54H, 53H, 52H, 51H folosind instructiunea LDDR.

2. Folosind instructiunea CPIR sa se repete ciclul doar de 4 ori stiind ca ca A=0E3H,

BC=0007H si HL=773DH.

Lucrarea 4:

Sa se rezolve urmatoarele cerinte si apoi sa se ruleze fiecare program in parte cu ajutorul simulatorului Z80:

1. Folosind instructiunea INDR sa se puna succesiv la locatiile de memorie 800DH,

800EH, 800FH, 8010H valorile D, E, F, 1. Adresa portului de intrare va fi 01H si se seteaza cu ajutorul registrului C.

2. Folosind instructiunea OTIR sa se trimita la portul de iesire de adresa 02H valorile

A, B, C stiind ca HL este 800AH.

Lucrarea 5:

Sa se rezolve urmatoarele cerinte si apoi sa se ruleze fiecare program in parte cu ajutorul simulatorului Z80:

1. Sa se adune intr-un registru acumulator valoarea citita de la portul de intrare cu adresa 00H atit timp cit este diferita de 0. Sa se afiseze continutul acumulatorului in final.

2. Sa se scada dintr-un registru ce are valoarea initiala 0 pe rind valorile citite de la portul de intrare 01H de 4 ori folosind instructiunea DNJZ. Rezultatele se vor afisa de fiecare dat la portul cu adresa 04H.

Lucrarea 6:

Sa se rezolve urmatoarele cerinte si apoi sa se ruleze fiecare program in parte cu ajutorul simulatorului Z80:

1. Sa se obtina valoarea B7H folosind instructiunea RLA.

2. Sa se obtina valoarea AEH folosind instructiunea RLCA.

3. Sa se obtina valoarea 92H folosind instructiunea RRCA.

4. Sa se obtina valoarea C5H folosind instructiunea RRA.

Lucrarea 7:

Folosind simulatorul Z80, sa se studieze cu atentie fiecare instructiune a programului de mai jos:

;Program pentru selectarea subprogramelor

LD SP,8400H

IN A,(00H)

CP 00H

JP Z,0100H

CP 01H

JP Z,0180H

CP 02H

JP Z,0200H

CP 03H

JP Z,0280H

CP 04H

JP Z,0300H

CP 05H

JP Z,0380H

CP 06H

JP Z,0400H

CP 07H

JP Z,0480H

CP 08H

JP Z,0500H

CP 09H

JP Z,0580H

HALT

;Subrutina pentru tratarea intreruperilor mascabile

.ORG 0038H

DI

PUSH BC

PUSH AF

IN A,(00H)

OUT (04H),A

POP AF

POP BC

EI

RETN

HALT

;Subrutina pentru tratarea intreruperilor nemascabile

.ORG 0066H

PUSH BC

PUSH AF

IN A,(00H)

OUT (04H),A

POP AF

POP BC

RETN

;Subprogram care ilustreaza modul de executie

;a instructiunilor de transfer pe 8 biti

.ORG 0100H

LD A,0FFH

LD HL,8010H

LD (HL),A

LD B,A

LD (HL),B

LD B,05H

LD HL,8020H

LD (HL),B

LD IX,8100H

LD IY,8200H

LD (IX+10H),C

LD (IY+20H),C

LD IX,8000H

LD D,(IX+10H)

LD IY,8000H

LD E,(IY+20H)

LD HL,8110H

LD A,(HL)

LD HL,8220H

LD A,(HL)

LD BC,8010H

LD (BC),A

PUSH BC

PUSH IX

LD BC,0000H

LD IX,0000H

POP IX

POP BC

LD (IX+01H),B

LD (IX+02H),C

LD A,01H

OUT (04H),A

HALT

;Subprogram care ilustreaza modul de

;executie a instructiunilor de transfer

;pe 16 biti, transfer de blocuri, cautari

.ORG 0180H

LD HL,8020H

LD DE,8080H

LD B,0F0H

LD C,0FH

LD (HL),B

LD A,C

LD (DE),A

EX DE,HL

LD A,(HL)

LD A,(DE)

LD A,55H

LD (HL),A

INC HL

LD (HL),A

INC HL

LD A,0FH

LD (HL),A

INC HL

LD (HL),A

LD BC,0004H

LDDR

LD DE,8030H

LD BC,0004H

LDIR

LD HL,8033H

LD DE,8010H

LD BC,0003H

LDDR

LD A,02H

OUT (04H),A

HALT

;Subprogram care ilustreaza modul de

;executie a instructiunilor de intrare/iesire

.ORG 200H

LD HL,8100H

IN A,(00H)

LD (HL),A

LD C,00H

IN D,(C)

INC HL

LD (HL),D

LD A,(HL)

OUT (04H),A

DEC HL

LD E,(HL)

LD C,04H

OUT (C),E

LD C,00H

LD B,04H

INIR

LD C,04H

LD B,03H

OTDR

LD A,03H

OUT (04H),A

HALT

;Subprogram care ilustreaza modul

;de executie a instructiunilor

;de salt si apel de subrutina, reveniri

.ORG 0300H

LD C,00H

JP 030EH

IN A,(C)

OUT (04H),A

CP 0FFH

JP Z,0305H

CALL 0324H

IN A,(C)

CP 0FFH

JP NZ,0305H

IN A,(C)

CP 0FFH

CALL Z,0324H

LD A,05H

OUT (04H),A

HALT

IN A,(C)

CP 0FFH

RET Z

LD A,55H

OUT (04H),A

RET

;Subprogram care ilustreaza modul

;de executie a instructiunilor

;aritmetice si logice

.ORG 280H

LD C,00H

IN B,(C)

IN A,(C)

ADD A,B

OUT (04H),A

IN D,(C)

IN A,(C)

SUB D

OUT (04H),A

IN E,(C)

IN A,(C)

OR E

OUT (04H),A

IN B,(C)

IN A,(C)

AND B

OUT (04H),A

IN A,(C)

CP 0FFH

PUSH AF

POP BC

LD A,C

OUT (04H),A

LD A,B

OUT (04H),A

LD A,04H

OUT (04H),A

HALT

;Subprogram prin care se pune

;in evidenta modul de executie

;a instructiunilor de comanda si control

;rotatii si deplasari, prelucrari pe bit

.ORG 380H

EI

IM 1

LD C,04H

LD A,0FH

RLCA

OUT (C),A

RRCA

OUT (C),A

SCF

RLA

OUT (C),A

CCF

RRA

OUT (C),A

DI

LD A,0FH

OUT (C),A

CPL

OUT (C),A

NOP

LD A,0F0H

BIT 7,A

JP NZ,03ACH

LD A,0FH

BIT 5,A

JP Z,03ADH

NOP

NOP

LD A,06H

OUT (04H),A

HALT

;Program pentru generarea semnalelor

;dreptunghiulare de frecventa variabila

.ORG 400H

EI

IM 1

LD C,00H

LD A,55H

OUT (04H),A

IN B,(C)

CALL 041AH

LD A,0AAH

OUT (04H),A

IN B,(C)

CALL 041AH

JP 0405H

;Rutina de temporizare

LD D,04H

DEC D

JP NZ,041CH

DEC B

JP NZ,041AH

RET

Lucrarea 8:

Programul prezentat in continuare efectueaza inmultirea a dou numere intregi cu semn. Sa se studieze cu atentie modul de realizare a lui.

; Program care realizeaza inmultirea

; a doua numere intregi reprezentate pe un octet

; Numerele apartin intervalului [-128 127]

; Se seteaza    indicatorul de stiva

LD SP,0020H

JP ST

; Se stabileste adresa unde

; se plaseaza codul programului

.ORG 0100H

ST:    JP LP1

; Se definesc datele de intrare

; Cele doua numere sunt date mai jos

LD1: .DB 0F8H

;LD2:    .DB 0F1H

LD2: .DB 0H

S1:     .DB 0H

S2: .DB 0H

SR:    .DB 0H

; Se defineste spatiul destinatie unde

; se plaseaza rezultatul

SD1: .DB 00H

.DB 00H

; Programul care realizeaza inmultirea celor doua numere

LP1: LD HL,00H

; Se citeste primul factor

LD DE,LD1

LD A,(DE)

BIT 7,A

JP Z,AP1

; Se complementeaza in raport cu doi

CPL

ADD A,01

; Se seteaza semnul la adresa S1:

PUSH HL

LD HL,S1

LD (HL),01H

POP HL

; Se compara primul factor cu zero

AP1:    CP 00H

JP Z,LP3

LD C,A

LD B,00H

; Se citeste cel de-al doilea factor

LD DE,LD2

LD A,(DE)

BIT 7,A

JP Z,AP2

; Se complementeaza in raport cu doi

CPL

ADD A,01

; Se seteaza semnul la adresa S2:

PUSH HL

LD HL,S2

LD (HL),01H

POP HL

; Se compara al doilea factor cu zero

AP2:    CP 00H

JP Z,LP3

; Se compara factorii cu 80H

LD E,A

CP 80H

JP Z,AP3

LD A,C

CP 80H

JP Z,LP2

LD A,E

CP C

; Se compara E cu C (E-C)

; si se schimba continutul acestor registre

; daca E este mai mare decat C

JP M,LP2

AP3: LD D,C

LD C,E

LD E,D

; Se realizeaza inmultirea prin adunari repetate

LP2: ADD HL,BC

DEC E

JP NZ,LP2

JP LP7

; Se trateaza cazul cand cel putin un factor este nul

LP3: LD DE,SR

LD A,03H

LD (DE),A

LP7: LD DE,SD1

LD A,H

LD (DE),A

INC DE

LD A,L

LD (DE),A

; Se trateaza semnul rezultatului

; Cazul cand cel putin un factor este nul

LD DE,SR

LD A,(DE)

CP 03

JP NZ,LP8

LD A,00

LD (DE),A

JP LP6

; Cazul cand factorii sunt nenuli

LP8:    LD B,0H

LD DE,S1

LD A,(DE)

CP 00H

JP Z,LP4

INC B

LP4: LD DE,S2

LD A,(DE)

CP 00H

JP Z,LP5

INC B

LP5: LD A,B

CP 01H

JP NZ,LP6

LD A,01H

LD DE,SR

LD (DE),A

LP6: HALT

Lucrarea 9:

Intreruperile nemascabile si intreruperile mascabile de mod 0:

LD A,0AAh

LD I,A

LD SP,0010H

LD IX,0AA30h

LD (IX+00h),00h

LD (IX+01h),0EEh

JP ST1

.ORG 0066h

PUSH AF

LD A,0CCH

OUT (0AAH),A

POP AF

RETN

.ORG 0300H

ST1: EI

IM 0

ST2: LD A,0AAH

OUT (045H),A

LD A,0FH

T1:    DEC A

JP NZ,T1

LD A,55H

OUT (045H),A

LD A,0FH

T2:    DEC A

JP NZ,T2

JP ST2

.ORG 0038H

DI

PUSH AF

JP masc

.ORG 0500h

masc: IN A,(02H)

LD B,A

AND 80H

CP 80H

JP Z,adr1

ALFA1:    LD A,B

AND 40H

CP 40H

JP Z,adr2

ALFA2:    LD A,B

AND 20H

CP 20H

JP Z,adr3

ALFA3:    LD A,B

AND 10H

CP 10H

JP Z,adr4

ALFA4:    LD A,B

AND 08H

CP 08H

JP Z,adr5

ALFA5:    LD A,B

AND 04H

CP 04H

JP Z,adr6

ALFA6:    LD A,B

AND 02H

CP 02H

JP Z,adr7

ALFA7:    LD A,B

AND 01H

CP 01H

JP Z,adr8

ALFA8:    POP AF

EI

RET

.ORG 0700h

ADR1: PUSH BC

LD A,49H

OUT (44H),A

LD A,4EH

OUT (44H),A

LD A,54H

OUT (44H),A

LD A,20H

OUT (44H),A

LD A,31H

OUT (44H),A

LD A,20H

OUT (44H),A

POP BC

JP ALFA1

ADR2: PUSH BC

LD A,49H

OUT (44H),A

LD A,4EH

OUT (44H),A

LD A,54H

OUT (44H),A

LD A,20H

OUT (44H),A

LD A,32H

OUT (44H),A

LD A,20H

OUT (44H),A

POP BC

JP ALFA2

ADR3: PUSH BC

LD A,49H

OUT (44H),A

LD A,4EH

OUT (44H),A

LD A,54H

OUT (44H),A

LD A,20H

OUT (44H),A

LD A,33H

OUT (44H),A

LD A,20H

OUT (44H),A

POP BC

JP ALFA3

ADR4: PUSH BC

LD A,49H

OUT (44H),A

LD A,4EH

OUT (44H),A

LD A,54H

OUT (44H),A

LD A,20H

OUT (44H),A

LD A,34H

OUT (44H),A

LD A,20H

OUT (44H),A

POP BC

JP ALFA4

ADR5: PUSH BC

LD A,49H

OUT (44H),A

LD A,4EH

OUT (44H),A

LD A,54H

OUT (44H),A

LD A,20H

OUT (44H),A

LD A,35H

OUT (44H),A

LD A,20H

OUT (44H),A

POP BC

JP ALFA5

ADR6: PUSH BC

LD A,49H

OUT (44H),A

LD A,4EH

OUT (44H),A

LD A,54H

OUT (44H),A

LD A,20H

OUT (44H),A

LD A,36H

OUT (44H),A

LD A,20H

OUT (44H),A

POP BC

JP ALFA6

ADR7: PUSH BC

LD A,49H

OUT (44H),A

LD A,4EH

OUT (44H),A

LD A,54H

OUT (44H),A

LD A,20H

OUT (44H),A

LD A,37H

OUT (44H),A

LD A,20H

OUT (44H),A

POP BC

JP ALFA7

ADR8: PUSH BC

LD A,49H

OUT (44H),A

LD A,4EH

OUT (44H),A

LD A,54H

OUT (44H),A

LD A,20H

OUT (44H),A

LD A,38H

OUT (44H),A

LD A,20H

OUT (44H),A

POP BC

JP ALFA8

.ORG 0EE00h

PUSH AF

LD A,0CCH

OUT (0AAH),A

POP AF

RETI

.END

Lucrarea 10:

Intreruperile nemascabile si intreruperile mascabile de mod 1:

LD SP,0010H

JP ST1

.ORG 0010h

PUSH AF

LD A,0CCH

OUT (0AAH),A

POP AF

RETI

.ORG 0066h

PUSH AF

LD A,0CCH

OUT (0AAH),A

POP AF

RETN

.ORG 0300H

ST1: EI

IM 0

ST2: LD A,0AAH

OUT (045H),A

LD A,0FH

T1:    DEC A

JP NZ,T1

LD A,55H

OUT (045H),A

LD A,0FH

T2:    DEC A

JP NZ,T2

JP ST2

.END

Lucrarea 11:

Intreruperile nemascabile si intreruperile mascabile de mod 2:

LD A,0AAh

LD I,A

LD SP,0010H

LD IX,0AA30h

LD (IX+00h),00h

LD (IX+01h),0EEh

JP ST1

.ORG 0066h

PUSH AF

LD A,0CCH

OUT (0AAH),A

POP AF

RETN

.ORG 0300H

ST1: EI

IM 2

ST2: LD A,0AAH

OUT (045H),A

LD A,0FH

T1:    DEC A

JP NZ,T1

LD A,55H

OUT (045H),A

LD A,0FH

T2:    DEC A

JP NZ,T2

JP ST2

.ORG 0038H

DI

PUSH AF

JP masc

.ORG 0500h

masc: IN A,(02H)

LD B,A

AND 80H

CP 80H

JP Z,adr1

ALFA1:    LD A,B

AND 40H

CP 40H

JP Z,adr2

ALFA2:    LD A,B

AND 20H

CP 20H

JP Z,adr3

ALFA3:    LD A,B

AND 10H

CP 10H

JP Z,adr4

ALFA4:    LD A,B

AND 08H

CP 08H

JP Z,adr5

ALFA5:    LD A,B

AND 04H

CP 04H

JP Z,adr6

ALFA6:    LD A,B

AND 02H

CP 02H

JP Z,adr7

ALFA7:    LD A,B

AND 01H

CP 01H

JP Z,adr8

ALFA8:    POP AF

EI

RET

.ORG 0700h

ADR1: PUSH BC

LD A,49H

OUT (44H),A

LD A,4EH

OUT (44H),A

LD A,54H

OUT (44H),A

LD A,20H

OUT (44H),A

LD A,31H

OUT (44H),A

LD A,20H

OUT (44H),A

POP BC

JP ALFA1

ADR2: PUSH BC

LD A,49H

OUT (44H),A

LD A,4EH

OUT (44H),A

LD A,54H

OUT (44H),A

LD A,20H

OUT (44H),A

LD A,32H

OUT (44H),A

LD A,20H

OUT (44H),A

POP BC

JP ALFA2

ADR3: PUSH BC

LD A,49H

OUT (44H),A

LD A,4EH

OUT (44H),A

LD A,54H

OUT (44H),A

LD A,20H

OUT (44H),A

LD A,33H

OUT (44H),A

LD A,20H

OUT (44H),A

POP BC

JP ALFA3

ADR4: PUSH BC

LD A,49H

OUT (44H),A

LD A,4EH

OUT (44H),A

LD A,54H

OUT (44H),A

LD A,20H

OUT (44H),A

LD A,34H

OUT (44H),A

LD A,20H

OUT (44H),A

POP BC

JP ALFA4

ADR5: PUSH BC

LD A,49H

OUT (44H),A

LD A,4EH

OUT (44H),A

LD A,54H

OUT (44H),A

LD A,20H

OUT (44H),A

LD A,35H

OUT (44H),A

LD A,20H

OUT (44H),A

POP BC

JP ALFA5

ADR6: PUSH BC

LD A,49H

OUT (44H),A

LD A,4EH

OUT (44H),A

LD A,54H

OUT (44H),A

LD A,20H

OUT (44H),A

LD A,36H

OUT (44H),A

LD A,20H

OUT (44H),A

POP BC

JP ALFA6

ADR7: PUSH BC

LD A,49H

OUT (44H),A

LD A,4EH

OUT (44H),A

LD A,54H

OUT (44H),A

LD A,20H

OUT (44H),A

LD A,37H

OUT (44H),A

LD A,20H

OUT (44H),A

POP BC

JP ALFA7

ADR8: PUSH BC

LD A,49H

OUT (44H),A

LD A,4EH

OUT (44H),A

LD A,54H

OUT (44H),A

LD A,20H

OUT (44H),A

LD A,38H

OUT (44H),A

LD A,20H

OUT (44H),A

POP BC

JP ALFA8

.ORG 0EE00h

PUSH AF

LD A,0CCH

OUT (0AAH),A

POP AF

RETI

.END

Lucrarea 12:

Probleme propuse:

1. Sa se realizeze un program care sumeaza fara semn continutul locatiilor de memorie cu adresele 40A0H si 40A1 si salveaza rezultatul la adresele 40B0H si 40B1.

Atentie: Sa se tina cont de faptul ca poate exista transport la bitul cel mai semnificativ care trebuie salvat in memoria RAM.

2. Sa se realizeze un program care initializeaza cu FFH adresele din memorie cuprinse intre 4080H si 408FH.

3. Sa se realizeze un program care initializeaza blocul de memorie cuprins in tre adresele 4100H si 411FH cu valorile 0, 1, 2, , 1FH.

4. Sa se modifice in mod corespunzator programul de la exerciciul 3 astfel incat initializarea sa se realices in ordine inversa () de la 4100H la 411FH cu valorile 1FH, 1EH, , 0.

5. Sa se faca programul care copiaza blocul de memorie cuprins intre adresele 0000H si 001FH. Copierea se va face in zona de memorie incepand de la adresa 41000H.

6. Sa se faca programul care gaseste maximul si minimul a 16 date de un byte aflate in memoria RAM incepand de la adresa 4050H. Maximul si minimul se vor salva la adresele 40A0H si respectiv 40B0H.

7. Sa se faca programul care sumeaza doua date de 8 biti aflate la adresele de memorie 5050H si respectiv 4060H si salveaza rezultatul incepand cu adresa 40A0H. Datorita faptului ca Z80 salveaza datele in memorie cu biti mai semnificativi la adrese mai mari, in cazul in care se produce transport final, acesta trebuie sa se salveze la adresa 40A8H, daca nu este transport, valoarea de la adresa respectiva trebuie pusa la zero.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1232
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved