Bu sayfadaki yazılar
Sayfanın metni
Sayfa 31
DC.L ;(L-Longword) 4 byte uzunluğunda değişkenler. Örnek : Sayac: dc.b 0 ;sayac adında 1 byte uzunluğunda değişken tanımlar. Ad: dc.b — '6âler dergisi'; ad adında 1 byte uzunlukta değişken. Örnekten de anladığınız gibi değişkenin sonuna (:) işareti koymanız gereklidir. Değişken tanımlarını programın en altına yerleştirmeniz assemble işlemini hızlandırır. Ana döngüyü ise programın başına koymaya çalışın. Byte,Word ve Longword ifadeleriyle nız bir değişkeni kullanırken bu ifadeleri de uyumlu yapmaya dikkat edin.
Örnek: Doğru Yanlış Sayaç: dc.b 0 Sayaç: dc.b 0 Move.b #1, Sayaç Move.w #1, sayaç İkinci örnekte sayaç değişkenini byte olarak tanımlayıp word olarak işlem yapmamız hataya yol açar. DİKKAT! Bu hata assemble işlemi sırasında belirtilmez. Gördüğünüz gibi Move komutu Move.b, Move.w, Move.l olarak kullanılabilir. ADD VE SUB KOMUTLARI Add ve Sub komutları özet olarak toplama ve çıkarma işlemleri yapmaya yarar. Bu komutlar da byte, word ve longword olarak kullanılır.
Add.b #1,d0 ; değeri 1 arttırır. Add.b $ff,d0 ; d0'daki değeri $ff adresindeki değer kadar arttırır. Sub.b #i,di değeri 1 azaltır. Sub.b $fe,di ; d1'deki değeri $fe adresindeki
değer kadar azaltır. Bu komutlar tıpkı Move komutuna benziyor,öyle değil mi ? Bu arada şu do, d1 gibi şeylerin ne olduğunu açıklayalım. Seka'da bilgi depolayabileceğiniz 3 yer mevcuttur : 1- Bilgisayarın hafızası 2 - Değişkenler 3 - Registerler Registerler 17 tanedir ve üçe ayrılırlar : 1 - Address registers ( Adres registerleri) 2 - Data registers ( Data registerleri ) 3 - System registerleri Adres registerleri a0, a1, a2, a3, a4, a5, a6, a7'den oluşurlar. A7 registerinin bir başka adı da Stack Pointer (Yığın göstergeci)dir. Bu registeri ileriki bölümlerimizde daha detaylı olarak anlatacağız. JMP komutu: ( Jurmp - atla ) Bu komut BASIC'deki GO TO komutuyla eşdeğerdir.Makine dilinde satır numarası kullanılmadığı için JMP label şeklinde kullanılır. Örnek : imp geridön geridön: rts Program geridön label'ından devam edecektir.
Label tanımlarken tıpkı değişken tanımlarken olduğu gibi iki nokta kullanmanız zorunludur. JSR komutu: (Jump to Sub-Routine - alt rutine atla) JSR komutu BASIC'deki GO SUB komutuyla aynı işi yapar. RTS emrine rastladığında JSR'den bir sonraki komuta geçilerek program sürdürülür. RTS komutu: (Return to Sub-Routine - geri dön) Yukarıda anlatıldığı gibi BASIC'deki RETURN komutuyla aynı işi yapar. Örnek: jsr subi subi: rts CMP komutu: (Compare - karşılaştır) Sık kullanılan komutlardan birisidir. IF-THEN komutunun görevini yapar. Örnek: label: Add.b #1, d0 Cmp.b #20, d0 bne.l label Eğer d0 20 değerini almamışsa Compare biti 1 değerini alır. 20 ise 0 değerini programcıkta d0 registeri bir arttırılır. Compare ile 20 olup olmadığı kontrol edilir. Eğer 20 değilse label'e atlanır. BRANCH KOMUTLARI Branch (dallanma) komutları 16 tanedir. Ancak bunlardan sadece ikisi şimdilik işimize yarayacaktır. BEQ (branch if equal zero - eşitse dallan) BNE (branch if not equal zero - sıfıra eşit değilse dallan) Yukarıdaki örneğimizde 20 kadar artmasını istemiştik. THEN komutunun yerine geçen ve şimdi öğrendiğimiz iki komutla bu işi gerçekleştirebiliriz. arttır: add.b #1, d0 cmp.b #20, d0 bne arttır ; d0 20 değil ise arttır'a git. devam:
arttır: add.b cmp.b #20,dü beg arttırma ; 20 olmuşsa arttırma'ya git jmp arttır arttırma: programın devamı Bu aynı programın iki türlü yazılmış şeklidir. Bunu BASIC olarak yazsaydık : arttır: IF a<20 then goto arttır Şeklinde bir program elde ederdik. Bu sayıda öğrendiğimiz komutları toparlarsak, 1- Seka editör komutları 2 - Move komutu, değişken ve label tanimlama, Add ve Sub komutları, Cmp komutu ve iki
; olmamışsa devam
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 30
14 E 15 F Bu tabloda onlu ve onaltılı sistemler arasındaki farkı görüyorsunuz. Soru : $fc'nin ondalık karşılığı nedir ? $ işareti sizi şaşırtmasın. Bu bir sayının hex sistemde olduğunu gösterir. Mesela 17 ile $17 arasında büyük bir fark vardır. HEX SİSTEMDE SAYI HESAPLAMA Hex sistem göründüğü kadar zor değildir. Prensipleri de decimal sistemle aynıdır. 999 sayısını okumak için yüzler basamağındaki 9 ' u 100 ile,onlar basamağındaki 9'u 10 ile ve diğerini de 1 ile çarpıp toplarız. 9*100 4 9*10 4 9 — 999 Şimdi aynı olayı hex sistemde yapacağız. Onaltılı sistemde ise sayılar 10'ar 10'ar değil, 16'şar olarak büyür. 1716 #c*1 - ?f 15 ve c 12 olduğuna göre : 15*16 4 12 — 252, $fc sayısının decimal halidir. Örnek 2 : $ilcz? Bu kez işimiz daha zor.Hex sistemde yüzler basamağı 256 ile çarpılır. f*256 4 f*16 4 © — 3840 4 240 4 12 — 4092'dir. Bu tip örneklere çalışarak zamanla alışkanlık kazanacaksınız. 68000 KOMUTLARI 68000 dilindeki önemli komutları bu bölümde güre- | ceğiz. İ MOVE : En önemli asşembler komutu budur.Bir ad- | rese ya da değişkene değer yüklemek İçin kullanı- | lır. Örnek : | Move #1, sayaç Sayaç değişkenine 1 değerini yükler. Move #$ff, sayaç Değişkene FF değerini verir. | Move sayac2 Sayaç 1 değişkenindeki değeri Sayaç 2'ye koyar. Peki # işareti ne anlama geliyor ? # işareti önüne geçtiği sayının verilen adrese ya da değişkene yükleneceğini belirtir. Bu işareti koymazsanız o adresteki sayıyı bir adrese ya da değişkene yüklersiniz. Örnek
Move #i,di ;d1'e 1 değerini verir. Move #$fc,d2 ; d2'ye $fc'i koyar. Move $fc,di ; $fe adresindeki değeri d1'e yükler.
Arada büyük fark var,öyle değil mi ? İlk programlarınızda bu hatayı bol bol yapacaksınız. (ve bol bol | crash edeceksiniz) Move komutundan sonra ikinci önemli komutumuz DC'dir. DC ( Define Constant - Sabit Tanımla ! değişken tanımlamakta kullanılan birinci yoldur. İkincisini ileriki sayılarımızda göreceksiniz.
- DC İle 3 tipte değişken tanımlayabilirsiniz :
DC.B byte anlamına gelir. 1 byte uzunluğunda değişken tanımlamak için kullanılır. DC.W (W - Word) 2 byte uzunluğunda değişkenler.