Bu sayfadaki yazılar
Sayfanın metni
Sayfa 69
Oise 1, 1 ise 0 olarak değiştirilir. Bu tür bit komutları da CMP yada TST komutu gibi Becc komutunun yardımını kullanarak çalışırfakat bu komut sadece zero flag'ı etkilediğinden sadece BEO ve BNE komutları kullanılmalıdır Örnek : . BCHG #6,$bfe00 BEO rutin Örneğimizin ilk komutunda $bfe001 adresinin 6. bitinin O olup olmadığı kontrol edilir. Eğer 0 ise zero flag biti 1 yapılır. İkinci komutta ise zero flag kontrol edilir ve bu bitin 1 olduğunu göreceğinden rutin adlı program labeliına atlanır. BCLR KOMUTU : BCLR (Test Bit and Clear) komutu belirtilen bitin O olup olmadığı kontrol edilir eğer bit O ise zero flag bitine 1 değeri yazılır. Tüm bit komutlarının aynı bit kontrol sistemine ve zero flag bitini aynı şekilde etkilediklerine dikkat edin. Örnek : BCLR BEO rutin Birinci komutta $ff00 adresinin dO'ıncı biti (dO registerinde bulunan değer) kontrol edilir. Sonuç Zero Flag'a yazılır ve birinci komutta verilen bit O yapılır. İkinci komutta ise zero flag 1 ise rutin'e atlanır. BSET KOMUTU : BSET (Test Bit and Set). Bu komut ise belirtilen bitin O olup olmadığınıkontrol eder eğer O ise zero flag'a 1 değeri yazılır Mikroprocessoe bu işlemi tamamladıktan sonra belirtilen biti
1 yaparak programın devamını sağlar. Örnek : BSET #4,$71256 ; kontrol ve bitin 1 yapılması BNE rutin dallanma Bu örnekte ise $71256 adresi- “ nin 4 üncü bitinin 0 olup olmadığı kontrol edilir. Eğer 0 ise zero flag bitine 1 değeri yazılır. Ardından ikinci komutta zero flag'in 1 olup olmadığı kontrol edilir. Eğer zero flag 1 ise rutin adlı label'a dallanılır BTST KOMUTU: BTST (Only Test Bit) komutu diğer bit komutlarından bir yönde farklıdır. Bu komutun tek farkı belirtilen biti etkilememesi sadece o biti kontrol ederek 0 olması durumunda zero flag bitine 1 değerini yazmasıdır. Tabi ki bu komutta diğer bit komutları gibi sadece zero flag bitini etkilediğinden bne yada beq komutlarından biriyle kullanılabilmektedir. Örnek BTST #6,$bfe001 ; kontrol BNE rutin — ; dallanma Örnekte, görüldüğü gibi ilk komutta $bfe001 registerinin 6 ıncı biti test edilmekte, eğer 0 ise zero flag bitine bir değerini atmaktadır. İkinci komut ise zero flag bitinin 0 olup olmadığını kontrol eder -BNE ve BEQ komutlarının arasındaki önemli farka dikkat edin- ve eğer zero flag biti 0 ise rutin label'ına atlanır. Burada dikkat edilirse CIA-A'nın sol mouse tuşunu kontrol eden bit söz konusu, böylece sol mouse tuşunun basılı olup olmadığı kontrol ediliyor, eğer button basılı değilse rutine atlanıyor... Bu komutla bit komutlarının tamamını öğrenmiş olduk. Bit komutlarının bitişi bu ayki Assembler köşesininde sonu oldu. Önümüzdeki ay yeni bir Seka Assembler köşesiyle beraber olma dileklerimizle. Eğer herhangi bir source'a ihtiyaç duyuyorsanız aşağıdaki adrese disket gönderebilirsiniz. Tabii pul koymayı da ihmal etmemelisiniz. Bu arada sayfamızda gördüğünüz Space Egg demosu Almanya'da cracker'lık faaliyetlerini sürdürmekte olan Panic grubu tarafından yapıldı. Yakında yeni demolar yapacaklarını belirten grup Türkiye'de section açma planları yapıyor. Türkiye'de de şu sıralarda BRONX, ACCURACY ve DOUBLE TROUBLE faaliyetlerini sürdürüyorlar. DOUBLE TROUBLE grubu grafiker ihtiyacı duymaktadır. Eğer iyi bir grafiker olduğunuza inanıyorsanız aşağıdaki adrese çalışmalarınızı bir diskete kopyalayarak gönderin. Disketiniz en yeni demolarla dolu olarak geri dönecektir. BAHADIR AKCAN PK 56 ACIBADEM ISTANBUL
MASTERSEKA Vi.88 by CORSAIR > >MAGAZINE : SOURCES
34 di
—c az)
a > Grafik hafi Temizlen
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 68
Merhabalar. Geçen ay öğrenmeye başladığımız conditional (Codition Code registreinin durumuna göre değişebilen), branch (dallanma) komutlarının bu ayki bölümü karşınızda geçen ay Bcc ve Scc komutu dışındakitüm dallanma komutlarını öğrenmiştik. Bu komutlarında Assembler dilindeki en önemli yeri tuttuğunu söylemiştik. Ayrıca geçen ayki köşemizde çıkan Bcc komutlarının türlerini ve bu tür dallanma komutlarının mantık eşitliklerinin verildiği tabloyuda bu ayki köşemizde bulabileceksiniz. Şimdi komutları açıklamaya devam ediyoruz. Bec KOMUTU : Bcc (Branch According to Condition Code) bu komut Cmp komutuyla oluşturulan bir karşılaştırılma ortamında Condition Code'a göre belirtilen bir yere dallanmayı sağlar. Bütün assembler programlarındaki mantık ortamları bu komut üzerine dayandırılmıştır Bu komutlarda BOOLEAN eşitlikleri denen mantık eşitlikleri üzerine dayanır. Bu eşitlikleri (TABLO 1) de görebilirsiniz.Bcc komutu relative bir komuttur ve -32767 ile -32768 byte ileri yada geri gidebilir. Fakat 4-127 ile -127 byte arasında ki dallarmalarda
Bcc komutu bir word olarak işleme sokulur. Normalde Bcc komutu iki word olduğundan birinci seçeneği kullandığınızda programınızı hızlandırmış olursunuz Örnek: CMP.L d0.d1 ; karşılaştırılma işlemi BEQ LABEL ; dallanma işlemi Bu örnekte d0 ve d1 registerlerinin 32 bitide birbiriyle karşılaştırılır İkinci komut ise, d0 ve d1 registerlerinin eşit olma durumunda LABEL adındaki program labelina dallanmayı gerçekleştirir. Eşit olmama durumunda ise BEQ LABEL komutundan bir sonraki komuta atlanarak program akışı devam ettirilir. Scc KOMUTU Scc (Set According to Condition Code) komutu ise Bcc komutu ile aynı yapıda olup tek farkı, eğer yapılan karşılaştırılma ve Scc komutu ile verilen durum doğru çıkmışsa Scc komutunda bulunan effective adres 1 yapılır. Aksi halde effective adress 0 yapılarak akışa devam edilir. Örnek CMP.L d0,d1 ; karşılaştırılma işlemi SEQ d0 ; Scc komutu Bu örnekte, görüldüğü gibi d0 ve d1 registerleri birbirleriyle karşılaştırılıyor ve eşit olma durumlarında d0 registerinin ilk 1 yapılır eğer d0 ve d1 eşit değilse d0'ın ilk byte'ı 0 yapılarak programa devam edilir. RELATİVE : relative deyimi bir komutun -32768 ile 32767 arasında sınırlı olduğunu daha ileri yada daha geri bir program label'ına ulaşamayacağını belirtmek amacıyla kullanılan bir assembler terimidir. BRA, BSR, Bcc gibi komutlar relativedir. Eğer bir programda belirtilen sınırların dışında bir label'a atlama yapmak istiyorsanız JMP, JSR (Bkz. 40. sayı) gibi komutları kullanmalısınız. Bu komutlar relative değildir. NOT : Bu ve bundan önceki sayıda verilen komutları (TABLO 1) ile birlikte incelerseniz daha kolay anlayabilirsiniz. Şimdide sırada makinemizin tüm hafızasında bulunan bitleri nasıl kontrol edebileceğimizi ve bu işlemlerle ilgili operasyonları öğreneceğiz. Yazı dizimizin bu bölümünde, BCHG, BCLR, BSET ve BTST komutlarını öğreneceğiz. BCHG KOMUTU : BCHG (Test Bit and Change) komutu, verilen effective adresin belirtilen bitini kontrol eder ve eğer kontrol edilen bit 0 çıkarsa, zero flag'a 1 değeri yazılır. Daha sonra belirtilen bit