C64 ASEMBLER Lekcija 5
Dobrodošli u lekciju 5 male škole programiranja u asembleru na Commodore 64. Danas ćemo preći preostale asemblerske naredbe i, kao i obično, dati primere i BASIC ekvivalente.
Napomene, saveti i objašnjenja
Današnja lekcija je vezana za logičke operacije, kao i za manipulacije bitovima u akumulatoru, registrima, memoriji i samom registru procesora. Rad sa asemblerom se najvećim delom svodi na upravljanje vrednostima u memorijskoj mapi računara (grafika, boje, zvuk, ispis, itd.). Dok smo u standardnom BASIC-u često morali da manipulišemo memorijskom mapom uz sporo izvršavanje, sa ASM-om dobijamo maksimalnu brzinu i vrlo mali zauzet prostor — programi u ASM-u su superiorni u pogledu performansi i efikasnosti.
1) Logičke operacije
Logičke operacije rade nad bitovima u akumulatoru (A):
AND — logičko množenje (I)
Tabela istine: (0·0=0, 1·0=0, 0·1=0, 1·1=1). Uticaj na N, V, Z, C bitove statusnog registra.
Formati: AND #m, AND m, AND m,X, AND mm, AND mm,X, AND mm,Y, AND (m,X), AND (m),Y (gde je m adresa na nultoj strani $00–$FF, a mm apsolutna adresa $0000–$FFFF).
ORA — logičko sabiranje (ILI)
Tabela istine: (0+0=0, 1+0=1, 0+1=1, 1+1=1). Uticaj na N, V, Z, C kao i kod AND.
EOR — logičko isključivo sabiranje (XOR)
Tabela istine: (0⊕0=0, 1⊕0=1, 0⊕1=1, 1⊕1=0). Uticaj na N, V, Z, C kao i kod AND.
Primer
U BASIC-u posle kompajliranja i pokretanja (SYS 64738 pa SYS 4096) proverite: PRINT PEEK(2),PEEK(3),PEEK(4) ⇒ 3 63 60.
BASIC ekvivalenti: PRINT a AND b, PRINT a OR b, PRINT EXOR(a,b) (Simon’s BASIC). Argumenti a i b su decimalni brojevi; operacija se radi bitovno nad njihovim binarnim predstavama.
2) Manipulacija, pomeranje i rotacija bitova
BIT — testiranje 6. i 7. bita memorijske lokacije
BIT kopira bit 6 lokacije u V-flag, bit 7 u N-flag, a Z-flag postavlja na osnovu rezultata A AND mem (ako je rezultat nula, Z=1).
Formati: BIT m (zero page), BIT mm (apsolutno).
Primer
Na ekranu će se ispisati 128 karaktera „@“. Petlja traje dok se ne postavi 7. bit (bit 7 = 1 ⇒ negativan u dvokomplementnoj interpretaciji).
ASL — aritmetički shift ulevo
Šiftuje sve bitove ulevo; bit 7 ide u C, a bit 0 postaje 0. Tipično za množenje sa 2.
LSR — aritmetički shift udesno
Šiftuje sve bitove udesno; bit 0 ide u C, a bit 7 postaje 0. Tipično za celobrojno deljenje sa 2.
ROL — rotacija ulevo
Rotira ulevo preko C; bit 7 ide u C, prethodni C ulazi u bit 0.
ROR — rotacija udesno
Rotira udesno preko C; bit 0 ide u C, prethodni C ulazi u bit 7.
Napomena: ove naredbe nemaju direktan BASIC ekvivalent.
Primer
Posle SYS 64738 i SYS 4096, proverite: PRINT PEEK(2),PEEK(3),PEEK(4),PEEK(5) ⇒ 16 8 5 168.
3) Bezuslovni skokovi
JMP — skok na adresu
Ekivalent BASIC naredbi GOTO. Premešta tok na zadatu apsolutnu adresu.
JSR — odlazak na podprogram
Ekvivalent BASIC GOSUB. Poziva podprogram i vraća se na glavni tok preko RTS.
RTS — povratak
Vraća tok programa na naredbu ispod JSR (ili izlazi u BASIC ako je u glavnom toku).
Primer
Klikom na ‘A’ menjate redom: bela → crvena → ljubičasta. Napomena: prvi loop čeka pritisak, drugi sprečava „protrčavanje“ dok je taster još uvek pritisnut.
4) Naredbe direktne kontrole procesora
- NOP — ne radi ništa (korisno za usporavanje ili patch-ovanje koda).
- BRK — softverski prekid (skok na handler prekida, posle povratak na glavni tok).
- SEI — zabrana IRQ prekida (I=1); korisno kad morate sprečiti prekid.
- CLI — dozvoli prekide (I=0); vratiti normalan rad sistema.
- SEC — C=1; obavezno pre SBC ili kad želite C=1 za rotacije.
- CLC — C=0; obavezno pre ADC ili kad želite C=0 za rotacije.
- SED — decimalni mod (D=1); napomena: 6510 na C64 podržava decimalni mod.
- CLD — heksadecimalni/binarni mod (D=0); povratak sa decimalnog.
- CLV — V=0; reset overflow statusa (korisno posle aritmetike).
- RTI — povratak iz prekida.
Ove naredbe nemaju direktne BASIC ekvivalente.
5) Predlog formatiranja koda (sa komentarima)
Radi bržeg razumevanja, u ASM primerima koristite poravnate komentare desno od instrukcija, kratke ali informativne.
Za binarne prikaze, zadržite vizuelno poravnanje radi preglednosti.
Za rotacije/shiftove uvek eksplicitno pripremite C-bit (CLC/SEC) da bi rezultat bio predvidiv.
Zaključak
Sa ovom lekcijom obradili smo ključne logičke i bit-manipulativne instrukcije, kao i bezuslovne skokove i kontrolu procesora. U sledećoj lekciji sledi tabela svih asemblerskih naredbi sa uticajem na statusne bitove procesora.
Vidimo se u asembler lekciji 6. Puno pozdrava!

