2795180258

2795180258



Laboratorium Techniki Mikroprocesorowej 2 - EZ1C600 034

Laboratorium Techniki Mikroprocesorowej 2 - EZ1C600 034

zml:

equ

lOOh

/przykład deklaracji adresów

zm2:

equ

lOlh

/zmiennych programowych

sr:

equ

102h

LD

A, (zml)

/pobranie kopii zmiennej zml

LD

B, A

/umieszczenie jej w rej.B

LD

A, (zm2)

/pobranie kopii zmiennej zm2

ADD

A, B

/sumowanie

RR

A

/przesunięcie sumy o 1 bit w prawo

LD

(sr)fA

/zapis wyniku w zmiennej sr


od operatora symbolizującego podstawienie uzyskanego wyniku operacji opisanej wyrażeniem. Za identyfikatorami lzm1’, ‘zm2’ i ‘sr’ w powyższym opisie kryją się fizyczne adresy tych zmiennych w pamięci operacyjnej procesora. Założono, że dostępne są operacje przesyłające bezpośrednio zawartość wskazanej komórki pamięci do akumulatora A procesora i odwrotnie. Przedstawiony przykładowy opis zakłada też, że rozmiary (ilość bitów) obu zmiennych są jednakowe i równe rozmiarowi słowa maszynowego procesora, tzn. jednostka ALU procesora może wykonać dodawanie tych zmiennych jedną operacją. Implementacja powyższego fragmentu algorytmu w asemblerze procesora Z80 przedstawia się następująco:

Trochę trudniejsza może okazać się implementacja bloków decyzyjnych w asemblerze. Trzeba cały czas (nawet na etapie projektowania algorytmu) pamiętać o tym co oferuje docelowy procesor. Istotna jest dostępna lista rozkazów porównań słów binarnych oraz skoków warunkowych. Na ogół w procesorach znajdziemy od jednego do kilku rozkazów porównania słów binarnych o rozmiarze słowa maszynowego danego procesora. Wynik takiego porównania jest dostępny w postaci specyficznego ustawienia wybranych flag w rejestrze stanu procesora. Najczęściej jest to flaga przeniesienia (Carry Flag) uzupełniona o flagę zera (Zero Flag). Ich stan po wykonaniu rozkazu porównania jest taki jak po odejmowaniu drugiego argumentu tego rozkazu od pierwszego. W przypadku mikroprocesora eZ80 pierwszy argument rozkazu CP to zawsze akumulator A, a podawany jest tylko drugi operand. Przykładowo, blok decyzyjny porównujący dwie zmienne zm1 i zm2:

zm2



przy uwzględnieniu możliwości języka maszynowego eZ80 należałoby przekształcić do:

Program w asemblerze wyglądałby wtedy następująco:

LD    A,(zm2)    /pobranie zmiennej    zml

LD    B,A    /umieszczenie jej w rej.B

LD    A,(zml)    /pobranie zmiennej    zm2    do A

CP    B    /porównanie jej ze    zm2

JR    C,mniejsze /skok gdy A<B

Powyższy program wykorzystuje fakt, że rozkaz CP ustawia flagę CY jeżeli zawartość akumulatora A jest mniejsza od wartości wskazanego argumentu (tutaj rejestru B) i jeżeli to zachodzi (flaga CY=1) to nastąpi skok do etykiety 1-10



Wyszukiwarka

Podobne podstrony:
Laboratorium Techniki Mikroprocesorowej 2 - EZ1C600 034 UWAGA: - pierwszą dyrektywą tekstu programu
Laboratorium Techniki Mikroprocesorowej 2 - EZ1C600 034 Laboratorium Techniki Mikroprocesorowej 2 -
Laboratorium Techniki Mikroprocesorowej 2 - EZ1C600 034 mniejsze’. Rozwiązaniem alternatywnym dla uż
Laboratorium Techniki Mikroprocesorowej 2 - EZ1C600 034 Szczególnym przypadkiem jest wykrycie czy ja
Laboratorium Techniki Mikroprocesorowej 2 - EZ1C600 034 lp:= l_powtnn lp:=lp-1 C,l_powt

więcej podobnych podstron