Artykuły

    Kurs Assemblera cz. 1

    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 gości atari.area

    Momencik, uaktualniam...  

    Nie jesteś zalogowany. Tylko zarejestrowani i zalogowani użytkownicy mog± dodawać komentarze.

Lotharek.pl
Retronics
Last Party 2025
Lost Party 2025

Szukaj

Wyszukiwarka przeszukuje zasoby atari.area, atariki oraz forum.

Twoliner

Momencik, uaktualniam...  .

Pamiętaj, żeby linki do Twolinera dodawać wyłącznie po skróceniu za pomocą serwisu tiny.pl. Jeśli coś Ciebie ominęło - skorzystaj z archiwum.

Network

konto

Nie jesteś zalogowany. Zaloguj się lub załóż konto

forum

Artykuły

Wywiady

Allegro

Jako, że Allegro.pl jest bardzo często odwiedzanym serwisem przez Atarowców, umiejscowiłem poniżej wyszukiwarkę produktów związanych z naszym kochanym Atari. Chcesz coś kupić - wystarczy wpisać w okienko poniżej.


Wystarczy wpisac czego szukamy i po chwili znajdujemy sie juz na Allegro.pl.