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
» Laborator microprocesoare


Laborator microprocesoare


SETUL DE INSTRUCTIUNI AL mR Z - 80 ( IV )

1.Obiectul lucrarii



Se finalizeaza studiul setului de instructiuni al microprocesorului Z-80 cu urmatoarele grupe:

- instructiunile de rotatie si deplasari;

- instructiunile de lucru cu circuitele de intrare-iesire ( I/O );

Se prezinta aplicatii cu acestea.

2.Breviar teoretic

XIV. Grupa instructiunilor de rotatie si deplasare

A . Subgrupa instructiunilor de rotatie

a). RLC s - (rotate left with carry) - rotatie la stanga cu carry

Simbolic:

s I Apar situatiile:

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

RLC r

CBh

0 s s s

initial A 20h

RLC A

final A 40h

daca HL 100h

initial (100h) 30h

RLC (HL)

final (100h) = 60h

RLC (HL)

CBh, 06h   

RLC (IX + e)

DDh, CBh

e, 06h

RLC (IY + e)

FDh, CBh

e, 06h   

b). RL s - (rotate left through carry) - rotatie la stanga prin intermediul bitului carry

Simbolic:

s I Apar situatiile:

Instructiune

S

Z

H

O

N

C

T

L

Cod masina

Exemplu

RL A

CBh

0 0 0 1 0 s s s

initial A 20h

RL A

final A 40h   

daca Cy =0 sau

A 41h daca

Cy =1

RL r

CBh

0 0 0 1 0 s s s

RL (HL)

CBh, 16h   

RL (IX + e)

DDh, CBh

e, 16h

RL (IY + e)

FDh, CBh

e, 16h   

c). RRC s - (rotate right with carry) - rotatie la dreapta cu carry

Simbolic:

s I Apar situatiile:

Instructiune

S

Z

H

O

N

C

T

L

Cod masina

Exemplu

RRC A

CBh

0 0 0 0 1 s s s

Daca IX 100h e=0

initial    (100h)=40h

RRC (IX+e)

final (100h) = 20h

initial A 80h

RRC A

final A 40h

RRC r

CBh

0 0 0 0 1 s s s

RRC (HL)

CBh, 0Eh   

RRC (IX + e)

DDh, CBh

e, 0Eh

RRC (IY + e)

FDh, CBh

e, 0Eh   

d). RR s - (rotate right through carry) - rotatie la dreapta prin intermediul bitului carry

Simbolic:


s I Apar situatiile :

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

RR A

CBh

0 0 0 1 1 s s s

daca IX 100h e=0

initial (100h)=40h

RR (IX+e)

final (100h) = 20h

daca Cy =0 sau

(100h)=21h daca

Cy =1

RR r

CBh

0 0 0 1 1 s s s

RR (HL)

CBh, 1Eh   

RR (IX + e)

DDh, CBh

e, 1Eh

RR (IY + e)

FDh, CBh

e, 1Eh   

OBSERVATIE . La microprocesorul Z-80, pentru acumulator exista in plus 4 instructiuni de rotatie, dar care sunt compatibile cu cele descrise anterior. Diferenta intre cele doua tipuri de instructiuni apare doar din punctul de vedere al mnemonicii folosite si al codului masina propriu-zis. Aceste instructiuni au aparut ca urmare a echivalentei software dintre microprocesoarele Z-80 si 8080. La 8080 existau instructiuni de rotatie doar pentru acumulator (codul masina avand 1 octet).

Exista urmatoarele echivalente:

B . Subgrupa instructiunilor de deplasare

a). SLA s - (shift left arithmetic) - deplasare stanga aritmetica


s I

In primul bit D0 (bitul cmps) se aplica "0" logic si are loc deplasarea cu o pozitie spre stanga a celorlalti biti. Ultimul bit D7 (bitul cms), trece in indicatorul carry din registrul indicatorilor de conditii F.

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

SLA r

CBh

0 0 1 0 0 s s s

daca X 100h e=0

initial (100h)=80h

SLA (IX+e)

final (100h) = 0h

iar Cy =1

SLA (HL)

CBh, 26h   

SLA (IX + e)

DDh, CBh

e, 26h

SLA (IY + e)

FDh, CBh

e, 26h   

b). SRA s - (shift right arithmetic) - deplasare dreapta aritmetica


s I

Bitul D7 (cms) se deplaseaza la dreapta si se repeta. Ceilalti biti se deplaseaza cu o pozitie spre dreapta, iar ultimul bit D0 (cmps) trece in indicatorul carry din registrul indicatorilor de conditii F.

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

SRA r

CBh

0 0 1 0 1 s s s

initial B 81h

SRA B

final B=0C0h si

Cy=1

SRA (HL)

CBh, 2Eh   

SRA (IX + e)

DDh, CBh

e, 2h

SRA (IY + e)

FDh, CBh

e, 2Eh   

c). SRL s - (shift right logic) - deplasare dreapta logica


s I

In bitul D7 (cms), se aplica "0" logic si are loc o deplasare spre dreapta cu o pozitie a tuturor bitilor. Ultimul bit D0 (cmps) trece in indicatorul carry din registrul indicatorilor de conditii F.

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

SRL r

CBh

0 0 1 1 1 s s s

initial B 81h

SRL B

Final B 40h si Cy=1

daca IY 200h e=0

initial (20h)=44h

SRL (IY+e)

final(20h)=22h Cy=0

SRL (HL)

CBh, 3Eh   

SRL (IX + e)

DDh, CBh

e, 3Eh

SRL (IY + e)

FDh, CBh

e, 3Eh   

OBSERVATIE. Instructiunile de deplasare, precum si cele de rotatie pot fi folosite pentru efectuarea operatiilor aritmetice de inmultire si impartire. Sa consideram numarul binar 00000100 ( 2 ) , adica 4 (1 0 ).

In cazul unei deplasari la stanga (situatia unei instructiuni SLA), se obtine numarul 00001000 (2) , adica 8 (10) . Dupa inca o deplasare la stanga se obtine 00010000 ( 2 ) , adica 10 ( 16) . Rezulta ca o deplasare aritmetica stanga echivaleaza cu o inmultire cu 2. In mod similar, o deplasare logica la dreapta echivaleaza cu o impartire cu 2.

Intr-un alt exemplu, sa consideram operatia de inmultire a numerelor 4 si 5 pentru care rezultatul este 20. In binar, folosind tehnica produselor partiale, operatia se deruleaza astfel :

00000100 x - deinmultitul

00000101 - inmultitorul

-----------

00000100 - primul produs partial

000000000 - al doilea produs partial

0000010000 - al treilea produs partial

----- ----- -------

000001000100 - rezultatul 20 ( 1 0 )

Se observa ca produsele partiale nenule apar pentru situatiile in care bitii corespunzatori din cadrul deinmultitului sunt "1" logic. In aceste situatii, produsul partial reprezinta chiar deinmultitul, deplasat la stanga cu acel numar de pozitii, corespunzator pozitiei bitului din inmultitor pentru care se efectueaza respectivul produs partial. Deplasarea se va putea realiza fie cu instructiuni de deplasare, fie cu instructiuni de rotatie avand grija ca pe pozitia bitului cmps sa se aplice "0" logic.

C. Subgrupa operatiilor de rotatie la nivel de nibble

a). RLD - (rotate left one digit) - rotatie la nivel de nibble la stanga, intre acumulator si o locatie de memorie adresata de HL. Se face conform urmatoarei scheme, in care nibble - ul superior din A nu este afectat:


A (HL)

b). RRD - (rotate right one digit) - rotatie la nivel de nibble la dreapta, intre acumulator si o locatie de memorie adresata de HL. Se face conform urmatoarei scheme, in care nibble-ul superior din A nu este afectat:


Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

RLD

EDh

6Fh

A 85h HL 200h    (200h)=01h

RLD

A 80h (200)=18h

RRD

Deh

67h

A 85h HL 200h

(200h)=01h

RRD

A 81h (200h)=05h

OBSERVATIE . Operatiile RLD si RRD pot fi folosite pentru despartirea in nibble ai unui octet. Sa consideram in urmatorul exemplu A = 00h si (HL) = 29h. Dupa operatia RRD , obtinem A = 09h si (HL) = 02h, adica cei doi nibble constituenti ai octetului initial au fost despartiti, formandu-se doi noi octeti care au pe primii patru biti mai semnificativi "0" logic.

XV ) . Grupa instructiunilor la nivel de bit

a). BIT b , s - testeaza bitul b din cadrul sursei s.

s I ; b I

Simbolic : Z sb ; bitul b al sursei s, negat trece in indicatorul de conditii Z .

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

BIT b ,r

CBh

0 1 b b b s s s

B←81h

BIT 7 ,B

rezulta Z=0

BIT 0,B

rezulta Z=1

BIT b ,(HL)

CBh

01 b b b 1 1 0

BIT b ,(IX + e)

DDh, CBh ,e

0 1 b b b 1 1 0

BIT b ,(IY +e)

FDh, CBh,    e

0 1 b b b 1 1 0

b). SET b , s - setarea bitului b din sursa s

s I ; b I

Simbolic : sb 1 Apar situatiile :

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

SET b ,r

CBh

1 1 b b b s s s

HL←200h

(200h)=00h

SET 7,(HL)

(200h)=80h

SET b ,(HL)

CBh

1 1 b b b 1 1 0

SET b ,(IX + e)

DDh, CBh ,e

1 1 b b b 1 1 0

SET b ,(IY +e)

FDh, CBh,    e

1 1 b b b 1 1 0

c). RES b , s - resetarea unui bit din sursa s

s I ; b I

Simbolic : sb

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

RES b ,r

CBh

1 0 b b b s s s

HL←200h

(200h)=80h

RES 7,(HL)

(200h)=00h

RES b ,(HL)

CBh

1 0 b b b 1 1 0

RES b ,(IX + e)

DDh, CBh ,e

1 0 b b b 1 1 0

RES b ,(IY +e)

FDh, CBh,    e

1 0 b b b 1 1 0

XVI ) . Grupa instructiunilor de intrare - iesire

Prin intermediul instructiunilor din aceasta grupa, procesorul poate sa interactioneze cu circuitele I/O. In cadrul executiei acestor instructiuni, apar cicli de tip citire I/O, respectiv, scriere I/O, cicli in care semnalul IORQ se activeaza.

A. Subgrupa instructiunilor de citire a porturilor de intrare

a). IN A , (n8) - transfera in A continutul portului de intrare cu adresa specificata prin constanta pe 8 biti, n8.

Simbolic : A (n8)

b). IN r , (C) - transfera in registrul general r, continutul portului de intrare cu adresa pe 8 biti, precizata in registrul C.

Simbolic : r (C)

c). INI - (input & increment) - citeste portul de intrare si incrementeaza


Simbolic :   

Instructiunea depune in memorie, la adresa specificata de registrul dublu HL, continutul portului de intrare adresat prin intermediul continutului registrului C. Adresa de memorie (continutul registrului dublu HL ) se incrementeaza la executia instructiunii, in vederea pregatirii unei depuneri ulterioare, prin aceeasi instructiune. Registrul B poate fi folosit pe post de contor al numarului de citiri ce se vor efectua, el decrementandu-se la fiecare citire si depunere.

Pentru ca instructiunea sa se deruleze corect este necesar ca in prealabil sa incarcam:

- in registrul C, adresa pe 8 biti a portului de intrare;

- in registrul HL, adresa de inceput a zonei de memorie in care se va face depunerea;

- in registrul B, numarul de citiri si depuneri ce se vor efectua, daca instructiunea va fi rulata repetat.

d). INIR - (input, increment & repeat) - citeste, incrementeaza si repeta

Simbolic :


Sunt valabile toate observatiile prezentate la instructiunea anterioara, cu precizarea ca se executa repetat pana cand B = 0. Numarul maxim de repetari este dat de capacitatea maxima a lui B, adica 255.

e). IND - (input & decrement) - citeste si decrementeaza

Simbolic :

Sunt valabile observatiile de la instructiunea INI, cu precizarea ca in HL, initial, trebuie sa se incarce adresa de sfarsit a zonei in care se va face depunerea; la executie repetata a instructiunii, transferurile se fac de la sfarsitul zonei de memorie catre inceputul acesteia.

f). INDR - (input, decrement & repeat) - citeste, decrementeaza si repeta

Simbolic :

Aceasta instructiune este practic instructiunea anterioara IND, executata repetat de numarul indicat de registrul B.

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

IN A ,(n8)

DBh

n8

(29h)=44h

IN A ,(29h)

A←44h

HL←200h C←20h

B←10h (20h)=55h

IND

(200h)=55h B←0Fh

IN r ,(C)

EDh

01 d d d 0 0 0

INI

EDh    A2h

INIR

EDh    B2h

IND

EDh

AAh

INDR

EDh

BAh

B. Subgrupa instructiunilor de scriere a porturilor de iesire

a). OUT ( n8 ) , A - transfera continutul acumulatorului la portul de iesire cu adresa specificata de constanta pe 8 biti, n8.

Simbolic : (n8) A

b). OUT (C) , r - transfera continutul acumulatorului la portul de iesire cu adresa specificata in registrul C; in prealabil, in registrul C trebuie incarcata adresa portului de iesire in care se vor depune datele.

Simbolic :    (C) r

c). OUTI - (output & increment) - iesire si incrementare ;

Simbolic:


Pentru ca aceasta instructiune sa se deruleze corect este necesar sa incarcam:

- in registrul C, adresa portului de iesire cu care se va lucra ;

- in registrul dublu HL, adresa de inceput a zonei de memorie de la care se va face preluarea in vederea transferului ;

- in registrul B, numarul de preluari si scrieri ce se vor efectua , daca instructiunea se va efectua repetat.

Instructiunea se autopregateste pentru o noua rulare, prin incrementarea lui HL si decrementarea lui B.

d). OTIR - (output, increment & repeat) - iesire , incrementare si repeta

Simbolic :

Este practic instructiunea anterioara (INI), dar executata repetat de numarul de ori indicat de registrul B.

e). OUTD - (output & decrement ) - iesire si decrementare

Simbolic:   


Sunt valabile precizarile de la instructiunea OUTI, cu observatia ca in registrul HL, in prealabil, trebuie incarcata adresa de sfarsit a zonei de memorie de la care se fac preluarile. La executia repetata a instructiunii, preluarile din memorie se fac de la adresa de sfarsit catre adresa de inceput a zonei.

f). OTDR - (output, decrement & repeat) - iesire , decrementare si repetare

Simbolic:    (C) (HL)

HL HL - 1 - se repeta pana cand B=0

B B - 1

Sunt valabile precizarile facute la instructiunea anterioara, cu observatia ca instructiunea se executa repetat de numarul de ori indicat de registrul B.

Instructiune

S

Z

H

O

N

C

t

L

Cod masina

Exemplu

OUT (n8) ,A

D3h

n8

A 44h

OUT A ,(33h)

(33h)=44h

HL←200h C←20h

B←10h (200h)=35h

OUTI

(20h)=35h B←0Fh

OUT (C) ,r

EDh

0 1 s s s 0 0 1

OUTI

EDh    A3h

OTIR

EDh    B3h

OUTD

EDh

ABh

OTDR

EDh

BBh

3. PROBLEME REZOLVATE

Se considera un sir de numere aflat in memoria unui microsistem cu microprocesor Z-80, incepand cu adresa 9000h. Marimea sirului este de 100 numere, reprezentate pe un octet. Sa se codeze acest sir prin schimbarea nibble-ului superior cu nibble-ul inferior din fiecare octet si plasarea noului sir incepand cu adresa 9100h.

Solutie:

Operatie de codare consta in efectuarea a patru rotatii la stanga (sau la dreapta) a bitilor fiecarui octet. Rezolvarea este prezentata in continuare:

ORG 100h

LD HL, 9000h

LD B, 64h

LD IX, 9100h

ET1:    LD A, (HL)

RLCA

RLCA

RLCA

RLCA

LD (IX+0h), A

INC HL

INC IX

DEC B

JP NZ, ET1

END

 

In memoria unui microsistem cu microprocesor Z-80 se gaseste la adresa 8000h un numar reprezentat pe un octet. Sa se efectueze asupra sa urmatoarele operatii :

a) sa se inmulteasca cu 2 si sa se plaseze rezultatul incepand cu adresa 8010h

b) sa se inmulteasca cu 8 si sa se plaseze rezultatul incepand cu adresa 8020h

c) sa se imparta la 2 si sa se plaseze catul la adresa 8030h si restul la adresa 8031h

d) sa se imparta la 8 si sa se plaseze catul la adresa 8040h si restul la adresa 8041h

Operatiile vor fi efectuate prin instructiuni de deplasare.

Solutie:

a)

ORG 4000h

LD A, (8000h)

LD C, A

LD B, 0h

SLA C

RL B

LD (8010h), BC

END

 

b)

ORG 4000h

LD A, (8000h)

LD C, A

LD B, 0h

SLA C

RL B

SLA C

RL B

SLA C

RL B

LD (8020h), BC

END

 

c)

ORG 4000h

LD A, (8000h)

LD C, A

LD B, 0h

SRL C

RL B

LD (8030h),BC

END

 

d)

ORG 4000h

LD A, (8000h)

LD C, A

LD B, 0h

SRL C

RL B

SRL C

RL B

SRL C

RL B

LD (8040h), BC

END

 

Sa se realizeze un program care sa converteasca in cod ascii orice numar hexazecimal exprimat pe un octet. Initial numarul se afla in memorie la locatia cu adresa 8200h. Rezultatul va fi depus incepand cu adresa 8300h.

Solutie

Practic, problema cere ca plecand de la octetul exprimat in binar (hexazecimal), sa obtinem doi octeti care reprezinta codurile ASCII ale celor doua "jumatati" (nibble) ale octetului initial. In cod ASCII cifrele, de la 0 pana la 9, au codurile ASCII cuprinse intre 30h si 39h, respectiv. Pentru literele mari (majusculele) codurile ASCII incep de la 41h (pentru "A"), continuand cu pastrarea ordinii alfabetice. Tinand seama de aceste particularitati ale codului ASCII, este nevoie de o corectie care trebuie facuta in felul urmator :

- daca numarul binar (hexazecimal) este cuprins intre 00h si 09h, corectia se face prin adunare cu 30h.

De exemplu : 03h are in cod ASCII echivalentul 33h

corectia implica: 03h + 30h = 33h

- daca numarul binar (hexazecimal) este cuprins intre 0Ah si 0Fh, corectia se face prin adunare cu 37h.

De exemplu : 0Bh are in cod ASCII echivalentul 42h

corectia implica: 0Bh + 37h = 42h

Pentru rezolvarea problemei cerute rezulta ca va trebui sa "spargem" octetul de convertit in doua parti, obtinandu-se astfel doi octeti in care cei doi nibble ai octetului initial sa apara pe pozitiile cmps ale acestora. Cei 4 biti mai semnificativi ai acestor doi octeti trebuie sa fie 0. Va urma testul de apartenenta in una din cele doua categorii anterioare (cifra sau litera) si realizarea corectiei corespunzatoare.

Spre exemplu, pentru numarul binar 10110011( 2 ) , va trebui afisat in hexazecimal B3h. In acest sens va trebui sa obtinem doi octeti 42h (codul ASCII pentru B) si 33h (codul ASCII pentru 3).

Organizam programul sub forma unui program principal ce apeleaza o subrutina care realizeaza conversia ASCII.

* program principal *

subrutina de conversie in cod ascii *

Initial, subrutina ce realizeaza conversia (CONV_ASCII) primeste in acumulator octetul de convertit. Subrutina foloseste locatia de memorie cu adresa 8201h, pentru executia instructiunii RRD, in vederea despartirii in nibble ai octetului. Dupa operatia RRD, in acumulator se obtine ocmps-ul din viitorul echivalent ASCII, iar in locatia de memorie adresata de registrul HL, ocms-ul. Urmeaza corectia ASCII pentru rezultatul din acumulator si plasarea acestuia in registrul E, respectiv, corectia continutului locatiei de memorie adresata de HL si plasarea rezultatului obtinut in registrul D. In concluzie, subrutina de conversie ASCII primeste in A octetul de convertit si plaseaza rezultatul (2 octeti) in registrii D si E.

In format sursa si respectiv, obiect se obtine:

;* program principal *

ORG 100h

LD SP,100h    100h : 31h 00h 01h

LD HL,200h    103h : 21h 00h 02h

LD A, (HL)    106h : 7Eh

CALL CONV_ASCII 107h : CDh 00h 03h

LD A, D    10Ah : 7Ah

LD (8300h), A    10Bh : 32h 00h 83h

LD A, E    10Eh : 7Bh

LD (8301h), A    10Fh : 32h 01h 83h

HALT 112h : 76h

;* subrutina de conversie ASCII *

ORG 300h

CONV_ASCII:     LD HL,201h 300h : 21h 01h 02h

LD (HL),A 303h : 77h

LD A,00h 304h : 3Eh 00h

RRD 306h : EDh 67h

CP 0Ah 308h : FEh 0Ah

JP Z ,ET1 30Ah : CAh 10h 03h

JP C ,ET2 30Dh : DAh 15h 03h

ET1 :    DD A,37h 310h : C6h 37h

JP,ET3 312h : C3h 17h 03h

ET2 :    ADD A,30h 315h : C6h 30h

ET3 : LD E,A 317h : 5Fh

LD A,(HL) 318h : 7Eh

CP 0Ah 319h : FEh 0Ah

JP Z, ET4 31Bh : CAh 21h 03h

JP C, ET5 31Eh : DAh 26h 03h

ET4 :     ADD A,37h 321h : C6h 37h

JP ET6 323h : C3h 28h 03h

ET5 :     ADD A,30h 326h : C6h 30h

ET6 : LD D,A 328h : 57h

RET 329h : C9h

Se considera doua numere binare reprezentate pe cate un octet fiecare. Primul numar este plasat in memorie la adresa 8300h, iar cel de-al doilea numar la adresa 8400h. Se cere realizarea unui program pentru efectuarea operatiei de inmultire intre cele doua numere cu plasarea rezultatului in memorie de la adresa 8500h, incepand cu ocmps-ul.

Solutie:

Un algoritm rapid de efectuare a operatiei de inmultire presupune obtinerea de produse partiale si cumularea lor imediat dupa obtinere intr-un produs partial. Aceasta metoda a fost explicata pe larg la prezentarea instructiunii SRL (vezi mai sus).

Pentru situatia inmultirii a 2 octeti sunt necesare urmatoarele locatii:

- 2 octeti pentru cumularea produselor partiale si obtinerea rezultatului final.Vom folosi pentru aceasta registrul dublu HL.

OBS: - registrul HL permite operatii de genul:

HL ← HL + DE sau HL ← HL + BC

- la initializare HL ← 0h

-pentru obtinerea produselor partiale vom folosi registrul dublu DE

OBS: - la initializare D ← 0h si E ← deinmultit

- vom pastra inmultitorul in registrul C. Asupra acestuia la fiecare pas se va efectua o operatie de shift-are la dreapta. Algoritmul se va incheia in momentul in care C devine 0h

Se va avea in vedere situatia in care unul din cei doi operanzi e zero, caz in care rezultatul e 0 si nu mai e necesara efectuarea operatiei de inmultire.

O alta masura de optimizare consta in determinarea celui mai mare dintre operanzi si considerarea lui ca deinmultit. In acest fel se reduce numarul de pasi pe care algoritmul il face.

* programul sursa *

ORG 2000h

LD HL, 0h

LD D, 0h

LD A, (8300h)

CP 0h

JP Z, ET1

LD B, A

LD A, (8400h)

CP 0h

JP Z, ET1

CP B

JP NC, ET2

LD E, A

LD C, B

JP ET3

ET2: LD C, A

LD E, B

ET3: SRL C

JP NC, ET4

ADD HL, DE

ET4: SLA E

RL D

LD A, C

CP 0h

JP NZ, ET3

ET1: LD (8500h), HL

END

5. Se considera un numar binar reprezentat pe un octet si plasat in memoria unui microsistem la adresa 8500h. Se cere realizarea unui program pentru obtinerea echivalentului sau BCD si plasarea acestuia in memorie de la adresa 8600h incepand cu ocmps. Rezolvarea se va efectua pe caz general.

Solutie:

Se considera numarul binar : 11010111(2) = D7h

Formula de calcul a valorii zecimale este:

Pe caz genereal avem : Xn Xn-1 Xn-2Xn-3 . .-X1 X0

In formula de mai sus prin scoaterea de factor comun pe 2 in mod repetat se ajunge la formula:

Valoarea zecimala = 2( . 2(2(2Xn + Xn-1) + Xn-2) + Xn-3 . ..) + X0

La fiecare pas se dubleaza numarul precedent si se aduna bitul urmator. Dupa n pasi se ajunge la numarul zecimal cautat.

La dublarea numarului trebuie avut in vedere ca asupra lui trebuie aplicata o corectie zecimala. Aceasta se face prin instructiunea DAA. Reamintim ca aceasta instructiune este valabila operatia a fost una artimetica si numarul supus operatiei a fost exprimat in BCD.

In rezolvarea problemei s-au folosit urmatoarele locatii:

registrul C pentru pastrarea numarului binar. El va fi deplasat la stanga cu o pozitie la fiecare pas in vederea obtinerii numarului bitilor numarului de convertit

registrul B pentru mentinerea numarului de biti al numarului binar de convertit ( in acest caz B = 8)

rezultatul unei astfel de conversii se reprezinta pe 2 octeti si pentru aceasta s-a folosit registrul HL. Initial acesta este initializat co 0h

Organigrama si listingul programului sunt prezentate mai jos:

ORG 0A000h

LD A, (8500h)

LD C, A

LD HL, 0h

LD B , 0h

ET1:    SLA C

LD A, L

ADC A, A

DAA

LD L, A

LD A, H

ADC A, A

DAA

LD H, A

DEC B

JP NZ, ET1

LD A, L

LD (8600h), A

LD A, H

LD (8601h), A

END

 

4. 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.

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 considera doua numere reprezentate pe cate 6 octeti fiecare. Primul numar este plasat in memoria unui microsistem cu microprocesor Z-80, incepand cu adresa 1000h si cu octetul cel mai putin semnificativ, iar al doilea numar de la adresa 2000h , tot incepand cu octetul cel mai putin semnificativ. Se cere realizarea operatiei de adunare intre cele doua numere cu plasarea rezultatului de la adresa 3000h incepand cu octetul cel mai putin semnificativ. Adunarea se va trata pe caz general, iar algoritmul se doreste cat mai optim cu putinta.

b). Se considera doua numere binare reprezentate pe cate un octet fiecare. Primul numar este plasat in memorie la adresa 300h, iar cel de-al doilea numar la adresa 400h. Se cere realizarea unui program pentru efectuarea operatiei de inmultire intre cele doua numere cu plasarea rezultatului in memorie de la adresa 500h, incepand cu ocmps-ul.

c). Se considera doua numere reprezentate pe cate doi octeti fiecare. Primul numar este plasat in memoria unui microsistem de la adresa 200h, incepand cu ocmps-ul, iar cel de-al doilea numar se afla la adresa 300h, incepand tot cu ocmps-ul. Se cere realizarea operatiei de inmultire intre cele doua numere (tratare pe caz general) cu plasarea rezultatului incepand cu adresa 400h si cu ocmps-ul.

d). Se considera un numar binar reprezentat pe un octet si plasat in memoria unui microsistem la adresa 500h. Se cere realizarea unui program pentru obtinerea echivalentului sau BCD si plasarea acestuia in memorie de la adresa 600h incepand cu ocmps. Rezolvarea se va efectua pe caz general.

e). Se considera un numar BCD mai mic decat 255(10) . Acest numar este plasat in memoria unui microsistem de la adresa 700h, incepand cu ocmps. Se cere realizarea unui program pentru obtinerea echivalentului sau binar si plasarea acestuia in memorie de la adresa 800h.





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate

Electronica




Caracteristicile in V
Actiuni asupra cuplajelor
Proiectare PCB si radiatoare PCB
Proiect de diploma T.P.C.L.P.
Densitatea de curent
Valorile efective ale tensiunilor si curentilor alternativi
Studiul caracteristicilor de frecventa ale sistemelor liniare invariante
Redresoare
JONCTIUNEA P-N
Executia centralelor hidroelectrice supraterane




termeni
contact

adauga