ASSEMBLER KURSU-3

Assembler kursunun bu bölümünde önce 6510 komutlarını alfabetik olarak sıralayıp ne iş yaptıklarını öğreneceğiz. Daha sonra her komutu çeşitleriyle birlikte göreceğiz.

KOMUT LİSTESİ (ALFABETİK SIRA)

KOMUT AÇIKLAMA ADC Aküdeki değerle sabit bir sayıyı veya adresteki değeri elde bitini de kullanarak topla. AND Aküdeki değerle, sabit bir sayı veya adresteki değer arasında "AND" işlemi yap. ASL Aküdeki değeri veya adresteki değeri bir bit sola kaydır. BCC Elde yoksa (C biti "0" ise) dallan. BCS Elde varsa (C biti "1" ise) dallan. BEQ Sonuç sıfır ise (Z biti "1" ise) dallan. BIT Adresteki bitleri Akü ile karşılaştır. BMI Sonuç eksi ise (N biti "1" ise) dallan. BNE Sonuç sıfır değilse (Z biti "0" ise) dallan. BPL Sonuç pozitif ise (N biti "0" ise) dallan. BRK Program içinde kesinti oluşturur. Kontrol başka bir programa geçer. BVC Taşma yoksa (V biti "0" ise) dallan. BVS Taşma varsa (V biti "1" ise) dallan. CLC Elde bitini "0" yap. CLD Ondalık moddan çık. (D bitini "0" yap) CLI Kesintileri serbest bırak. (I bitini "0" yap) CLV Taşma bitini "0" yap. CMP Aküdeki değeri sabit bir sayıyla veya adresteki değerle karşılaştır. CPX X registerindeki değeri sabit bir sayıyla veya adresteki değerle karşılaştır. CPY Y registerindeki değeri sabit bir sayıyla veya adresteki değerle karşılaştır. DEC Adresteki değeri 1 azalt. DEX X registerindeki değeri 1 azalt. DEY Y registerindeki değeri 1 azalt. EOR Aküdeki değerle, sabit bir sayı veya adresteki değer arasında "EOR" işlemi yap. INC Adresteki değeri 1 arttır. INX X registerindeki değeri 1 arttır. INY Y registerindeki değeri 1 arttır. JMP Program içindeki veya hafızadaki başka bir adrese git. JSR Geri dönüş adresini saklayarak program içindeki veya hafızadaki başka bir adrese git. LDA Aküye sabit bir sayıyı veya adresteki değeri yükle. LDX X registerine sabit sayıyı veya adresteki değeri yükle. LDY Y registerine sabit sayıyı veya adresteki değeri yükle. LSR Aküdeki veya adresteki değeri bir bit sağa kaydır. NOP Hiç bir işlem yapma. ORA Aküdeki değerle, sabit bir sayı veya adresteki değer arasında "OR" işlemi yap. PHA Aküdeki değeri yığına at.

PHP 6510'un statü registerinin değerini yığına at. PLA Yığındaki değeri Aküye geri yükle. PLP Yığındaki değeri statü registerine geri yükle. ROL Aküdeki veya adresteki değeri bir bit sola döndür. ROR Aküdeki veya adresteki değeri bir bit sağa döndür. RTI Kesinti (Interrupt) işleminden geri dön. RTS Alt programdan geri dön. SBC Aküdeki değerden sabit bir sayıyı veya adresteki değeri elde bitini de kullanarak çıkar. SEC Elde bitini "1" yap. SED Ondalık moda gir. (D bitini "1" yap.) SEI Kesintileri durdur. (I bitini "1" yap.) STA Aküdeki değeri adrese yerleştir. STX X registerindeki değeri adrese yerleştir. STY Y registerindeki değeri adrese yerleştir. TAX Aküdeki değeri X registerine kopyala. TAY Aküdeki değeri Y registerine kopyala. TSX Yığın Göstergecinin (SP) değerini X registerine kopyala. TXA X registerinin değerini Aküye kopyala. TXS X registerinin değerini Yığın Göstergecine (SP) kopyala. TYA Y registerinin değerini Aküye kopyala.

"AND" "OR" VE "EOR" İŞLEMLERİ

Bu dersimizde önce "AND" "OR" "EOR" ve aritmetiksel işlemlerinin mantığını öğreneceğiz. Daha sonra ise komutları ayrıntılı bir şekilde göreceğiz.

"AND", "OR" ve "EOR" işlemleri bit düzeyinde işlem yapar ve sadece Akü ile kullanılır. Bu komutlarla herhangi bir adresteki değerin istediğiniz bitlerini "0" veya "1" yapabilirsiniz. "AND" işlemi bitler arasında çarpma işlemi yapar. Eğer karşılaştırılan bitlerin ikisi de "1" ise sonuç "1" dir. Diğer durumlarda sonuç "0" dır. Bunu bir tablo ile görelim. AND işlemini herhangi bir biti "0" yapmak için kullanabilirsiniz.

BİTLER İŞLEM SONUÇ 0 - 0 AND 0 0 - 1 AND 0 1 - 0 AND 0 1 - 1 AND 1

"OR" işlemi bitler arasında toplama işlemi yapar. Eğer karşılaştırılan bitlerin ikisi de "0" ise sonuç "0" dır. Diğer durumlarda sonuç "1" dir. Bunu bir tablo ile görelim. OR işlemini herhangi bir biti "1" yapmak için kullanabilirsiniz.

BİTLER İŞLEM SONUÇ 0 - 0 OR 0 0 - 1 OR 1 1 - 0 OR 1 1 - 1 OR 1

"EOR" işlemi diğerlerinden çok farklıdır. Eğer karşılaştırılan bitlerin ikisi de aynı ise sonuç "0" dır. Herhangi biri diğerinden farklıysa sonuç "1" dir. Bunu bir tablo ile görelim.

BİTLER İŞLEM SONUÇ 0 - 0 EOR 0 0 - 1 EOR 1 1 - 0 EOR 1 1 - 1 EOR 0 Eğer EOR komutunu kullanmayı bilirseniz herhangi bir adresin değeri her seferinde başlangıç ve bitiş değeriyle değiştirebilirsiniz. Bir örnek verelim.

Diyelim ki bir program yaptınız ve program içinde bir arttırma komutunuz var. Bir sayaç ile artış miktarını kontrol ediyorsunuz. Sayaç belli bir sayıya ulaştığında arttırma komutunu azaltma komutuna çevirmeniz gerekiyor. Bunun için EOR komutunu kullanabilirsiniz. Her EOR komutu işlendiğinde komut kodu AZALTMA-ARTTIRMA şeklinde değişir. Aşağıdaki tabloyu inceleyin.

ETİKET 
KOMUT 
PARAMETRE 
AÇIKLAMA 
... 
........ 
........ 
DENEME 
INC 
$D000 
Adresi 1 arttır 
LDX 
SAYAÇ 
Sayacı oku 
INX 
Sayaç değerini 1 arttır 
CPX 
#$40 
Sayaç #$40 mı ? 
BNE 
GİT 
Değilse git.
LDA 
DENEME 
Adresi oku. (Okunan ilk değer #$EE' dir.)

(Son değer #$CE' dir.)

EOR #$20 #$20 ile EOR'la. (Sonuç #$CE olur.)

(Daha sonra #$EE olur.) STA DENEME Adrese yaz. LDX #$00 Sayacın yeni değeri GİT STX SAYAÇ Sayaca yaz ... ........ ........ TOPLAMA VE ÇIKARMA İŞLEMLERİ

Eğer bir program yazarken toplama veya çıkarma işlemi yapacaksanız dikkat etmeniz gereken bir nokta vardır. Bir toplama işlemine başlamadan önce mutlaka CLC komutu kullanarak ELDE bitini sıfırlayın. Daha sonra toplama işleminizi yapın. Yaptığınız toplama (eğer bir baytlıksa) işleminde sonuç 255'i geçerse (en fazla 510 olur) CARRY (Elde) biti "1" olur. Bu "1" ilk dersimizde gördüğünüz LOW BAYT - HIGH BAYT formatındaki HIGH BAYT'ı gösterir ve 256 demektir. Toplama işleminizin sonucu CARRY * 256 + AKÜDEKİ DEĞER şeklindedir. Aküdeki değer LOW BAYT anlamına gelir.

Bu anlattıklarımızı bir örnekle görelim.

ETİKET 
KOMUT 
PARAMETRE 
AÇIKLAMA 
... 
........ 
........ 
LDX 
#$20 
X'e #$20 değerini yükle. 
STX 
ADRES1 
Bu değeri adres1'e kopyala. 
LDA 
#$80 
Aküye #$80 değerini yükle. 
CLC 
Elde bitini "0" yap.
ADC 
ADRES1 
Aküdeki değeri 
Adres1 deki değer ile topla. 
STA 
ADRES2 
Sonucu Adres2' ye yaz. 
BCS 
GİT 
Eğer ELDE biti "1" ise git. 
RTS 
ELDE yoksa programı bitir. 
GİT 
... 
........ 
........

Eğer bir çıkarma işlemi yapacaksanız bu kez de SEC komutu kullanarak ELDE bitini "1" yapın. Daha sonra çıkarma işleminizi yapın. Bunun faydası AKÜ - SAYI işleminde SAYI Aküdeki değerden büyükse sonucun doğru olmasını sağlar. Şunu unutmayın: Çıkarma işleminde dikkatli olun.

KOMUT LİSTESİ (ALFABETİK SIRA) 6510 işlemcisine ait komutları önce ikiye ayırmak gerekiyor. 1- Standart Komutlar: Bu kategorideki komutlar 6510'un üreticisi tarafından çalışması garanti edilen komutlardır.

2- Standart Olmayan Komutlar: Bu kategorideki komutlar için her makinada çalışabilir diye kural yoktur. Sizin makinanızda çalışan bir komut başka bir makinada kilitlenmeye yol açabilir. Ama bu kategorideki komutlardan bazıları çok işe yarayabilir. Yazı dizimizin sonunda bu komutların bir listesini vermeyi düşünüyorum. NOT: Komut Tablolarında $ADR Sıfırıncı sayfa'daki bir adresi gösterir 0 ile 255 ($00 - $FF) arasındaki adresleri kapsar. (0 ve 255 dahil) $ADRES ise 0 ile 65535 ($0000 - $FFFF) arasındaki adresleri kapsar. (0 ve 65535 dahil) #$SAYI 0 ile 255 ($00 - $FF) arasındaki bir sayıyı gösterir. (0 ve 255 dahil)

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

ADC

Aküdeki değerle sabit bir sayıyı veya başka bir adresteki değeri elde bitini de kullanarak topla.

Sonucu aküye yaz.

N Z C V

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız ADC #$SAYI 69 2 2 Sıfırıncı Sayfa ADC $ADR 65 2 3 Sıfırıncı Sayfa X indeksli ADC $ADR, X 75 2 4 Mutlak ADC $ADRES 6D 3 4 Mutlak X İndeksli ADC $ADRES, X 7D 3 4 * Mutlak Y İndeksli ADC $ADRES, Y 79 3 4 * İndeksli Dolaylı ADC ($ADR, X) 61 2 6 Dolaylı İndeksli ADC ($ADR), Y 71 2 5 * * Sayfa sınırı ile karşılaştığında 1 ekle

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

AND Aküdeki değerle sabit bir sayı veya adresteki değer arasında "AND" işlemi yap. Sonucu aküye yaz. N Z

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız AND #$SAYI 29 2 2 Sıfırıncı Sayfa AND $ADR 25 2 3 Sıfırıncı Sayfa X indeksli AND $ADR, X 35 2 4 Mutlak AND $ADRES 2D 3 4 Mutlak X İndeksli AND $ADRES, X 3D 3 4 * Mutlak Y İndeksli AND $ADRES, Y 39 3 4 * İndeksli Dolaylı AND ($ADR, X) 21 2 6 Dolaylı İndeksli AND ($ADR), Y 31 2 5 * Sayfa sınırı ile karşılaştığında 1 ekle

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

ASL

Aküdeki veya adresteki değeri bir bit sola kaydır (Sayı 2 ile Çarpılmış olur). Sayının 7. biti "C"'ye yüklenir, 0. Bitine her zaman "0" değeri yüklenir.

N Z C

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Akü ASL A 0A 1 2 Sıfırıncı Sayfa ASL $ADR 06 2 5 Sıfırıncı Sayfa X indeksli ASL $ADR, X 16 2 6 Mutlak ASL $ADRES 0E 3 6 Mutlak X İndeksli ASL $ADRES, X 1E 3 7

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR BCC Elde biti "0" ise dallan. (C = 0 ise dallan) ------------ ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Relative BCC #$SAYI 90 2 2 ** ** Dallanma aynı sayfada ise 1 ekle. Eğer dallanma başka bir sayfaya ise 2 ekle.

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR BCS Elde biti "1" ise dallan. (C = 1 ise dallan) ------------- ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Relative BCS #$SAYI B0 2 2 ** ** Dallanma aynı sayfada ise 1 ekle. Eğer dallanma başka bir sayfaya ise 2 ekle.

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR BEQ Sonuç sıfır ise dallan. (Z = 1 ise dallan) ------------- ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Relative BEQ #$SAYI F0 2 2 ** ** Dallanma aynı sayfada ise 1 ekle. Eğer dallanma başka bir sayfaya ise 2 ekle.

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

BIT

Bellekteki bitleri akü ile karşılaştır. (Akü ile bellek arasında AND işlemi yap. Bellekteki sayının 7. ve 6.

bitlerini STATUS registerinin 7. ve 6. bitlerine yerleştirilir. Eğer A AND BELLEK işleminin sonucu

0 ise Z = 1 olur, değilse Z = 0 olur.

Z 7. bit - --> N'ye 6. bit ---> V'ye

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Sıfırıncı Sayfa BIT $ADR 24 2 3 Mutlak BIT $ADRES 2C 3 4

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR BMI Sonuç eksi ise dallan. ( N = 1 ise dallan ) ------------- ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Relative BMI #$SAYI 30 2 2 ** ** Dallanma aynı sayfada ise 1 ekle. Eğer dallanma başka bir sayfaya ise 2 ekle.

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR BNE Sonuç eksi değilse dallan. ( Z = 0 ise dallan ) ------------- ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Relative BNE #$SAYI D0 2 2 ** ** Dallanma aynı sayfada ise 1 ekle. Eğer dallanma başka bir sayfaya ise 2 ekle.

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR BPL Sonuç Pozitif ise dallan. ( N = 0 ise dallan ) ------------- ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Relative BPL #$SAYI 10 2 7 ** ** Dallanma aynı sayfada ise 1 ekle. Eğer dallanma başka bir sayfaya ise 2 ekle.

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

BRK

Kesinti meydana getirir. Program sayacı ve işlemci

Statü registeri yığına atılır. Mikroişlemci $0316 vektör adresi üzerinden $FE66 adresindeki programı çalıştırır. "BRK komutu 'I' biti "1" yapılarak önlenemez"

I

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız BRK 00 1 7

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR BVC Taşma biti "0" ise dallan. ( V = 0 ise dallan ) ------------- ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Relative BVC #$SAYI 50 2 2 ** ** Dallanma aynı sayfada ise 1 ekle. Eğer dallanma başka bir sayfaya ise 2 ekle. KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR BVS Taşma biti "1" ise dallan. ( V = 1 ise dallan ) ------------- ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Relative BVS #$SAYI 70 2 2 ** ** Dallanma aynı sayfada ise 1 ekle. Eğer dallanma başka bir sayfaya ise 2 ekle. KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR CLC Elde bitini "0" yap. ( C = 0 yap) C ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız CLC 18 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR CLD Ondalık moddan çık. ( D = 0 yap.) D ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız CLD D8 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

CLI Kesinti (Interrupt) önleme bitini sıfırla ( Interruptları serbest bırak) ( I = 0 yap) I

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız CLI 58 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR CLV Taşma bitini sıfırla ( V = 0 yap) V ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız CLV B8 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

CMP Aküdeki değerle sabit bir sayıyı veya adresteki değeri karşılaştır. N Z C

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız CMP #$SAYI C9 2 2 Sıfırıncı Sayfa CMP $ADR C5 2 3 Sıfırıncı Sayfa X indeksli CMP $ADR, X D5 2 4 Mutlak CMP $ADRES CD 3 4 Mutlak X İndeksli CMP $ADRES, X DD 3 4 * Mutlak Y İndeksli CMP $ADRES, Y D9 3 4 * İndeksli Dolaylı CMP ($ADR, X) C1 2 6 Dolaylı İndeksli CMP ($ADR), Y D1 2 5 * Sayfa sınırı ile karşılaştığında 1 ekle

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

CPX X registerindeki değerle sabit bir sayıyı veya adresteki değeri karşılaştır. N Z C

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız CPX #$SAYI E0 2 2 Sıfırıncı Sayfa CPX $ADR E4 2 3 Mutlak CPX $ADRES EC 3 4

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

CPY Y registerindeki değerle sabit bir sayıyı veya adresteki değeri karşılaştır. N Z C

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız CPY #$SAYI C0 2 2 Sıfırıncı Sayfa CPY $ADR C4 2 3 Mutlak CPY $ADRES CC 3 4

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

DEC Bellekteki sayıyı 1 azalt. Sayı 0'sa DEC komutundan sonra Adresteki değer 255 ($FF) olur. N Z

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Sıfırıncı Sayfa DEC $ADR C6 2 5 Sıfırıncı Sayfa X indeksli DEC $ADR, X D6 2 6 Mutlak DEC $ADRES CE 3 6 Mutlak X İndeksli DEC $ADRES, X DE 3 7

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

DEX X registerindeki değeri 1 azalt. X = 0 iken DEX komutundan sonra X'in yeni değeri 255 ($FF) olur. N Z

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız DEX CA 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

DEY Y registerindeki değeri 1 azalt. Y = 0 iken DEY komutundan sonra Y'nin yeni değeri 255 ($FF) olur. N Z

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız DEY 88 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

EOR Akü ile sabit bir sayı veya adresteki değer arasında

"Exclusive-OR" işlemi yap. Sonucu Aküye yaz. N Z

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız EOR #$SAYI 49 2 2 Sıfırıncı Sayfa EOR $ADR 45 2 3 Sıfırıncı Sayfa X indeksli EOR $ADR, X 55 2 4 Mutlak EOR $ADRES 4D 3 4 Mutlak X İndeksli EOR $ADRES, X 5D 3 4 * Mutlak Y İndeksli EOR $ADRES, Y 59 3 4 * İndeksli Dolaylı EOR ($ADR, X) 41 2 6 Dolaylı İndeksli EOR ($ADR), Y 51 2 5 * Sayfa sınırı ile karşılaştığında 1 ekle

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

INC Bellekteki sayıyı 1 arttır. Sayı 255 ($FF) ise INC komutundan sonra adresteki değer 0 olur. N Z

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Sıfırıncı Sayfa INC $ADR E6 2 5 Sıfırıncı Sayfa X indeksli INC $ADR, X F6 2 6 Mutlak INC $ADRES EE 3 6 Mutlak X İndeksli INC $ADRES, X FE 3 7

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

INX X registerindeki değeri 1 arttır. X = $FF iken INX komutundan sonra X'in yeni değeri 0 olur. N Z

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız INX E8 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

INY Y registerindeki değeri 1 arttır. Y = $FF iken INY komutundan sonra Y'nin yeni değeri 0 olur. N Z

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız INY C8 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR JMP Programın çalışması verilen adresten devam eder. ---------- ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Mutlak JMP $ADRES 4C 3 3 Dolaylı JMP ($ADRES) 6C 3 5 Dolaylı JMP komutunda programın çalışmaya devam edeceği adres LO-BAYT, HI-BAYT şeklinde ADRES'te ve ADRES+1'de tutulur.

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

JSR

Program o anki çalışma adresini yığına atarak başka bir adresten çalışmaya devam eder. Gidilen adreste

RTS komutuna rastlayan program, daha önce sakladığı adresi yığından geri alarak çalışmasına,

JSR komutundan bir sonraki komuttan itibaren çalışmasına devam eder. Her JSR komutuna karşılık mutlaka 1 adet RTS komutu bulunmalıdır.

----------

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Mutlak JSR $ADRES 20 3 6

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR LDA Aküye sabit bir sayı veya adresteki değer yüklenir. N Z ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız LDA #$SAYI A9 2 2 Sıfırıncı Sayfa LDA $ADR A5 2 3 Sıfırıncı Sayfa X indeksli LDA $ADR, X B5 2 4 Mutlak LDA $ADRES AD 3 4 Mutlak X İndeksli LDA $ADRES, X BD 3 4 * Mutlak Y İndeksli LDA $ADRES, Y B9 3 4 * İndeksli Dolaylı LDA ($ADR, X) A1 2 6 Dolaylı İndeksli LDA ($ADR), Y B1 2 5 * * Sayfa sınırı ile karşılaştığında 1 ekle

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

LDX X registerine sabit bir sayı veya adresteki değer yüklenir. N Z

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız LDX #$SAYI A2 2 2 Sıfırıncı Sayfa LDX $ADR A6 2 3 Sıfırıncı Sayfa Y indeksli LDX $ADR, Y B6 2 4 Mutlak LDX $ADRES AE 3 4 Mutlak Y İndeksli LDX $ADRES, Y BE 3 4 * * Sayfa sınırı ile karşılaştığında 1 ekle

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

LDY Y registerine sabit bir sayı veya adresteki değer yüklenir. N Z

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız LDY #$SAYI A0 2 2 Sıfırıncı Sayfa LDY $ADR A4 2 3 Sıfırıncı Sayfa X indeksli LDY $ADR, X B4 2 4 Mutlak LDY $ADRES AC 3 4 Mutlak X İndeksli LDY $ADRES, X BC 3 4 * * Sayfa sınırı ile karşılaştığında 1 ekle KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

LSR

Aküdeki veya adresteki değeri bir bit sağa kaydır (Sayı 2'ye bölünmüş olur). Sayının 0. biti "C"'ye yüklenir, 7. bitine her zaman "0" değeri yüklenir.

N = 0

Z C

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Akü LSR A 4A 1 2 Sıfırıncı Sayfa LSR $ADR 46 2 5 Sıfırıncı Sayfa X indeksli LSR $ADR, X 56 2 6 Mutlak LSR $ADRES 4E 3 6 Mutlak X İndeksli LSR $ADRES, X 5E 3 7

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR NOP Hiç bir işlem yapma ----------- ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız NOP EA 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

ORA Aküdeki değerle sabit bir sayı veya adresteki değer arasında "OR" işlemi yap. Sonucu aküye yaz. N Z

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız ORA #$SAYI 09 2 2 Sıfırıncı Sayfa ORA $ADR 05 2 3 Sıfırıncı Sayfa X indeksli ORA $ADR, X 15 2 4 Mutlak ORA $ADRES 0D 3 4 Mutlak X İndeksli ORA $ADRES, X 1D 3 4 * Mutlak Y İndeksli ORA $ADRES, Y 19 3 4 * İndeksli Dolaylı ORA ($ADR, X) 01 2 6 Dolaylı İndeksli ORA ($ADR), Y 11 2 7 * Sayfa sınırı ile karşılaştığında 1 ekle KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR PHA Aküyü yığına at. ----------- ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız PHA 48 1 3

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR PHP İşlemcinin statü registerini yığına at. ----------- ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız PHP 08 1 3

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR PLA Aküyü yığından geri al. N Z ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız PLA 68 1 4

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR PLP İşlemcinin statü registerini yığından geri al. YIĞINDAN ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız PLP 28 1 4

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

ROL

Aküdeki veya adresteki değeri bir bit sola döndür. "C" biti sayının 0. bit'ine yüklenirken, sayının 7. bit'i

"C" bitine yüklenir.

N Z C

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Akü ROL A 2A 1 2 Sıfırıncı Sayfa ROL $ADR 26 2 5 Sıfırıncı Sayfa X indeksli ROL $ADR, X 36 2 6 Mutlak ROL $ADRES 2E 3 6 Mutlak X İndeksli ROL $ADRES, X 3E 3 7

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

ROR

Aküdeki veya adresteki değeri bir bit sağa döndür. "C" biti sayının 7. bit'ine yüklenirken, sayının 0. bit'i

"C" bitine yüklenir.

N Z C

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM

SAYISI Akü ROR A 6A 1 2 Sıfırıncı Sayfa ROR $ADR 66 2 5 Sıfırıncı Sayfa X indeksli ROR $ADR, X 76 2 6 Mutlak ROR $ADRES 6E 3 6 Mutlak X İndeksli ROR $ADRES, X 7E 3 7

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR RTI İnterrupt (Kesinti) işleminden geri dön. YIĞINDAN ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız RTI 40 1 6

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR RTS Alt programdan geri dön. Veya ana programı bitir ----------- ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız RTS 60 1 6

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

SBC Aküden sabit bir sayıyı veya adresteki değeri "C" (Elde) bitini de kullanarak çıkart. Sonucu Aküye yaz. N Z C V

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız SBC #$SAYI E9 2 2 Sıfırıncı Sayfa SBC $ADR E5 2 3 Sıfırıncı Sayfa X indeksli SBC $ADR, X F5 2 4 Mutlak SBC $ADRES ED 3 4 Mutlak X İndeksli SBC $ADRES, X FD 3 4 * Mutlak Y İndeksli SBC $ADRES, Y F9 3 4 * İndeksli Dolaylı SBC ($ADR, X) E1 2 6 Dolaylı İndeksli SBC ($ADR), Y F1 2 5 * * Sayfa sınırı ile karşılaştığında 1 ekle

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR SEC Elde bitini "1" yap. (C = 1 yap) C ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız SEC 38 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR SED Ondalık moda gir. (D = 1 yap) D

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM

SAYISI Dolaysız SED F8 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR SEI İnterruptları durdur. ( I = 1 yap ) I ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız SEI 78 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR STA Aküdeki değeri adrese yaz. ---------- ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Sıfırıncı Sayfa STA $ADR 85 2 2 Sıfırıncı Sayfa X indeksli STA $ADR, X 95 2 4 Mutlak STA $ADRES 8D 3 4 Mutlak X İndeksli STA $ADRES, X 9D 3 5 Mutlak Y İndeksli STA $ADRES, Y 99 3 5 İndeksli Dolaylı STA ($ADR, X) 81 2 6 Dolaylı İndeksli STA ($ADR), Y 91 2 6

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR STX X registerindeki değeri adrese yaz. ---------- ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Sıfırıncı Sayfa STX $ADR 86 2 3 Sıfırıncı Sayfa Y indeksli STX $ADR, Y 96 2 4 Mutlak STX $ADRES 8E 3 4

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR STY Y registerindeki değeri adrese yaz. ---------- ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Sıfırıncı Sayfa STY $ADR 84 2 3 Sıfırıncı Sayfa X indeksli STY $ADR, X 94 2 4 Mutlak STY $ADRES 8C 3 4

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR TAX Aküdeki değeri X registerine kopyala. ( X = A olur. ) N Z ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız TAX AA 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR TAY Aküdeki değeri Y registerine kopyala. ( Y = A olur. ) N Z ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız TAY A8 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

TSX Yığın göstergecini X registerine kopyala. ( X = SP olur. ) N Z

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız TSX BA 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR TXA X registerini Aküye kopyala. ( A = X olur. ) N Z ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız TXA 8A 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR

TXS X registerini Yığın Göstergecine kopyala.

( SP = X olur. ) Tehlikeli bir komuttur. ----------

ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız TXS 9A 1 2

KOMUT AÇIKLAMA ETKİLENEN BAYRAKLAR TYA Y registerini Aküye kopyala. ( A = Y olur. ) N Z ADRESLEME MODU ASSEMBLER KOMUTU İŞLEM KODU BAYT SAYISI ÇEVRİM SAYISI Dolaysız TYA 98 1 2 Assembler bölümünü böylece bitirmiş olduk. Bir program yazmaya başlamadan önce programda ne gibi özellikler bulunacak, nasıl çalışacak vs. bunları belirleyin. Programı yazarken hiç acele etmeyin. İlk önce programın ekran düzenini kafanızda canlandırın. Ekranda yazı nerede bulunacak, renkler ne olacak bunları ayarlayın. Daha sonra programı yazmaya başlayın, yazdıkça arada bir kaydedin. Daha sonra çalıştırın ama şuna dikkat edin. Henüz bitmemiş bir programınız olduğu için programı çalıştırınca bilgisayarınız kilitlenebilir veya istediğiniz gibi çalışmayabilir. Bir örnek verelim isterseniz. Diyelim ki programda müzik çalacak ve bunun için LDA #$00 JSR $1000 gibi bir komut vererek hazırlık yaptınız. (İntrocular iyi bilir bu komutları ☺) Fakat hafızaya müzik yüklemeyi unuttuysanız C64 kilitlenecektir. Veya değişik bir font kullanacaksınız ve font hafızaya yüklenmiş durumda. Programda yeni karakter setinin bulunduğu bölgeyi VIC’e bildirdiniz fakat ekran birden saçma sapan karakterlerle doldu. Sebebi ise $D018 adresine yanlış bir sayı yerleştirilmiş olabilir (belki de karakter setiniz bozulmuştur). İşte bunun gibi durumlarla karşılaşmamak için eğer ekstradan font, müzik, sprite vs. kullanacaksanız önceden bunları hafızaya yükleyin sonradan programda aktif hale getirin. Size tavsiyem bunların hepsini tek seferde kaydedin. Yani fontu ayrı müziği ayrı kaydetmeyin. Büyük bir ihtimalle – neredeyse standart diyebilirim- müzik $1000-$2000 ve font ise (1x1 font için) $2000-$2200 adresleri arasında olacaktır. Code için ise $0900-$1000 arasını ve daha üst adresleri kullanabilirsiniz. Eğer programınızda logo falan olacaksa size tavsiyem $4000’den yukarısını kullanın demek olacaktır. Bazen basit bir hata programınızda büyük bir problem ortaya çıkarabilir. Mesela gereksiz yere çağrılan bir alt rutin, başka bir alt rutin tarafından kullanılan hafıza bölgesini değiştiriyor olabilir, siz de niye çalışmıyor diye kafayı sıyırırsınız. O nedenle assembler ile program yazarken dikkat etmelisiniz. Assembler ile yazılmış bir programda hata bulmak zordur. Ama programları yazdıkça, zamanla elinizde neredeyse klişeleşmiş rutinler olacaktır ve işiniz daha da kolaylaşacaktır. Son olarak şunu söyleyeyim. Eğer başkasının yazdığı programları incelerseniz çok faydasını görebilirsiniz. En azından bazı işlerin nasıl yapıldığını anlayabilirsiniz ama şunu açıkça söylemekte fayda var. Bir başkasının yazdığı assembler programları anlamak veya çözmek her zaman kolay değildir. Mesela incelediğiniz programda sürekli olarak JSR komutlarıyla alt rutinlere sıçrama yapılıyorsa bir süre sonra hangi adresin nereden çağrıldığını karıştırırsınız. Veya programcı ROM’lardaki rutinleri sık sık kullanıyor olabilir. Bunun için de C64’ün ROM’larını incelemeniz ve oradaki rutinlerin ne iş yaptığını bilmeniz gereklidir. Bu kadar laftan sonra artık bir şeyler yaparsınız değil mi? Hadi bakalım kolay gelsin.