atari.area
twoje polskie źródło informacji o Atari

Kurs Assemblera cz. 1

Autor: TeBe / Madteam

WPROWADZENIE

Witajcie drogie dziatki, mam nieklamany zaszczyt zaprezentowac pierwsza czesc kursu assemblera CPU 6502. Zdecydowalem sie poprowadzic te lekcje pod wplywem tysiecy listów, które Dely ciagle otrzymuje, a w których to prosiliscie go o tego typu kurs. Tak, tak po tym kursie nikogo nie zdziwi Numen 2,3... , bowiem zdradze Wam jakich to tez instrukcji uzywal Konop, czy tez uzywa Fox.

Co mamy do dyspozycji ?

CPU 6502C 1.79MHz, 64KB-1MB RAM, QA, X-asm

64KB pamieci podstawowej RAM, dlaczego tylko 64, poniewaz tylko tyle potrafi zaadresowac 6502. Dostep do dodatkowej pamieci rozwiazano przez przelaczanie banków o pojemnosci 16KB. Czyli zeby dostac sie do pamieci rozszerzonej musimy sprowadzic ja do "parteru" czyli w obszar pamieci widzianej przez CPU.

Piszac o operacjach na pamieci bedziemy uzywac takich wyrazen jak bity, bajty, slowa.

BIT(BIT) - najmniejszy element pamieci, moze przyjac wartosc 0 lub 1
BYTE(BAJT) - 8 bitów to bajt, moze przyjac wartosc od 0-255
WORD(SLOWO) - 16 bitów czyli 2 bajty, moze przyjac wartosc od 0-65535

256 bajtów to STRONA (256B=PAGE)
1024 bajty to KILOBAJT (chociaz powinno byc KABAJT, kilo=1000g, 1024B=1KB)
1024 kilobajty to MEGABAJT (1024KB=1MB)

QA czyli Quick Assembler-Atari (J.Wisniewski) i X-Asm-PC (P.Fusik), to assemblery których uzywam, wiec wszystko co tu napisze bedzie ich dotyczylo.

O Assemblerze w czesci drugiej kursu.

SYSTEMY LICZBOWE

Na poczatek wprowadzenie w systemy liczbowe uzywane przez hiper-super-procesory 6502, jak i przez inne mniej znane, typu x86 ;)

Tak wiec systemów liczbowych mamy sporo, ale nas interesuja najbardziej dziesietne (to te o których uczyli w przedszkolu), dwójkowe i szestnastkowe. CPU6502 jest mikroprocesorem 8-bitowym, tzn ze uwielbia wartosci zapisane na 8iu bitach (bajty).

1. SYSTEM DWÓJKOWY (binarny)

Wystepuja tu tylko dwa stany 0 i 1, za pomoca róznych kombinacji zer i jedynek zapiszemy wszystko. Komputer mysli wlasnie binarnie - jest prad 1, nie ma pradu 0.

1a. Konwersja Binarny -> Dziesietny.
Oto przykladowy BAJT

  |1|0|0|0|1|0|0|1|
   7 6 5 4 3 2 1 0 kolejnosc bitów (od prawej do lewej)
   ^             ^
   najstarszy    najmlodszy
   bit           bit

Jak zapisac dziesietnie taki bajt ?

Skorzystac z Windowsowego Kalkulatora, albo

bit0*2^0+bit1*2^1+bit2*2^2+bit3*2^3+bit4*2^4+bit5*2^5+bit6*2^6+bit7*2^7
1*2^0 + 0*2^1 + 0*2^2 + 1*2^3 + 0*2^4 + 0*2^5 + 0*2^6 + 1*2^7 = 
= 1 + 0 + 0 + 8 + 0 + 0 + 0 + 128 = 137

Czyli 10001001 to dziesietnie 137, ale jak zapisac binarnie 137, gdy nie znamy kombinacji 0 i 1.

1b. Konwersja Dziesietny -> Binarny.

Dzielimy przez 2, jesli mamy reszte z dzielenia zapisujemy 1, jesli dzieli sie bez reszty zapisujemy 0.

   137/2 | 68,5 mamy reszte wiec | 1 bit0
    68/2 | 34 bez reszty czyli   | 0 bit1
    34/2 | 17 bez reszty czyli   | 0 bit2
    17/2 | 8,5 mamy reszte wiec  | 1 bit3
     8/2 | 4 bez reszty czyli    | 0 bit4
     4/2 | 2 bez reszty czyli    | 0 bit5
     2/2 | 1 bez reszty czyli    | 0 bit6
     1/2 | 0,5 mamy reszte wiec  | 1 bit7

Mozna tez binarnie dodawac, mnozyc, dzielic, ale tego beda Was uczyc na studiach, za nas zrobi to Atarek. Osobiscie nie przepadam za recznymi operacjami na liczbach w systemie binarnym.

2. SYSTEM SZESTNASTKOWY (hexadecymalny)

Mamy do dyspozycji 16 róznych wartosci: 0123456789ABCDEF (wartosci od 10-15 zastapione zostaly literami).

   starszy nibble
   ^ ^ ^ ^
   |1|1|1|1|0|0|0|0| BINARNIE 
            ^ ^ ^ ^ mlodszy nibble

F 0 HEXADECYMALNIE

240 DECYMALNIE

   BIN  HEX DEC | BIN  HEX DEC
   0000 0   0   | 1000 8   8
   0001 1   1   | 1001 9   9
   0010 2   2   | 1010 A   10
   0011 3   3   | 1011 B   11
   0100 4   4   | 1100 C   12
   0101 5   5   | 1101 D   13
   0110 6   6   | 1110 E   14
   0111 7   7   | 1111 F   15

System ten przyjal sie ze wzgledu na swa przejrzystosc, nieprawdaz ze prosciutkie :)

3. REPREZENTACJA LICZB W ASSEMBLERZE czyli praktyka

Zapis wg Quick Assemblera i X-Asma (w innych assemblerach zapis powinien wygladac podobnie)

znak % oznacza zapis binarny
znak $ oznacza zapis hexadecymalny
np.
   %10110001 wartosc zapisana binarnie
   %01
   %10110
   $F2 wartosc zapisana w hex
   $e
   $8fab

W nastepnej czesci kursu zapoznamy sie juz blizej z assemblerem.


Komentarze (0)

Brak komentarzy. Bądź pierwszy!

Dodaj komentarz

Musisz się zalogować, aby dodać komentarz.