C64 ASEMBLER (C64 ASSEMBLY) – Lekcija 5

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!

Ostavite komentar

Vaša adresa e-pošte neće biti objavljena. Neophodna polja su označena *

Scroll to Top