64'ler sayı 16, sayfa 20

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 20

İşte her birine birer örnek: C000 LDX #$E4 C002 DEX RTS

Co00 LDY # $ 09 Co02 DEY Cco03 RTS

ZERO PAGE Şimdi bir sonraki komuta geçiyoruz, DEC hafızayı eksilt (decrement memory) anlamına gelir. LDA #$45 STA $FB C004 DEC $FB RTS Bu program çalıştırıldığında (execute), FB bölgesine 45 yükler ve sonra azaltarak 44'e indirir.

ZERO PAGE INDEXED Bu komut için X registeri bir index gibi kullanılır. Sanırım BASIC ROM bazı değerleri Zero Page yöntemi ile saklar. Bu nedenle Zero Page kullanırken hangi bölgeyi değiştirdiğine dikkat etmelisin. Commodore 64 Reference Guide kitabı bu konuda faydalı bilgiler vermektedir.

Şimdi Zero Page Indexed INC için bir örnek: C000 LDA #$FF C002 STA $CC C004 LDX #$0C C006 INC $C0,X C008 RTS Bu programı çalıştırdıktan (execute) sonra cursor'un yanıp sönmesi lazım. CC bölgesini değiştirdik, ki bu bölgede cursor enable depolanmıştır.

ABSOLUTE ADDRESSING Aşağıdaki programda olduğu gibi, bu şekilde hafızanın herhangi bir bölgesini azaltabilirsin: C000 DEC $0286 C003 Programı her çalıştırışında (execute) cursor rengi değişecektir. Çünkü 0286 bölgesi cursor rengini ihtiva eder.

ABSOLUTE INDEXED ADDRESSING Bu şekilde X registeri bir index gibi kullanılır: LDA #$00 C002 STA $03FD LDX #$1D DEC $03E0,X C00A RTS

Bu programı RUN ettiğin zaman ana menüdeki 4.cü seçeneği kullanarak 03FD bölgesindeki değeri kontrol et. FF olması lazım. Çünkü 00 değerinden 01 çıkardık. Buradan anlaşıldığı gibi 00 değerinden 01 çıkarıldığı zaman FF kalır.

64'ler Bu, bu kısımdaki en son komut idi, şimdi test zamanı! Şimdiye kadar gördüğünüz gibi A registeri, ne ilave ne de çıkarma komutuna sahip. Problem: A registerini 55 ile yükle ve çıkartarak 54 elde et. (KOPYA! Transfer). Bunun için iki iyi cevap var. Çalıştırmadan önce incele. C000 LDA #$55 TAY DEY C004 TYA RTS

“ VEYA

Co00 LDA # $ 55 C002 TAX DEX TXA Ccoo5 RTS Bu programı yapabildiysen bir sonraki bölüme geçebilirsin. Yoksa bu bölümü tekrar etmeni tavsiye ederim.

(Atlama) Bunu okumadan önce BASIC'teki GOTO ve GOSUB komutlarına aşina olman gerekiyor. Bunları User Guide kitabından bulabilirsin.

JMP Bu komut GOTO komutuna çok benzer. Eğer yeni bir adrese atlamak istiyorsan bu komutu kullanabilirsin. Örnek olarak B000 adresine atlamak istiyorsan JMP $B000 komutu yazmalısın. İşte örnek program: C000 JMP $C006 LDA #$00 RTS C006 LDA #$FF RTS

C000: C006 bölgesine atla C003: A registerini 00 ile yükle, hiçbir zaman çalıştırılamaz (execute), çünkü atladık. C005: Bu kompüteri BASIC'e döndürecekti fakat o da atlandı. C006: Burası kompüteri atladığı yer. Bu A registerini FF ile yükler. C008: BASIC'e dönülür.

INDIRECT ADDRESSING JMP komutu indirect (dolaylı) adreslemeyi destekler. JMP ($XXXX) şeklinde yazılır, XXXX 4 haneli hex sayıdır.

SYS Bu komut ile daha önce karşılaşmışsınızdır. Assembly dili komutu değil BASIC komutudur. Bu komut makina koduna gidecek ve RTS komutu ile karşılaşınca BASIC'e dönecektir. Örnek olarak hex sayısı desimaldeki 49152 ile aynıdır. Şimdiye kadar yazdığımız bütün programları RUN etmek için 49152 yazabilirsiniz. SYS komutu Assembly dili rutinini yazdıktan sonra kullanılır ve artık Assembler'e ihtiyaç kalmaz.

Klavyeyle gezinmek için ← ve → tuşları.