Bu sayfadaki yazılar
Sayfanın metni
Sayfa 25
birimleriyle bir ilgisi yoktur. Sadece komut görüldüğü her zaman aynı label'a atlar. JMP komutu : Bu komut (JUMP) kelimesinin kısaltılmışıolup, BRA komutuyla aynı işi yapar. Fakat BRA komutu relative JMP komutu relative() değildir. BSR komutu : BSR (Branch to SubRoutine) komutuda relative bir dallanma komutudur. Fakat BRA komutundan farklı olarak, atlanılan program parçasının herhangi bir yerindeyken RTS komutu verilerek BSR LABEL komutundan sonraki komuta geri dönülerek akış devam ettirilir. JSR komutu : JSR (Jump to SubRoutine) komutu da BSR komutuyla aynı görevi görür, fakat JSR komutu relative değildir ve bu komutla hafızanın istediğimiz bölümüne (8 megabyte'la sınırlı) atlayıp RTS komutuyla geri dönebiliriz. RTR komutu : RTR (ReTurn and Restore CCR) bu komutta RTS'nin yaptığı işin aynısını görerek, akışı
atlanılan yere geri döndürür. Fakat bu komutun farkı geri atlanırken, stack 'deki değerlerin CCR registerine kopyalanmasını sağlamaktır. Böylece bu sayıda, dallanma komutlarını öğrenmiş olduk. Unutmayın, iyi bir Assembler programcısı olmanın yolu bu komutlardan geçer. Bir dahaki sayıya kadar herkese iyi kafa yemeler. Bu arada ASSEMBLER sorunlarınız için şu adrese bi mektup çakabilirsiniz. BURAK ÖZIŞIK MAŞUKLAR YOKUŞU 2/2 BEŞİKTAŞ/IST
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 24
Herkese selam, geçen iki ayda köşemizi kaplayan Masterseka 1.70'in açıklaması sonunda bitti. Sonunda Assembler komutlarının açıklamasına devam edebileceğiz. Nerde kalmıştık... Şu anda elimde iki ay öncesinin dergisi var içinden Seka Assembler köşesini aramaktayım. Ohhh! sonunda buldum. Matematiksel komutları bitirmiştik. Değer karşılaştırma komutlarından da TST komutunu görmüştük. Bu ayki konumuz CMP komutu. CMP komutu SEKA Assembler'da tüm değer karşılaştırma işlemlerini, karşılaştırmaların sonuçlarında ne yapılacağını, programın hangi label'ına atlayacağımızı, kısaca computer'leri computer yapan 'computer mantığını' öğreneceğiz. CMP komutu, iki eleman kullanan basit bir komuttur. Yaptığı iş; birinci elemanı, ikinci elemandan çıkartarak, sonuca göre bir mantık düzenlemektir. Komuta basit bir örnek verirsek; (Parça 1) adlı program parçası, birinci değeri, ikinci değerden çıkartır ve eğer bu iki değer eşitse, çıkarmanın sonucu 0 olur, eğer 68000 böyle bir durumla karşılaşırsa ZERO FLAG adındaki CCR bitini 1 yapar, BEQ komutu ise ZERO FLAG'i kontrol eder ve burada 1 değerini bulursa programı LABEL label'ına atlatır. Bu programdaki ilk komut olan CMP komutu karşılaştırmanın yapıldığı satırdır. Karşılaşma yapıldığı zaman 68000, kendi üstündeki bir pin'deki bitlerden bazılarını karşılaştırmanın sonucuna göre set eder, örneğin karşılaştırmada ikinci eleman birinci elemandan küçükse, Status / Condition code registerindeki birinci bit olan OVERFLOW biti 1 yapılacaktır. İkinci satırdaki BEQ komutu (Branch on Equality) ise mantık komutunu oluşturur. 68000 bu komutu gördüğü zaman, Özel register'daki equality bitini kontrol edecek, bu bit 1 ise LABEL label'ına dallanmayı gerçekleştirecektir. Bcc komutlarında da kullanılan Condition Code kısaltmalarını (TABLO 1) de bulabilirsiniz... CMP ve Bcc komutları kullanılarak her türlü program yapılabilir, döngüler yaratılabilir. Eğer AMIGA bilgisayarının mantık komutlarının kullanımını iyi bir biçimde öğrenebilirseniz, en zor programcılık problemlerini çözebilir, yirmi satırda yapılabilecek bir işi, değişik teknikler kullanarak on satıra, hatta ve hatta beş satıra bile sığdırabilirsiniz, bu sayede programlarınız hızlanacak, ve siz de iyi bir makine dili programcısı olma yolunda ilerlemeye devam edeceksiniz. Tablo 1'de gördüğümüz V,C,Z,N harfleri tahmin ettiğiniz gibi, bilgisayarımızın mantık birimini oluşturan Condition Code register'inin ilgili bitlerini temsil ederler. Equation ya da Türkçe adıyla eşitliklerin, yani mantıksal eşitliklerin nasıl ele alındığına göz atalım; Bunun için BLE (Branch if Less than or Equal) LABEL komutunun denklemi olan Z + N*V + N*V eşitliğini inceleyelim. Bu komut verildiği zaman 68000, CCR (Condition Code Register)'den eşitliğe ait bitlerin değerlerini okuyarak eşitlikte yerlerine koyar, eğer sonuç 1 yani true yani doğru ise BLE LABEL komutu amacına ulaşmış program LABEL label'ına atlatılmıştır. Eğer sonuç 0 yani false yani yanlış ise program, BLE komutundan bir sonraki komuta atlayarak, akış devam ettirilir. Bu gibi hesaplamalar, diğer Bcc komutlarında da geçerlidir. DBcc KOMUTU: (Test, Decrement and Branch) komutu, Bcc komutuyla aynı yapıda olup, Condition Code mantık ve kontrol işlemleriyle çalışır ve döngü yaratmak için kullanılır. Sayıları kendi Test edebildiği için yardımcı komut olarak CMP komutunu kullanmaya gerek yoktur. Eğer döngüye DBcc komutuyla girilirse, DBcc komutunda verilen döngü sayısı, döngü rutininin çalışma sayısına eşittir. Eğer döngüye en başından yani rutinden girilirse, rutinin dönme sayısı eşittir DBcc'de verilen sayı artı bir'dir. Bu komutla ilgili örnekleri (TABLO 2)'de bulabilirsiniz. DİĞER DALLANMA KOMUTLARI: BRA komutu: BRA (BRanch Always) komutu programın, komut görüldüğü anda belirtilen Label'a atlaması sağlanır. Bu komutun mantık birimleriyle bir ilgisi yoktur. Sadece komut görüldüğü her zaman aynı label'a atlar. JMP komutu: Bu komut (JUMP) kelimesinin kısaltılmışı olup, BRA komutuyla aynı işi yapar. Fakat BRA komutu relative JMP komutu relative değildir. BSR komutu: BSR (Branch to SubRoutine) komutu da relative bir dallanma komutudur. Fakat BRA komutundan farklı olarak, atlanılan program parçasının herhangi bir yerindeyken RTS komutu verilerek BSR LABEL komutundan sonraki komuta geri dönülerek akış devam ettirilir. JSR komutu: JSR (Jump to SubRoutine) komutu da BSR komutuyla aynı görevi görür, fakat JSR komutu relative değildir ve bu komutla hafızanın istediğimiz bölümüne (8 megabyte'la sınırlı) atlayıp RTS komutuyla geri dönebiliriz. RTR komutu: RTR (ReTurn and Restore CCR) bu komutta RTS'nin yaptığı işin aynısını görerek, akışı atlanılan yere geri döndürür. Fakat bu komutun farkı geri atlanırken, stack'deki değerlerin CCR register'ine kopyalanmasını sağlamaktır. Böylece bu sayıda, dallanma komutlarını öğrenmiş olduk. Unutmayın, iyi bir Assembler programcısı olmanın yolu bu komutlardan geçer. Bir dahaki sayıya kadar herkese iyi kafa yemeler. Bu arada ASSEMBLER sorunlarınız için şu adrese bi mektup çakabilirsiniz. BURAK ÖZIŞIK MAŞUKLAR YOKUŞU 2/2 BEŞİKTAŞ/İST