Technika Mikroprocesorowa, UPROCKI 2 CW NR3


0x01 graphic

Katedra Automatyki i Elektroniki

Sprawozdanie z zajęć laboratoryjnych

Technika mikroprocesorowa 2

TS1A520312

Ćwiczenie numer: 3

Temat: Metody programowania strukturalnego w odniesieniu do mikroprocesorów 8-bitowych.

Wykonujący ćwiczenie: Adam Cylko

Krzysztof Czajkowski

Krzysztof Hończar

Studia dzienne

Kierunek: Elektronika i Telekomunikacja

Specjalność: Aparatura Elektroniczna

Semestr V Grupa laboratoryjna: L01

Prowadzący ćwiczenie: dr inż. Łukasz Sajewski

...........................

OCENA

....................................

Data wykonania ćwiczenia

..............................................

Data i podpis prowadzącego

1. Cel ćwiczenia:

Zdobycie praktycznych umiejętności w wykorzystaniu różnych technik przekazywania informacji między procesem wywołującym, a procesem wywoływanym.

2. Metodyka badań:

2.1. Stanowisko badawcze

Ćwiczenie przeprowadzane jest w grupach przy stanowisku komputerowym. Wymagany jest komputer klasy Pentium z systemem operacyjnym Windows, wyposażony w kolorową kartę graficzną i takiż monitor. Na komputerze powinny być zainstalowane programy narzędziowe (program metaasemblera C32.EXE i symulatora ekranowego SYMULATOR.EXE).

3.2. Przebieg ćwiczenia

Ćwiczenie obejmuje:

1. Uruchomienie przygotowanych programów testowych w oparciu o symulator ekranowy Z80. Przykładowe zadania mogą dotyczyć:

· opóźnień generowanych programowo;

· arytmetyki (dodawanie, odejmowanie, porównywanie) liczb wielobajtowych ze znakiem lub bez znaku;

· algorytmów przetwarzania danych w jednowymiarowych tablicach (sortowanie, wyliczanie wartości średniej, wyszukiwanie maksimum i minimum, itp.).

2. Każdy zespół otrzymuje zależnie od decyzji prowadzącego przynajmniej 2 różne zadania, wymagające zastosowania różnych technik wymiany informacji z procedurą usługową.

Studenci dokonują porównania różnych metod wymiany informacji pomiędzy procedurą a programem wywołującym, ze zwróceniem uwagi na szybkość, uniwersalność i wielkość przekazywanej informacji.

Proces przygotowania programów wiąże się z:

· z użyciem edytora tekstu do przygotowania programu;

· asemblacją programu;

· uruchomieniem opcji symulacji i przetestowaniem poprawności pracy programu.

4. Realizacja ćwiczenia:

Do wykonania mieliśmy następujące zadania:

Zad 1 Wyznaczanie wartości n-tego wyrazu ciągu geometrycznego o znanych a0, q=2 i n. Parametry: A=a0 ; B=n. Wyniki: HL=an (dwubajtowy).

CPU "Z80.TBL"

HOF "INT8"

ORG 60H

PROG: LD (HL),A

ETY: INC HL

ADD A,A

LD (HL),A

DJNZ ETY

RET

ORG 0H

LD A,7

LD HL,80H

LD B,4

CALL PROG

HALT

END

Dyrektywa wskazująca opis listy rozkazów procesora

Określenie formatu pliku (*.HEX)

Adres początkowy procedury

Przesłanie zawartości akumulatora do komórki o adresie (HL)

Zwiększenie HL o jeden

Dodanie zawartości akumulatora do akumulatora

Przesłanie zawartości akumulatora do komórki o adresie (HL)

Realizacja pętli programowej o nazwie ETY

Return do programu głównego

Adres początkowy programu głównego

Załadowanie wartości 7 do rejestru A (akumulatora)

Zapisanie wartości 80H w rejestrze HL

B=licznik pętli

Wywołanie procedury PROG

Zatrzymanie mikroprocesora

Koniec tekstu programu do asemblacji

Zadaniem programu było wyznaczenie piątego wyrazu ciągu geometrycznego o zadanym a0=7 oraz q=2. Piąty wyraz ciągu powinien wynosić a4=112=70H.

W programie głównym następuje załadowanie do akumulatora wartość 7, czyli pierwszego wyrazu ciągu (a0), zapisanie wartości 80H w rejestrze HL, załadowanie do rejestru B wartości 4, czyli wartości licznika pętli. Później następuje wywołanie procedury o adresie 60H. W procedurze o nazwie PROG realizuje się przesłanie zawartości akumulatora (A=07) do komórki o adresie (HL) równym 80 i właśnie od 80 komórki pamięci będą lokowane kolejne wyrazy ciągu. W etykiecie o nazwie ETY następuje inkrementacja adresu rejestru HL. Potem zawartość akumulatora jest dodawana do zawartość akumulatora, a wynik tej operacji (A=07+07=0E) również znajduje się w akumulatorze. Dlatego przy pomocy komendy LD (HL),A realizuje się przesłanie zawartości akumulatora do komórki o adresie (HL) (równym po zwiększeniu o jeden 81) i tam zostaje umieszczony drugi wyraz ciągu, czyli a1=0E. Potem komenda DJNZ powoduje przeskok pętli do początku z równoczesnym zmniejszeniem zawartości rejestru B o jeden (B=03). Znów następuje inkrementacja adresu rejestru HL, dodanie zawartości akumulatora do zawartości akumulatora oraz przesłanie zawartości akumulatora do komórki o adresie (HL) zwiększonym o jeden w stosunku do poprzedniego, itd. W ostatnim kroku do komórki o adresie (HL) równym 84 zostanie wpisana wartość piątego wyrazu ciągu (a4=70), następuje wyzerowanie licznika pętli (B=00) oraz powrót do programu głównego, a następnie zakończenie całego programu.

Zad 2 Zliczenie w tablicy N liczb ilości elementów równemu podanemu wzorcowi.

CPU "Z80.TBL"

HOF "INT8"

ORG 100H

TABL: DFB 11H,23H,11H,11H,30H,55H,6H

ILOSC: EQU 7

PTAB: EQU 100H

WZORZEC: EQU 11H

ORG 50H

PRC: LD A,(IX+0)

INC IX

CP D

JP Z,ETY1

DJNZ PRC

JP END1

ETY1: INC C

DJNZ PRC

END1: RET

ORG 0H

LD B,ILOSC

LD IX,PTAB

LD D,WZORZEC

CALL PRC

HALT

END

Dyrektywa wskazująca opis listy rozkazów procesora

Określenie formatu pliku (*.HEX)

Określenie adresu od jakiego mają być alokowane

w pamięci elementy tablicy (tutaj od adresu 100H)

Zadeklarowanie tablicy wartości jednobajtowych

Przypisanie identyfikatorowi ILOSC wartości 7 (ilości elementów

w tablicy TABL)

Przypisanie identyfikatorowi PTAB wartości 100H (początek tablicy od komórki o adresie 40H)

Przypisanie identyfikatorowi WZORZEC wartości 11H (określenie wzorca)

Organizacja pamięci od adresu 50H

Załadowanie do rejestru A (akumulatora) zawartości rejestru indeksowego

Zwiększenie IX o jeden

Komparacja zawartości rejestru D z zawartością rejestru A

Rozkaz skoku do etykiety ETY1 w przypadku, gdy Z=1

Przeskok pętli do początku PRC z równoczesną dekrementacją rejestru B

Rozkaz skoku do etykiety END1

Inkrementacja C

Przeskok pętli do początku PRC z równoczesną dekrementacją rejestru B

Return do programu głównego

Adres początkowy programu głównego

Załadowanie do rejestru B zawartości stałej ILOSC

Załadowanie do rejestru indeksowego IX zawartości stałej PTAB

Załadowanie do rejestru D stałej WZORZEC

Wywołanie procedury PRC

Zatrzymanie mikroprocesora

Koniec tekstu programu do asemblacji

Zadaniem programu było zliczenie ilości elementów zgodnych ze wzorcem (którym w naszym przypadku był 11H) spośród siedmiu elementów tablicy. Elementy tablicy TABL o wartościach odpowiednio 11H, 23H, 11H, 11H, 30H, 55H, 6H są zadeklarowane za pomocą rozkazu DFB. W programie głównym następuje załadowanie do rejestru B zawartości stałej ILOSC (B=07), która określa liczbę elementów w tablicy. Potem do rejestru indeksowego IX ładowana jest zawartość stałej PTAB (IX=0100), która określa adres początkowy tablicy. Później do rejestru D ładowana jest zawartość stałej WZORZEC (D=11) określająca wartość wzorca, którego ilość pojawiania się w tablicy jest szukana. Następuje wywołanie procedury o nazwie PRC o adresie początkowym 50H. W procedurze w etykiecie ZAP realizuje się porównanie zawartości rejestru D z zawartością akumulatora A - rozważane są trzy przypadki:

a) A<D CY=1 Z=0

b) A=D CY=0 Z=1

c) A>D CY=0 Z=0

Kiedy A<D lub A>D odbywa się wykonywanie procedury, aż do momentu, gdy wartość rejestru B się wyzeruje i następuje skok do etykiety o nazwie END1, w której następuje return do programu głównego. Natomiast w przypadku, gdy A=D odbywa się skok do etykiety ETY1, w której następuje inkrementacja rejestru C oraz następuje powrót do początku procedury. Wynik w postaci ilości elementów tablicy TABL zgodnych ze wzorcem jest przechowywany w rejestrze C (w naszym zadaniu C=03).

Zad 3 Zliczenie w tablicy N liczb ilości elementów równemu podanemu wzorcowi.

CPU "Z80.TBL"

HOF "INT8"

ORG 100H

TABL: DWL 4321H,1AB4H,2341H,6969H

ILOSC: EQU 4

WZORZEC: EQU 1AB4H

PTAB: EQU 100H

ORG 50H

ZAP: LD A,B

ADD A,A

LD B,A

PRC: LD A,(IX+0)

INC IX

CP E

JP NZ,ETYK

DEC B

LD A,(IX+0)

CP D

JP NZ,ETY

INC IX

DJNZ PRC

JP END1

ETY: INC C

INC IX

DJNZ PRC

ETYK: INC C

INC IX

DEC B

DJNZ PRC

END1: RET

ORG 0H

LD B,ILOSC

LD IX,PTAB

LD DE,WZORZEC

CALL ZAP

HALT

END

Dyrektywa wskazująca opis listy rozkazów procesora

Określenie formatu pliku (*.HEX)

Określenie adresu od jakiego mają być alokowane

w pamięci elementy tablicy (tutaj od adresu 40H)

Zadeklarowanie tablicy wartości słów dwubajtowych

Przypisanie identyfikatorowi ILOSC wartości 7 (ilości elementów

w tablicy TABL)

Przypisanie identyfikatorowi WZORZEC wartości 1AB4H (określenie wzorca)

Przypisanie identyfikatorowi PTAB wartości 100H (początek tablicy od komórki o adresie 100H)

Organizacja pamięci od adresu 50H

Załadowanie do rejestru A zawartości rejestru B

Dodanie zawartości akumulatora do akumulatora

Załadowanie zawartości rejestru A do rejestru B

Załadowanie do rejestru A (akumulatora) zawartości rejestru indeksowego

Zwiększenie IX o jeden

Komparacja zawartości rejestru E z zawartością rejestru A

Rozkaz skoku do etykiety ETYK

Zmniejszenie B o jeden

Załadowanie do rejestru A (akumulatora) zawartości rejestru indeksowego

Komparacja zawartości rejestru D z zawartością rejestru A

Rozkaz skoku do etykiety ETY

Zwiększenie IX o jeden

Przeskok pętli do początku PRC z równoczesną dekrementacją rejestru B

Rozkaz skoku do etykiety END1

Zwiększenie C o jeden

Zwiększenie IX o jeden

Przeskok pętli do początku PRC z równoczesną dekrementacją rejestru B

Zwiększenie C o jeden

Zwiększenie IX o jeden

Zmniejszenie B o jeden

Przeskok pętli do początku PRC z równoczesną dekrementacją rejestru B

Return do programu głównego

Adres początkowy programu głównego

Załadowanie do rejestru B zawartości stałej ILOSC

Załadowanie do rejestru indeksowego IX zawartości stałej PTAB

Załadowanie do rejestru C stałej WZORZEC

Wywołanie procedury ZAP

Zatrzymanie mikroprocesora

Koniec tekstu programu do asemblacji

Zadaniem trzeciego programu było zliczenie ilości liczb dwubajtowych różnych od wzorca (którym w naszym przypadku był 1AB4H) spośród czterech elementów tablicy. Elementy tablicy TABL o wartościach 4321H,1AB4H,2341H,6969H są zadeklarowane za pomocą rozkazu DWL. W programie głównym następuje załadowanie do rejestru B zawartości stałej ILOSC (B=04), która określa liczbę elementów w tablicy. Potem do rejestru indeksowego IX ładowana jest zawartość stałej PTAB (IX=0100), która określa adres początkowy tablicy. Później do rejestru DE ładowana jest zawartość stałej WZORZEC (DE=1AB4) określająca wartość wzorca.

Następuje wywołanie procedury o adresie początkowym 50H. Do akumulatora zostaje załadowana zawartość rejestru B, a następnie w akumulatorze odbywa się dodanie zawartości akumulatora do akumulatora, a później wynik dodawanie zostaje przesłany z akumulatora do rejestru B. Jest to niezbędna operacja, gdyż dyrektywa DWL służąca do zadeklarowania tablicy wartości słów dwubajtowych umieszcza wartości w pamięci w kolejności młodszy/starszy bajt i dlatego liczba zapisanych w pamięci komórek jest dwukrotnie większa

od ilości elementów w tablicy.

W procedurze w etykiecie PRC zawartość komórki o adresie (IX+0)=0100, czyli młodszy bajt liczby 4321H zostaje przesłana do akumulatora i realizuje się inkrementacja adresu indeksowego IX (w tym momencie IX=0101). Potem dokonuje się komparacji zawartości rejestru A z zawartością rejestru E. Możliwe są trzy wyniki porównania: A<E, A=E bądź A>E.

Kiedy A=E, to odbywa się skok do etykiety ETY, w której wykonywana jest dekrementacja rejestru B, a następnie załadowanie do akumulatora zawartości komórki o adresie (IX+0). Potem odbywa się komparacja zawartości rejestru D z zawartością akumulatora:

- W przypadku różnych wartości następuje skok do etykiety ETYK, w której wykonywana jest inkrementacja rejestru C oznaczająca znalezienie elementu w tablicy różnego od wzorca, a także następuje zwiększenie o jeden rejestru indeksowego IX. Komenda DJNZ powoduje przeskok pętli do początku z równoczesnym zmniejszeniem zawartości rejestru B o jeden;

- W przypadku równych wartości następuje skok do etykiety ETY, w której wykonywana jest inkrementacja rejestru indeksowego IX oraz przeskok do początku procedury z równoczesnym zmniejszeniem zawartości rejestru B o jeden.

Natomiast w przypadku, gdy A<E lub A>E to porównywane liczby są różne i odbywa się skok do etykiety ETYK, w której wykonywana jest inkrementacja rejestru C oznaczająca znalezienie elementu w tablicy różnego od wzorca, a także następuje zwiększenie o jeden rejestru indeksowego IX i dekrementacja rejestru B - zbędne jest porównywanie starszego bitu, gdyż i tak wiadomo, iż badane elementy są różne. Potem komenda DJNZ powoduje przeskok pętli do początku z równoczesnym zmniejszeniem zawartości rejestru B o jeden, itd.

Kiedy wartość rejestru B wyzeruje się, to następuje skok do etykiety o nazwie END1, w której odbywa się return do programu głównego. Wynik w postaci ilości elementów tablicy TABL różnych od wzorca jest przechowywany w rejestrze C (w naszym zadaniu C=03).

5. Wnioski:

Poprawność działania napisanych przez nas programów potwierdza otrzymanie wyników zgodnych z oczekiwanymi. Wykonane ćwiczenie pomogło nam w zapoznaniu się z metodami programowanie strukturalnego używanego w programowaniu mikroprocesorów 8-bitowych. W programowaniu strukturalnym istotny jest podział programu na funkcjonalne moduły i procedury, dzięki którym możliwe jest wykonanie elementarnych zadań.

1



Wyszukiwarka