[ Pobierz całość w formacie PDF ]

przesyłu danych między pamięcią a rejestrami A, X i Y mikro-
procesora, między CPU a stosem, a także między wewnętrznymi
rejestrami 6502.
Przesłanie nigdy nie narusza zawartości komórki lub reje-
stru, skąd pobierane są dane.
72
P A M I  
TAX TAY
X A Y
TXA TYA
PHP
S STOS P
PLP
Rys. 4.1 Rozkazy przesłania danych 6502
A. CPU - pamięć. Poznaliśmy już wszystkie rozkazy przesła-
nia tej kategorii. Aadowanie rejestrów danymi z pamięci wyko-
nują LDA, LDX i LDY, a zapis danych z rejestrów do pamięci -
STA, STX i STY.
Rozkazy te, zwłaszcza LDA i STA, należą do najczęściej s
stosowanych. Z ich pomocą można realizować, jak o tym była mo-
wa, ważne funkcje analogiczne do tych, jakie w Basicu i innych
językach wysokiego poziomu wykonują instrukcje przypisania war-
tości zmiennym bądz pobierania ich wartości do celów przetwa-
rzania.
Nie ma rozkazów powodujących bezpośrednie przesłania
pamięć-pamięć, wymaga to pośrednictwa rejestru, np.
LDA G LDX L LDY J
STA H STX M STY K
Z pomocą rejestrów wewnętrznych łatwo jest również dokonać
wzajemnej wymiany zawartości między komórkami pamięci, co w
Basicu odpowiadałoby przypisaniu zmiennej H wartości zmiennej
LDX
STX
LDA
STA
LDY
STY
TSX
TXS
PHA
PLA
73
G, a G wartości H, np.: Z=G:H=G:G=Z Z jest tu zmienną pomoc-
niczą .
LDX G
LDY H
STX H
STY G
B. Rejestr-rejestr. Istnieje komplet rozkazów dwustron-
nych przesłań między akumulatorem, a rejestrami X i Y. Aatwo
zapamiętać ich mnemoniki, bowiem zaczynają się od "T", a nas-
tępne dwie litery wskazują kierunek przesłania.
TAX - transfer accumulator to X, prześlij zawartość aku-
mulatora do rejestru X. Dalsze rozkazy - to: TXA, TAY i TYA.
Istnieje również możliwość dwustronnego przesyłu wskazni-
ka stosu, jednak tylko z rejestrem X.
TSX - transfer stack pointer to X, prześlij wskaznik sto-
su do rejestru X. Odwrotnie przesłanie wykonuje TXS. Pamięta-
jmy, że rozkazy te dotyczą wskaznika stosu, a nie wartości na
stosie.
Sześć omówionych rozkazów należy wraz z szeregiem innych
do trybu adresowania implikowanego ang. implied zwanego też
niejawnym lub wewnętrznym. Są to rozkazy jednobajtowe, a w sa-
mym kodzie operacji zawarta jest informacja, skąd i dokąd nas-
tępuje przesłanie danych. Czas wykonania jest najkrótszy z mo-
żliwych - wynosi 2 cykle. Rozkazy te umożliwiają krótkotrwałe
przechowywanie danych w nie używanym w danej chwili rejestrze.
Jeżeli np. chcemy czasowo przechować zawartość potrzebnego w
danej chwili akumulatora, a po wykonaniu przetwarzania mieć ją
z powrotem w akumulatorze, umożliwi to sekwencja:
TAX Przesyła A do czasowego przechowania w X
LDA G A=G
CLC
ADC H A=G+H
STA G G=A=G+H
TXA Przywraca poprzednią zawartość A
Akumulator nie zmienił zawartości, a po drodze wykonane
zostało przypisanie: G=G+H.
74
C. Operacje na stosie. 6502 umożliwia wstawienie na stos
zawartości dwóch rejestrów: akumulatora i rejestru znaczników
P, a także odtworzenie A i P ze stosu. Komunikację akumulato-
ra ze stosem zapewniają omówione już:
PLA - zdejmuje wartość ze szczytu stosu do akumulatora
PHA - wstawia na stos zawartość A.
Analogicznie odbywa się komunikacja P ze stosem:
PLP - pull processor status from stack, przenosi wartość
ze stosu do rejestru znaczników
PHP - push processor status on stack, wstawia na stos za-
wartość rejestru znaczników.
Wszystkie cztery rozkazy odgrywają bardzo istotną rolę
w rozwiązywaniu rozmaitych zadań programowych, zwłaszcza w
przypadku skoków do podprogramów (JSR) oraz powrotów z nich
(RTS). Jednakże te czynności wykonuje 6502 automatycznie. Na-
tomiast programujący może wykorzystać zwłaszcza rozkazy PLA i
PHA, do czasowego przechowywania danych na stosie. Niejednok-
rotnie, w chwili przejścia do podprogramu chcemy zapamiętać
dotychczasową zawartość rejestrów. Właściwym miejscem dla ta-
kiego czasowego przechowywania danych jest stos. Ponieważ jed-
nak komunikację ze stosem zapewnia tylko rejestr A, wymaga to
zastosowania następującego ciągu rozkazów:
PHA wstawia na stos zawartość A
TXA przenosi do A zawartość X
PHA wstawia na stos pośrednio zawartość X
TYA przenosi do A zawartość Y
PHA wstawia na stos pośrednio zawartość Y.
Po zakończeniu podprogramu, w celu odtworzenia poprzed
nich stanów rejestrów A, X i Y należy wykonać procedurę odwro-
tną. Pamiętać jednak trzeba o zdejmowaniu wartości ze stosu w
odwrotnej kolejności. Tak więc wykona to ciąg rozkazów:
PLA zdejmuje ze stosu zawartość Y
TAY przenosi ją z A do Y
PLA zdejmuje ze stosu zawartość X
TAX przenosi ją z A do X
PLA zdejmuje ze stosu zawartość akumulatora.
75
Efektem wykonanych operacji jest to, że w rejestrach A,
X i Y znajdują się znów wartości, jakie były w nich w chwili
skoku do podprogramu. Gdy, np. rejestr X służył do wykonania
pętli, tak jak w przykładzie programu przedstawionym w punk-
cie 3.9, wtrąciwszy dodatkowe czynności chcielibyśmy, by pętla
była poprawnie kontynuowana. Ponieważ steruje nią rejestr ,
trzeba przechować jego wartość. Upraszcza to wysoce zautomaty-
zowany mechanizm stosu.
Stos odgrywa dużą rolę w obsłudze przerwań oraz w przeka-
zywaniu danych czyli parametrów w Basicu do podprogramów w JM.
wiczenia
x 1. Chcemy przechować czasowo na stosie zawartość komó-
rek o adresach 1000 i 2000. Jak to wykonać?
2. Jak odtworzyć ze stosu zawartość, ewentualnie zmienio-
ną komórek 1000 i 2000?
4.3 Przetwarzanie danych
Poznaliśmy już wszystkie rozkazy przetwarzania danych z
wyjątkiem operatorów logicznych. Przypomnijmy pokrótce rozkazy
dotychczas poznane.
6502 ma jedynie dwa rozkazy arytmetyczne: ADC i SBC - do-
dawania i odejmowania z przeniesieniem. Możliwość zastosowanie
BCD podwaja w rzeczywistości liczbę rozkazów arytmetycznych.
Po trzy rozkazy umożliwiają zwiększenie o 1: INC, INX i
INY, oraz zmniejszenie o 1: DEC, DEX i DEY.
Dostępny jest komplet rozkazów przesunięcia i obrotu bi-
tów w lewo i w prawo: ASL, LSR, ROL i ROR.
4.4 Operacje logiczne
Lista rozkazów 6502 obejmuje trzy klasyczne operacje lo-
giczne, których mnemoniki brzmią: AND, ORA i EOR. Rozkazy te
mają szereg cech wspólnych:
- do ich wykonania potrzebne są zawsze dwa argumenty,
czyli inaczej mówiąc są to operatory dyadyczne;
- jeden z argumentów znajduje się zawsze w akumulatorze,
drugi może być wskazany bezpośrednio w trybie natych-
76
miastowym lub z pomocą adresu w operandzie rozkazu;
- wynik operacji pozostawiany jest w akumulatorze;
- operacje logiczne wykonywane są na pojedyńczych bitach
liczb binarnych, a nie na całych tych liczbach.
Zwróćmy uwagę na tę ostatnią cechę. W językach wysokiego
poziomu, np. w standardowych wersjach Basicu na Atari i Com-
modore, dostępne są jedynie operacje logiczne na parach liczb
np. 123 AND 77 daje 1, 211 AND 0 daje 0. W związku z rosnącym
znaczeniem operacji logicznych na bitach odpowiednie intruk-
cje pojawiają się coraz szerzej w językach programowania.
Działanie operatorów logicznych przedstawia tablica na
rys. 4.1, zwana matrycą logiczną. Pokazuje ona wyniki opera-
cji na argumentach, w danym wypadku bitach p i q.
p q p AND q p ORA q p EOR q
0 0 0 0 0
1 0 0 1 1
0 1 0 1 1
1 1 1 1 0
Rys. 4.1 Matryca logiczna AND, ORA i EOR.
4.4.1 AND
Właściwością AND, czyli logicznego I koniunkcji jest to,
że bit wyniku przybiera wartość 1 tylko wtedy, gdy oba bity
mają wartość 1. Innymi słowy, jeżeli jednemu bitowi nadamy wa-
rtość 0, to wynik będzie zawsze równy 0. Nazywamy to m a s-
k o w a n i e m poszczególnych bitów czy całych fragmentów
bajtu lub wielkości dwubajtowej, a stałą 8 lub 16-bitową,
którą do tego wykorzystujemy - maską. Przyjrzyjmy się poniż-
szej sekwencji rozkazów z argumentami napisanymi w hex. Obok [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • skydive.htw.pl
  • Copyright 2016 Moje życie zaczęło się w dniu, gdy cię spotkałem.
    Design: Solitaire