[ Pobierz całość w formacie PDF ]
jako odwrócony do góry nogami. Rozkaz PHA zmniejsza S o 1, a
PLA zwiększa S o 1.
Z jednej strony stos wykorzystywany jest przez sam mik-
roprocesor i odbywa się to automatycznie bez udziału progra-
mującego, z drugiej zaś ten ostatni może również efektywnie
posługiwać się stosem. 6502 wykorzystuje np. stos przy wszys-
tkich skokach do podprogramów, by zapamiętać adres, pod który
wrócić ma dalsza realizacja programu. Stos jest często użyte-
czny jako miejsce czasowego przechowywania danych. Z operacja-
mi tego rodzaju zetkniemy się jeszcze wielokrotnie.
Należy przy tym pamiętać o dwóch ważnych rzeczach. Po
pierwsze, po zakończeniu wszelkich operacji wykonywanych przez
programistę na stosie musi być przywrócony stan, jaki miał
on przed rozpoczęciem tych operacji. W przeciwnym wypadku kom-
puter z reguły zawiesza się. Po drugie, czym innym jest stos,
a czym innym wskaznik stosu. Ten pierwszy jest w pamięci,
drugi - w mikroprocesorze.
wiczenia
x 1. Przedstawmy kolejne stany stosu i wskaznika stosu
po każdym rozkazie przy wykonywaniu następującego programu:
LDA #27, PHA, PHA, LDA #30, PHA, PLA, PLA, PHA, PLA.
x 2. Czy taki program działałby poprawnie?
--- 46 ---
Rozdział 3
KOMPUTEROWA ARYTMETYKA
3.1 Kody i liczby
Warunkiem skutecznego programowania w JM i asemblerze
jest poznanie zasad, na jakich opiera się w komputerze przecho-
wywanie informacji i jej przetwarzanie. Co więcej, nawet zna-
nych ze szkoły czterech podstawowych działań arytmetycznych
musimy się do pewnego stopnia "nauczyć" od nowa.
Fundamentalne znaczenie ma tu pojęcie k o d u, ponieważ
w s z y s t k i e informacje w komputerze występują w postaci
zakodowanej. Co to jest kod? Słownik podaje, że jest to "sys-
tem umownych sygnałów, znaków liter, nazw itp. używany do prze-
kazywania informacji". Kodem jest ludzka mowa, pismo, alfabet
Morse'a, układy dziurek na taśmie perforowanej dalekopisu, fa-
la radiowa niosąca informacje. Stosowanie kodów wymaga z reguły
dwóch faz przekształcania informacji: jej przetłumaczenia na
dany kod czyli zakodowania oraz czynności odwrotnej czyli zde-
kodowania.
W rozdziale 1 poznaliśmy sposoby przedstawiania liczb w
układach pozycyjnych: dziesiętnym, którym najczęściej posługu-
jemy się w życiu, dwójkowym czyli binarnym stanowiącym podsta-
wową formę kodowania informacji w komputerze oraz szesnastko-
wym, najszerzej stosowanym przez programujących w asemblerze.
Każdy z tych układów - to swoisty sposób kodowania liczb. Sto-
sowanie rozmaitych reprezentacji liczb stawia na porządku dzien-
nym problem ich przekształcania czyli konwersji z jednej repre-
zentacji na inną oraz sposobu wykonywania na nich działań aryt-
metycznych.
Tablica na rysunku 3.1 ukazuje charakterystyczne właści-
wości trzech układów liczbowych, o których była mowa. Lewa
jej część obrazuje przekształcanie liczb binarnych w dzie-
siętne i szesnastkowe. Zwróćmy raz jeszcze uwagę, że każdą
--- 47 ---
N 2N
bin hex dec bin hex dec
0000 0 0 1 1 1
0001 1 1 10 2 2
0010 2 2 100 4 4
0011 3 3 1000 8 8
0100 4 4 10000 10 16
0101 5 5 100000 20 32
0110 6 6 1000000 40 64
0111 7 7 10000000 80 128
1000 8 8 100000000 100 256
1001 9 9 1000000000 200 512
1010 A 10 10000000000 400 1024
1011 B 11 100000000000 800 2048
1100 C 12 1000000000000 1000 4096
1101 D 13 10000000000000 2000 8192
1110 E 14 100000000000000 4000 16384
1111 F 15 1000000000000000 8000 32768
10000 10 16 10000000000000000 10000 65536
Rys. 3.1 Liczby 0-16 i potęgi o takich wykładnikach w
bin, hex i dec
4-bitową liczbę binarną można przedstawić z pomocą jednej cyf-
ry hex, a zatem każdą 8-bitową dwiema cyframi hex.
Niemniej ciekawa jest prawa strona tablicy ukazująca wła-
ściwości poszczególnych układów liczbowych w przedstawieniu ko-
lejnych potęg dwójki stanowiącej podstawę układu binarnego. 2
podniesione do potęgi 0 ma, jak w każdym układzie liczbowym,
wartość 1. Potem wraz z każdym zwiększeniem potęgi o 1 na koń-
cu liczby binarnej przybywa zero, ale pozostaje ona stale li-
czbą "okrągłą", złożoną z jedynki i samych zer. Można to wy-
razić również inaczej: jeżeli jedynkę przesuniemy o jedną po-
zycję w lewo, to jej wartość podwoi się. Jeżeli zatem w licz-
bie binarnej o dowolnej długości wszystkie cyfry przesuniemy
o jedną pozycję w lewo, będzie to równoznaczne z pomnożeniem
tej liczby przez 2. I na odwrót, przesunięcie wszystkich bitów
o jedną pozycję w prawo oznacza podzielenie liczby przez 2,
przy czym reszta zostaje odrzucona.
Tę ważną właściwość liczb binarnych wykorzystują
wszystkie mikroprocesory, a wśród nich 6502. Ma on specjalne
rozkazy powodujące przesunięcie wszystkich bitów w bajcie o
--- 48 ---
jedną pozycję w lewo lub w prawo. Na przykład, rozkaz o mne-
moniku ASL (arithmetic shift left)- arytmetyczne przesunięcie
bitów w lewo pozwala nieporównywalnie szybciej niż inne meto-
dy mnożyć liczbę przez 2, 4, 8 i dalsze potęgi dwóch. Jaki
będzie wynik następujących operacji?
LDA #11
ASL A
ASL A
ASL A
Po trzykrotnym przesunięciu bitów akumulator zawierać bę-
dzie liczbę 11x2x2x2, czyli 88. Nawiasem mówiąc, poznajemy tu
kolejny tryb adresowania zwany adresowaniem akumulatora (ang.
accumulator addressing) stosowany jedynie dla czterech rozka-
zów przesuwania i tzw. obrotu bitów, czyli ich cyklicznego
przesunięcia z udziałem bitu C w rejestrze znaczników. Rozka-
zy te można zastosować również w adresowaniu absolutnym i
trzech innych trybach. Na rysunku 3.1 zwraca ponadto uwagę, że
również w hex kolejne potęgi dwóch są liczbami okrągłymi o
stałym repertuarze pierwszych cyfr: 1, 2, 4 i 8. Natomiast
te same dane w układzie dziesiętnym są mało przejrzyste. Jest
[ Pobierz całość w formacie PDF ]