Amiga Dünyası sayı 27, sayfa 38

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 38

move.l — #$1234,d0 tst.l dO bne NEgual Tts NEgual: d0 rts

leştirir. Aşağıdaki örnekte register'ı kontrol edilir ve bu register'ın içeriği pozitif bir sayıysa register içeriği silinir. Negatif olduğu durumlarda da içerik aynen kalır.

move.l — #50,d0 tst.l dO bpl Pos Pos: cir.l dO Tts

12. BMI komutu da BPL gibi çalışmaktadır. Aralarındaki tek fark, BMI'nin negatif değerlerde dallanma gerçekleştirmesidir. Aşağıdaki örnekte d0'ın içeriği negatif olduğu zaman NEG label'ına dallanılır ve burada da d0'ın içeriği silinir.

8. BEQ komutu son karşılaştırma işleminin sonucunun belirtilen değere eşit olduğunda istediğimiz label'a dallanmamızı sağlar. Aşağıdaki örnekte d0'a #$1234 değeri yazıldıktan sonra, bu register'ın içeriği #$1234 değeri ile karşılaştırıldığından sonuç eşittir çıkacaktır ve programa EQUAL rutininden devam edilecektir. Burada da d0 register'ı -1'e ulaşana kadar bilgisayarımızın Power Led'ini kapatıp açıyoruz. DBF komutu her seferinde d0'ın içeriğini otomatik olarak 1 azaltmakta ve -1'e varıldığında da döngüden çıkmayı sağlamakta. Eğer d0'ı kendisinden farklı bir değer ile karşılaştırırsak, programın NEQUAL satırına gitmemiz ve d0'ın içeriğini silmemiz sağlanacaktır.

move.l — #$1234,d0 cmp.l #$1234,d0 bne NEgual beg Egual Egual: behg #1,$bfe001 dbf d0,Egual

TİS NEQUAL: dü Tts E 9. BVC komutu Overflow flag'i (V-flag) 0 ise belirtilen label'a dallanmamızı sağlar. Bildiğiniz gibi Overflow flag'i taşma olup olmadığını haber verir. Bu durumda BVC yardımıyla taşma olmadığında dallanma gerçekleştirebilirsiniz. Aşağıdaki örnekte ilk önce d0'a -43 yazılmakta, ardından da bu değere 40 eklenmektedir. Taşma olabilmesi için değere en az 43 eklenmesi gerektiğinden Overflow flag'imiz sönük kalacaktır ve program da NOPE label'ından devam edecektir. Burada da d0 register'ımızı temizliyoruz. Taşma olsaydı Power Led'inin konumu değişecekti.

move.l — #-43,d0 add.l #40,d0 bvc Nope behg #1,bfe001 Tİs Nope: d0 Tits

10. BVS ise bir önceki komut olan BVC'nin tersi işlem yaparak Overflow flag'inin yanık olduğu durumlarda dallanma gerçekleştirecektir. Deminki örneği biraz değiştirmemiz sayesinde aşağıdaki örneği elde ettik. Burada d0'ın içeriği olan -43'e 100 değerini ekleyerek taşma flag'imizin yanmasını sağladım. BVS komutu ile de taşma flag'i 1 olduğunda (ki 1), YEPP label'ına dallanma gerçekleşmekte. YEPP label'ında da d0 register'ının içeriğini silmekteyiz. Taşma olmasaydı programın işlemesi BCHG komutundan devam edecekti ve Power Led'imizin konumu değişecekti.

move.l — #-43,d0 add.l #100,d0 bvs Yepp behg — #1,bfe00l Yepp: cir.l d0

11. BPL komutu, TST ile beraber kullanıldığında register içeriğinin pozitif bir değer olup olmamasını kontrol ederek pozitif olduğu durumlarda bizim istediğimiz bir label'a dallanma gerçek-

move.l — #-76,d0 tst.l d0 bmi Neg Tts Neg: cirl d0

13. BGE komutu, karşılaştırma sonucu hangisinin diğerinden büyük ya da eşit olduğunu öğrenmemizi sağlar. Aşağıdaki örnekte d0 ve d1 register'larının içerikleri karşılaştırılıyor. d1'in içeriği d0'ın içeriğinden (-100) daha büyük olduğuna göre şartımız gerçekleşmekte ve programa VAGIN label'ından devam edilmekte. Burada da iki register'ın içerikleri değiştirilerek programdan çıkılmakta.

move.l — #100,d0 move.l — cmp.l bge Vagin Tts Vagin: exg dO,d1 Tts

14. BLT komutu CMP işleminden sonra destination register'ı içeriğinin source register'ı içeriğinden daha küçük olduğu durumlarda dallanmamızı sağlamakta. BLT komutu BGE'nin tamamlayıcı komutudur. Aşağıdaki örnekte d1'in içeriği d0'dan küçük olduğundan, programa VAGIN label'ından devam edilir. Burada her iki register içeriği de silinecektir.

move.l — #512,d0 move.l — — d0,di bit Vagin Tts Vagin: d0 cir.l di

rts 15. BGT yardımıyla CMP komutundaki 2. register içeriğinin 1. register içeriğinden büyük olup olmadığı kontrol edilebilir ve sadece büyük olduğu durumlarda belirtilen label'a dallanma gerçekleştirilir. BGE komutu için vermiş olduğum örnek, aynen bu komut ile de kullanılabilir. Sadece 4. satırı değiştirmeniz yeterlidir. iü

16. BLE komutu da BGT'nin tamamlayıcısıdır ve örnek olarak da BLT komutu için vermiş olduğum örneği kullanabilirsiniz. DBzz komutları, Bzz komutlarının tam tersi işlemi yaparlar; belirtilen şart gerçekleşmişse programa kalınan yerden devam ederler. Şartın gerçekleşmediği her durumda da verilen label'a dallanmanız sağlanır. Szz komutları, Bzz ve DBzz'den farklı olarak dallanma yaratmazlar. Sadece şart gerçekleşmişse belirtilen register ya da adres içeriğini -1 yaparlar. Diğer durumlarda belirtilen register ya da adres içeriği 0 olacaktır. Artık komutlarla ilgili tüm sorularınızı cevapladım. Umarım bu kısa komut listesi işinize yarar. Artık bu seferlik de hoşçakalın demekten başka şey kalmıyor geriye. Bir dahaki ay artık Gelişmiş Assembler köşesine biraz ağırlık vermek istiyorum. Şimdiden ağzınızı sulandırayım; gelecek ayki yazımda ufak bir intro rutini vermeyi planlıyorum. Biraz değişiklik herkesin hakkı. Haydi hoşçakalın ...

Klavyeyle gezinmek için ← ve → tuşları.