Kurs Assemblera cz. 14

 

Publikujemy rozkazy publikowane Proponuję Wam tabelkę, w której zestawiłem w kolejności alfabetycznej wszystkie publikowane rozkazy asemblera 6502, z odpowiadającymi im trybami adresowania, liczbą zajmowanych w pamięci bajtów i cykli procesora.

Gdy będziecie np. mieli chęć dokładnie docyklować jakąś procedurę rastrową, możecie sięgnąć do tej właśnie tabelki i znaleźć w niej od razu odpowiedź, jakich rozkazów należy użyć. Macie wątpliwości, czy jakaś instrukcja występuje w potrzebnym Wam trybie adresowania? Sięgacie do tabelki i wszystko się wyjaśnia. Albo chcecie zabezpieczyć program przed niepowołanymi podglądaczami, kombinujecie, które rozkazy możliwie mało napsują a możliwie dużo namącą – tabelka wydaje się niezastąpiona. Reasumując: tabelka z pewnością się przyda. Nie daje nam wprawdzie nic odkrywczego, czy rewolucjonizującego kanony informatyki, ale jest przydatna w tzw. codziennej pracy programisty. Doświadczyłem tego parę razy na własnej skórze, gdy musiałem przerzucać stosy książek w poszukiwaniu TEJ JEDYNEJ.

A co z rozkazami niepublikowanymi? – zapytają ci, którzy już ostrzyli sobie na nie zęby. Spokojnie, przyjaciele. Jak dobrze pójdzie, w komplecie zjawią się za miesiąc. Nie traćcie rewolucyjnej czujności!

 

KRÓTKO O TRYBACH Jak zapewne pamiętacie, Commodore 64 ma aż 13 trybów adresowania. Pisałem już o tym, co prawda, w „C&A” 9/92, więc tym razem tylko wspomnę o każdym po kolei, przy okazji podając skrót, którym posłużę się w tabelce. Skróty te warto przynajmniej z grubsza kojarzyć, bo używane są przez większość autorów piszących o asemblerze 6502.

1. ADRESOWANIE BEZWZGLĘDNE; ABS np. LDA $2000 – odnosi się do komórki, której adres podany jest po kodzie rozkazu.

2. ADRESOWANIE (BEZWZGLĘDNE) STRONY ZEROWEJ; ZPG np. INC $02 – dotyczy komórki na stronie zerowej, której adres w postaci jednego bajtu podany jest po kodzie rozkazu.

3. ADRESOWANIE BEZWZGLĘDNE INDEKSOWANE X; ABS, X np. LDA $1000,X – odnosi się do komórki, której adres jest sumą liczby podanej po rozkazie i wartości rejestru X.

4. ADRESOWANIE BEZWZGLĘDNE INDEKSOWANE Y; ABS, Y np. LDA $4000,Y – odnosi się do komórki, której adres jest sumą liczby podanej po rozkazie i wartości rejestru Y.

5. ADRESOWANIE STRONY ZEROWEJ INDEKSOWANE X; ZPG, X np. DEC $80,X – odwołuje się do komóki której adres jest sumą jednobajtowej liczby podanej po rozkazie i wartości rejestru X.

6. ADRESOWANIE STRONY ZEROWEJ INDEKSOWANE Y; ZPG, Y np. DEC $00,Y – odwołuje się do komóki której adres jest sumą jednobajtowej liczby podanej po rozkazie i wartości rejestru Y.

7. ADRESOWANIE POŚREDNIE; (ABS) lub IND np. JMP ($3000) – polega na tym, że adres podany po rozkazie jest numerem komórki, w której znajduje się pierwszy (a w następnej drugi) bajt wektora, będącego adresem, pod który komputer ma skoczyć.

8. ADRESOWANIE POŚREDNIE PREINDEKSOWANE; (ZPG,X) lub (,X) np. CMP ($40,X) – liczba podana po rozkazie jest sumowana z zawartością rejestru X. Suma zaś jest adresem komórki, w której znajduje się pierwszy bajt wektora, wskazującego adres, do którego odwołuje się rozkaz.

9. ADRESOWANIE POŚREDNIE POSTINDEKSOWANE; (ZPG,Y) lub (),Y np. LDA ($fb),Y – liczba będąca argumentem jest adresem komórki, w której znajduje się pierwsza komórka wektora. Suma tego dwubajtowego wektora i zawartości rejestru Y jest adresem, do którego odwołuje się rozkaz.

10. ADRESOWANIE WZGLĘDNE; REL np. BNE – oznacza skok do komórki przesuniętej o podany argument względem adresu, w którym znajduje się rozkaz.

11. ADRESOWANIE NIEJAWNE; IMP np. INX – z treści rozkazu wynika, gdzie ma być wykonany – czy to w jakimś rejestrze, czy to w akumulatorze.

12. ADRESOWANIE AKUMULATORA; ACC np. ROL – specyficzna odmiana adresowania niejawnego. Odnosi się bezpośrednio do akumulatora, bez pośrednictwa komórek pamięci.

13. ADRESOWANIE NATYCHMIASTOWE (lub PROSTE); IMM lub IMDT np. LDA #$60 – argument nie jest żadnym adresem ani wektorem, tylko po prostu konkretną liczbą, której dotyczy rozkaz.

I po tym wstępie teoretyczno-historycznym nareszcie CZAS NA TABELĘ!

UWAGI:

MNEM – oznacza mnemonik, czyli trzyliterowy skrót rozkazu.

TREŚĆ ROZKAZU – to krótki opis tegoż, nie roszczący sobie miana kompletnego i wyczerpującego

FLAGI – wpływ rozkazu na znaczniki (Negative, Carry etc.). Litera oznacza, że zależny od warunków, cyfra – że za każdym razem do znacznika wstawiana jest dana wartość, M7M6 – do flag wstawiane są wartości z pamięci.

KOD – to liczba szesnastkowa, za pomocą której przedstawiany jest rozkaz w danym trybie

B – liczba bajtów, jaką rozkaz zajmuje w pamięci. T – najmniejsza liczba cykli, jaką zajmuje procesorowi rozkaz.

 

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *