Cele ćwiczenia
Poznanie oprogramowania narzędziowego i zasad jego wykorzystania przy uruchamianiu systemów mikroprocesorowych.
Zweryfikowanie informacji dotyczących funkcjonowania przykładowego mikroprocesora 8-bitowego.
Zdobycie praktycznych umiejętności potrzebnych przy uruchamianiu systemów mikroprocesorowych z mikroprocesorami uniwersalnymi.
Stanowisko badawcze
Ćwiczenie przeprowadzane jest w dwuosobowych 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). Wymienione oprogramowanie narzędziowe w całości jest umieszczone w kartotece D:\Z80. Studenci piszą i uruchamiają swoje programy w indywidualnych podkartotekach, założonych w kartotece D:\Z80\LAB na pierwszych zajęciach
Przebieg ćwiczenia
W symulatorze procesora Z-80 zostały wpisane dwa programy, a następnie zostało sprawdzone ich działanie.
Program 1:
CPU "Z80.TBL"
HOF "INT8"
zm: equ 20h ; deklaracja zmiennej
org 0h ; adres początkowy programu
ld sp,38h ; zainicjowanie wskaźnika stosu
ld b,8 ; B=licznik pętli
petla: ld a,b ; zapis `b' do akumulatora
add a,b ; dodanie wartości b do akumulatora
ld c,a ; zapis zawartości akumulatora do rejestru c
push bc ; zapis na stos 2 bajtów
djnz petla ; realizacja pętli programowej
ld hl,zm ; zapis zmiennej 'zm' do rejestru hl
ld (hl),a ; zapis rejestru hl do akumulatora
halt
end
Opis działania programu
W programie tym najpierw została zadeklarowana zmienna oraz została podany adres początkowy adres programu. Następnie został zainicjowany wskaźnik stosu oraz licznik pętli B. Wynik działania pętli zapisywany jest do zmiennej „zm”.
Program 2:
Program ma dodawać dwie liczby trzybajtowe. Wynik ma być zapisywany w postaci liczby trzy lub cztero bajtowej.
CPU "Z80.TBL"
HOF "int8"
L1: ld A,150 ; deklaracja zmiennej; zapis wartości 150 do akumulatora
ld (41H),A ; zapis zawartości akumulatora do komórki 41H
ld A,1 ; zapis wartości 1 do akumulatora
ld (42H),A ; zapis zawartości akumulatora do komórki 42H
ld A,150 ; zapis wartości 150 do akumulatora
ld (43H),A ; zapis zawartości akumulatora do komórki 43H
L2: ld A,200 ; deklaracja zmiennej; zapis wartości 200 do akumulatora
ld (51H),A ; zapis zawartości akumulatora do komórki 51H
ld A,1 ; zapis wartości 1 do akumulatora
ld (52H),A ; zapis zawartości akumulatora do komórki 52H
ld A,200 ; zapis wartości 200 do akumulatora
ld (53H),A ; zapis zawartości akumulatora do komórki 53H
ld B,A ; zapis zawartości akumulatora do rejestru B
ld A,(43H) ; zapis zawartości komórki 43H do akumulatora
add A,B ; dodanie zawartości rejestru B do akumulatora
ld (63H),A ; zapis zawartości akumulatora do komórki 63H
ld A,(52H) ; zapis zawartości komórki 52H do akumulatora
ld B,A ; zapis zawartości akumulatora do rejestru B
ld A,(42H) ;zapis zawartości komórki 42H do akumulatora
adc A,B ; dodanie zawartości rejestru B z flagą przeniesienia do akumulatora
ld (62H),A ; zapis zawartości akumulatora do komórki 62H
ld A,(51H) ; zapis zawartości komórki 51H do akumulatora
ld B,A ; zapis zawartości akumulatora do rejestru B
ld A,(41H) ; zapis zawartości komórki 42H do akumulatora
adc A,B ; dodanie zawartości rejestru B z flagą przeniesienia do akumulatora
ld (61H),A ;zapis zawartości akumulatora do komórki 61H
JP C,PR ;skok do etykiety PR, jeżeli flaga CY=1
PR: LD A,1 ; etykieta PR; zapis wartości 1 do akumulatora
LD (60H),A ; zapis zawartości akumulatora do komórki 60H
halt
end
Program po kolei zapisuje do akumulatora bajty dwóch liczb trzybajtowych. Następnie najmłodszy bajt pierwszej liczby jest dodawany do najmłodszego bajtu drugiej liczby, całość zapisywana jest w akumulatorze w przypisanej komórce pamięci (63H). Starsze bajty są dodawane z flagą przeniesienia, gdy suma bajtów z dwóch liczb jest większa niż 255, wtedy do starszego bajtu dodawany jest 1. Wynik liczby może być czterobajtowy, gdy wynik dodawania najstarszych bajtów dwóch liczb jest większy niż 255.
Wnioski:
Procesor Z-80 może być wykorzystany do dodawania liczb wielobajtowych. Pętle mogą być wykonane przy użyciu instrukcji skoku.