Beklediğimden çok daha detaylı cevaplar gelmiş. Şimdi elimizde iki adet adresleme modumuz var. STA komutu için yazarsam:
Zeropage indirect indexed addressing:
Bu mod sadece Y yazmacıyla çalışıyor. 16 bitlik bir adresi zeropage'de iki bayt ile göstermeye yarıyor. Düşük öncelikli baytı işaret ettiğimiz adrese, yüksek öncelikli baytı bir sonraki adrese yazıyoruz. CPU önce zeropage'e gidiyor. Zeropage'de gösterilen adresi okuyup, index kadar ilerisine gidip akümülatörü oraya yazıyor.
POS = *$1000<br /><br />LDA #$00<br />STA POS+2 ;#$1002 = $00<br />LDA #$04<br />STA POS+3 ;#$1003 = $04<br /><br /><br />LDA #$20<br />LDY #$29<br />STA (POS+2),Y ;#$0429 = 20
Buradaki örnek kodda STA komutu POS+2 ve POS+3 adreslerinde $00 ve $04 değerlerini okuyup $0400 adresini buluyor, $29 bayt ileri gidip, $0429 adresine (ikinci satırın başına) $20 değerini yazıyor.
Zeropage indexed indirect addressing:
Bu modda ise tam tersi bir durum var CPU belirtilen adresten sonra index kadar yürüyüp orada gördüğü değeri uygulama adresi olarak kullanıyor.
<br />POS = *$1000<br /><br /><br />LDA #$29<br />STA POS+2 ;#$1002 = $29<br />LDA #$04 <br />STA POS+3 ;#$1003 = $04<br /><br /><br />LDA #$20<br />LDX #$02<br />STA (POS,X) ;#$0429 = 20<br />
Buradaki örnek kodda STA komutu POS adresini okuyup 2 bayt ilerden POS+1 ve POS+2 adreslerinden $29 ve $04 değerlerini okuyor. Sonucunda $0429 adresini buluyor ve buraya (ikinci satırın başına) $20 değerini yazıyor.
O zaman zeropage indexed indirect adressing modunu önceden belirlenmiş alanlarda efekt göstermek gibi işlerde kullanabiliriz. Bir vektör tablosu oluşturup, kodumuzun farklı index değerine göre farklı adreslerde çalışmasını sağlayabiliriz. Peki X ve Y yazmaçlarının farkı nereden geliyor? Neden ilk metodda sadece Y kullanılırken ikincisinde sadece X kullanılabiliyor?