Assembler: Podstawowe polecenia monitora
Dla osób chcących programować lub modyfikować programy w języku wewnętrznym znajomość poleceń monitorów jest po prostu niezbędna. Jednocześnie powszechnie wiadomo, że większość użytkowników C-64 korzysta z programów typu monitor bez jakiejkolwiek instrukcji. Ot, po prostu "na czuja" nawet do popularnych modułów z monitorami sprzedawcy nie zawsze dołączają odpowiednią dokumentację).
Poniższe zestawienie obejmuje naturalnie jedynie instrukcje podstawowe, bowiem tylko one mają praktycznie we wszystkich monitorach identyczny format. Uwaga: oczywiście wiecie o tym, ale dla porządku przypominamy, że wszystkie argumenty w programie monitora muszą być podawane w kodzie heksadecymalnym (szesnastkowyrn).
A (ASSEMBLE)
Umożliwia wprowadzenie linii zawierającej kod asemblera (mnemonik + argument). Programista musi określić numer pierwszej komórki pamięci, od której będzie zaczynał się program, dalszą numerację zazwyczaj przejmuje program monitora. Format instrukcji:
A C000 JSR $FCE2 - gdzie:
A - rozkaz monitora,
C000 - adres komórki pamięci,
JSR - mnemonik,
$FCE2 - argument mnemonika.
Jeżeli podczas wprowadzania instrukcji programista popełni błąd, wówczas na ekranie zostanie wyświetlony znak zapytania "?", albo program monitora nie policzy (wyświetli) następnego adresu pamięci.
C (COMPARE)
Instrukcja ta porównuje ze sobą dwa obszary pamięci. W wypadku różnic wyświetlane są komórki, w których ta różnica występuje. W niektórych monitorach wyświetlane są również zawartości tych komórek. Format instrukcji:
C 1000 2000 5400
W wyniku działania tej instrukcji zostają porównane dwa obszary. W przykładzie: pierwszy, począwszy od adresu 1000 do 2000, drugi - od 5000 do 6000
D (DISASSEMBLE)
Za pomocą tego rozkazu dokonujemy disasemblacji tzn. zamiany kodu maszynowego na kody asemblera. Korzystając z tego rozkazu należy określić adres początku obszaru pamięci, od którego ma się rozpocząć disasemblacja. Format instrukcji:
D FCE2 - gdzie:
D - instrukcja monitora,
FCE2 - początkowy adres pamięci, od którego chcemy rozpocząć disasemblację.
W przypadku, gdy program monitora natrafi na kod, który nie ma mnemonika, wówczas wyświetlone zostaną trzy znaki zapytania - (???).
F (FILL)
Rozkaz ten powoduje wypełnienie zadanego obszaru pamięci podaną wartością lub wartościami. Format instrukcji:
F C000 CFFF 01 02 - gdzie:
F - instrukcja monitora,
C000 - Początkowy adres pamięci, od którego można zacząć wypełnianie,
CFFF - końcowy adres pamięci,
O1 02 - wartości, którymi można wypełniać zadaną Pamięć.
G (GO)
Instrukcja ta uruchamia program począwszy od podanego adresu. Format instrukcji:
G C000 - gdzie:
G - instrukcja monitora, .
C000 - adres, od którego zostanie uruchomiony program.
W przypadku, gdy w programie wystąpi instrukcja RTS lub BRK, program automatycznie wróci do monitora.
H (HUNT)
Zadaniem tej instrukcji jest poszukiwanie w zadanym obszarze pamięci sekwencji danych. Dane te możemy podać w formie danych bajtów lub w formie znaków. Format instrukcji:
1. H C000 C100 78 A9 lub
2. H C000 C100 'TEXT' - gdzie:
H - instrukcja monitora,
C000 - początkowy adres pamięci, od którego można poszukiwać danych,
CFFF - końcowy adres pamięci,
78 A9 lub TEXT - poszukiwane dane.
Jeżeli w przeszukiwanym obszarze wystąpią podane dane, wówczas zostaną wyświetlone ich adresy.
L (LOAD)
Odpowiednik instrukcji LOAD w BASIC-u. Zazwyczaj dostępne są dwa formaty instrukcji:
1. L"Nazwa programu" 08
Powoduje załadowanie programu pod podaną nazwą z urządzenia o numerze 8 (stacja dysków) pod adres podany w nagłówku programu dwa pierwsze bajty.
2. L"Nazwa programu" 01 C000
Powoduje załadowanie programu pod podaną nazwą z urządzenia o numerze 1 magnetofon) pod adres C000. I tu mała uwaga: niektóre monitory nie są wyposażone w komunikaty błędów przy operacji wczytywania, co jest istotne dla użytkowników magnetofonów, gdyż program może zostać wczytany z błędem.
M (MONITOR)
W wyniku działania tej instrukcji na ekranie zostanie wyświetlona zawartość pamięci w formie liczb szesnastkowych. Zawartość pamięci można modyfikować najeżdżając kursorem na daną wartość, a następnie wprowadzając nową. Po całej operacji należy nacisnąć klawisz RETURN. Format instrukcji:
M C000 C450 - gdzie:
C000 - adres, od którego zaczyna się oglądanie pamięci, C050 - adres końcowy.
W niektórych monitorach, oprócz zawartości pamięci w firmie Iiczb szesnastkowych, zostaje wyświetlona zawartość w kodzie ASCII. Jeżeli dany znak w kodzie ASCII nie ma swej farmy możliwej do zobrazowania na ekranie, zostaje zastąpiony kropką.
R (REGISTER)
Wydanie tej dyrektywy powoduje wyświetlenie zawartości rejestrów procesora. Najczęściej są to:
PC - licznik programu,
SR - bajt stanu procesora,
AC - akumulator,
XR - rejestr indeksowy X,
YR - rejestr indeksowy Y,
SP - wskaźnik stosu.
Ponadto w niektórych monitorach wyświetlane są adresy przerwań IRQ i NMI. Jeżeli chce się zmodyfikować zawartość jakiego rejestru, wystarczy najechać kursorem w odpowiednie miejsce, za pomocą klawiatury wpisać nowi wartość i nacisną klawisz RETURN.
S (SAVE)
Odpowiednik instrukcji SAVE w BASIC-u. Pozwala na zapisanie na nośniku zewnętrznym dysk lub magnetofon) zawartości podanego obszaru pamięci. Format instrukcji:
S"Nazwa programu" 08 0801 2020 - gdzie:
S - instrukcja monitora,
08 - nr urządzenia zewnętrznego,
0801 - adres startowy,
2020 - adres końcowy.
W wyniku działania powyższej instrukcji na dyskietce (urządzenie 8) nagrany zostanie program o adresie startowym 0801 i końcowym 2020.
T (TRANSFER)
Rozkaz ten służy do przenoszenia dowolnych obszarów pamięci. Użytkownik musi określić adresy początku i końca wybranego do przeniesienia obszaru oraz adres początku obszaru, do którego ma nastąpi przeniesienie. Format:
T 0801 1000 C000
W wyniku działania tej instrukcji wartości będące w obszarze począwszy od adresu 0801, a skończywszy na adresie 1000, zostaną przeniesione do obszaru począwszy od adresu C000.
V (VERIFY)
Odpowiednik instrukcji VERIFY w BASIC-u. Pozwala na zweryfikowanie zapisanego na dyskietce czy taśmie programu. Format instrukcji:
V "Nazwa programu" 01 0801 - gdzie:
V - instrukcja monitora,
01 - nr urządzenia zewnętrznego magnetofon),
0801- adres startowy.
I tu mała uwaga: spotkałem się z monitorami, w których program monitora wykazywał, że weryfikacja
została przeprowadzona bezbłędnie, mimo że wcześniej wprowadziłem zmiany w programie.
Commodore & Amiga, nr 4/1994, wyd. Bajtek
|