Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

  Gelişmiş Arama
insanın içinde varsa, commodore.gen.tr açığa çıkarır bunu.. bir nevi retro olaylarının dolunayıyız.(Arda)
Sayfa: [1]   Aşağı git
Yazdır
Gönderen Konu: ORA ve AND  (Okunma Sayısı 4531 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.785


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« : 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
Logged

nightlord
Uzman
*****
Mesaj Sayısı: 558



Üyelik Bilgileri WWW
« Yanıtla #1 : 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.

Logged
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.785


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #2 : 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
Logged

witchdoktor
Uzman
*****
Mesaj Sayısı: 6.238



Üyelik Bilgileri
« Yanıtla #3 : 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.
Logged
Sayfa: [1]   Yukarı git
Yazdır
Gitmek istediğiniz yer: