commodore.gen.tr

Commodore => Commodore Yazılım => Konuyu başlatan: wizofwor üzerinde Haziran 16, 2014, 10:47:43 ÖÖ



Konu Başlığı: ORA ve AND
Gönderen: wizofwor üzerinde Haziran 16, 2014, 10:47:43 ÖÖ
Malumunuz VIC için bank seçerken $DD00 adresinin son iki bitini değiştirmek gerekiyor. Bunun kolayı STA kullanmak, doğrusu STA'dan önce ORA kullanmak diye biliyorum. Dolayısıyla aşağıdaki örneği anlamadım. Burada AND'i niye kullanıyoruz?

   lda $DD00
   and #%11111100
   ora #%00000011
   sta $DD00


Konu Başlığı: Ynt: ORA ve AND
Gönderen: nightlord üzerinde Haziran 16, 2014, 11:21:42 ÖÖ
and'in gerekli olup olmadigi su iki seye bagli
- orada su anda hangi deger var (00 01 10 veya 11)
- yeni yazmak istedigin deger ne

O yazmacin diger bitleri baska seyleri kontrol ediyor. biz o bitleri degistirmeden sadece bank seciminde kullanilan son iki bite yeni birsey yazmak istiyoruz. Ancak bu yazdigimiz sey iki bitlik bir deger ve o 2 bitten 1 veya 2'si 0 olabilir. O durumda and kullanmadan ora kullanirsak ve yazmak istedigimiz deger ornegin 01 ise ora komutu ikiler basamagindaki degeri degistirmeden sadece 1'ler basamagindaki degeri 1 yapmis olur. yani orada su anda 10 yaziyordu ve biz 01 yazmak istedik ancak sadece ora #01 diyerek o iki bitte 11 sonucunu elde ediyoruz. and $fc diyerek o iki biti once 0'lamis ardindan ora ile 1 olmasini istediklerimizi 1'lemis oluyoruz.

Bu ornekte verdigin bank hic degismeyecekse yani oraya her zaman 11 yazacaksan and'i optimizasyon amaci ile disarida birakabilirsin. sik kullanilan bir diger optimizasyon da sudur: eger iki bank arasinda gidip geleceksen, xor ile tek komutta farkli bitleri flipleyebilirsin.



Konu Başlığı: Ynt: ORA ve AND
Gönderen: wizofwor üzerinde Haziran 16, 2014, 11:58:48 ÖÖ
Aşağıdaki gibi mi?

lda $DD00
and #%11111100
ora #%00000010
sta $DD00

...

lda $DD00
eor #%00000010
sta $DD00

...

lda $DD00
eor #%00000010
sta $DD00


Konu Başlığı: Ynt: ORA ve AND
Gönderen: witchdoktor üzerinde Haziran 16, 2014, 13:54:48 ÖS
nightlord güzel açıklamış ama ben de tuz biber olayım.

AND %11111100 ile 2-7. bitleri maskeleyip (içeriğini koruyup) ilk iki biti (bit 0 ve 1) sıfırlıyoruz.

ORA ile de daha önce sıfırlamış olduğumuz bit'lerden istediklerimizi set (1) ediyoruz.