Bu sayfadaki yazılar
Sayfanın metni
Sayfa 18
komutları mevcut. Buradaki tanımlamalar listemiz içerisinde bulunmayan _printf ve .begin rutinlerinin programımızın içerisine ekleneceğini belirtiyor. Bu ekleme olayı link sırasında gerçekleşiyor. Buradan da anlaşılacağı gibi program aslında ilk olarak .begin alt rutinine ve daha sonra _main rutinine sıçrıyor. '.begin' rutinini inceleyerek neler yaptığını görebilirsiniz. Rutinlerin assembler listesini Aztec disketlerinde bulabilirsiniz.
Şimdi yukarıdaki 'public' deyiminden yararlanarak bir assembler alt rutine daha göz atalım;
/* Aztec-C Assembler */ /* alt rutinlerinin */ /* kullanimi; */ /* Örnek 3. */
main()
{ printf("Sol tuşa basiniz!..\n"); while(!mouse()); printf("\n");
}
#asm
public _mouse _mouse:
clr.l d0 btst #6,$bfe001 bne.s lm add.I #l,d0 lm: rts
#endasm
artık burada rutin tanımlamamızı direkt olarak assembler listesi içerisinden yapıyoruz, 'public' komutunu kullanmadığımız takdirde C listesi içerisinden mouse() rutinini çağıramayız. Sonuç olarak 'public' assembler komutu, yanında verilen ismin diğer programlar tarafından bir rutin olarak tanımlanmasında kullanılıyor.
Assembler listeleri aynı zamanda C'de kullanılan değişkenleri de tanıyabiliyor ve ulaşabiliyor. Bunu bir örnekle inceleyelim;
/* Aztec-C Assembler */ /* altTutinlerinin */ /* kullanimi; */ /* Örnek 4. */
long a;
main()
{ move(); printf("a=%d\n",a);
)
#asm
public _move _move:
move.l #10,_a rts
#endasm
'a' değişkenini global olarak tanımlıyoruz. Bu sayede kendi hazırladığımız '_move' assembler rutini, değişkeni tanıyabiliyor. Burada '_a'ya 10 değerini verdiğimizde, C'den de bu değeri okumamız mümkün. Bu yöntemle ortak olarak assembler ve C dilleri arasında değişken kullanmak mümkün olabiliyor. Programımızın assembler listesini incelediğimizde '_a' değişkeni için 4 byte'lık bir yer ayrıldığını görebiliyoruz. Listemizi bir inceleyelim;
;:ts=8 ;/* Aztec-C Assembler */ ;/* alt rutinlerinin */ ;/* kullanimi; */ ;/*Omek4. */
;int a;
global _a,4
;main() ;{
public _main _main:
link a5,#.2 movem.l .3,-(sp) ;move();
jsr _move ;printf("a=%d\n",a);
move.l _a,-(sp) pea .1+0 jsr _printf
add.w #8,sp ;} .4
movem.l (sp)+,.3 unlk a5 rts .2 equ 0 •3 reg .1
dc.b97,61,37,100,10,0 ds 0
;#asm
public _move _move:
move.l #10,_a rts
public _printf public _move public .begin dseg end
'global' assembler komutu ile '_a' değişkeni için 4 byte'lık yer ayrılıyor. Bu satırın başında dikkat ettiyseniz '; int a;' mevcut. Hatırlarsanız 'int' tipindeki bir değişken normalde 2 byte'lık yer harcaması gerekirken, burada 4 byte'lık yer ayrılmış. Bunun sebebi compile ederken;
CC +L -t prog.c içerisinde +L opsiyonunu kullanmamız. Bu sayede bütün 'int' tipindeki değişkenler 'long' tipine çevriliyor ve 4 byte'lık yer harcıyor. Programı bir de;
CC -t prog.c
olarak compile edin. Bu durumda '_a' değişkeni için 2 byte'lık yer harcandığını görebilirsiniz. Fakat bu durumda programın çalışması tehlikeye biniyor. Çünkü hazırlanan assembler alt rutinler genellikle parametrelerini 'long' türünde istediğinden, bu şekilde değişkenleri yollamak daha sağlıklı.
Bu ayki programlarımız da bu kadar. Bu yazımızda, Amiga C içerisinde assembler rutinlerini kullanmayı öğrendik. Assembler rutinleri yazarken çok dikkatli olun. Bildiğiniz gibi assembler hata affetmez. Gelecek ay yeni örnek programlarla buluşmak üzere hepinize iyi günler...
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 19
Merhabalar. Bu ay süren Pascal'a giriş kursumuz sonuçlandı. Artık Amiga'da Pascal programı yazabilecek hale geldik. Ne var ki, kendimizi sistemin pencerelerine, handler'larına ve library'lere adamadan önce programların yazabileceğimiz ana programı tanıtmak istiyorum.
Amiga'da Pascal son derece yeni ortaya çıktı. Profesyonel bir kullanım sağlayan benim bildiğim iki adet Pascal paketi var. Bunlardan biri bugün tanıtacağımız Kick Pascal. Bir diğeri ise Hi-soft Basic'ten ve Devpac Assembler'den tanıdığımız Hisoft'un çıkardığı Hi-speed Pascal. Ne var ki, bu ikinci paketin Türkiye'de tam bir versiyonuna rastlayamadım. Şu günlerde Kick Pascal'in 2.1 versiyonu da piyasaya çıktı. Pascal, Avrupa'da oldukça beğenilen bir dil olduğundan sürekli gelişme gösteriyor. İşte Kick Pascal 2.0...
Kick Pascal 2.0 (KP) iki diskette bulunuyor. İlk diskette programın kendisi, Preferences programı, Include dosyaları ve Unit'ler bulunuyor. İkinci disket ise örnek programlara, demolara ve bazı source'lara ayrılmış. İşin güzeli bir tek disket ile bu programı kullanabilecek olmanız. KP 512 Kbyte'lık makinalarda bile kullanılabiliyor. Ne var ki, sahip olduğunuz ek donanım arttıkça performansı artıyor.
Diyelim çalışma ortamınızı hazırladınız (Bu ortamın nasıl hazırlanacağını yazımız boyunca göreceksiniz.), ilk olarak çalışma parametrelerini ayarlamak için PascalPrefs programını kullanmanız gerekecek. KP, bir Alman şirketi tarafından hazırlandığı için maalesef bu program Almanca.
ilk olarak, yapılacak olan ayarlamaların saklanacağı dosya isminin girilmesi istenir. Şayet belirtilen isimde bir dosya yoksa, program bu isimde bir program yaratacaktır. S:Pascal.config dosyası, çoğu amaçlar için uygun olacaktır. OK tuşunu klikledim. Bu ekran Preferences programının ana menüsünü oluşturuyor, en tepede dosyanın adı duruyor. Onun altındaki ilk iki tuştan Laden ile, belirtilen dosyadaki parametreler yüklenir, Abspeichern ile de parametreler kaydedilir. Bunun altındaki tuş ise Editor Tasten Belegen, birçok preferences programında aradığımız son derece güzel bir özellik. Burada Editörde kullanılan kontrol tuşlarını belirleyebiliyorsunuz. Bunun ne önemi var diyebilirsiniz. Ancak, bu sayede alışmış olduğunuz bir editörün tuşlarını bu programa geçirebilirsiniz.
Bu ekranın üst tarafını, editörde tanımlanmış olan komutlar dolduruyor. Alt sol tarafında ise siyah ile kontrol karakterleri, beyaz ile de bu tuşla kullanılabilecek olan editör komutları yer alıyor. Ok tuşları ile, tüm komutları görebilir; T ile yeni bir satır ekleyebilir; Del ile de bir satırı silebilirsiniz. Sol sütuna istediğiniz kontrol tuşlarını yazabilir veya sağ sütunda bu kontrol karakteri ile kontrol edilecek fonksiyonu, yukarıda bulunanlardan seçerek yazabilirsiniz. Kontrol karakteri olarak ^ işareti, Ctrl tuşunu simgelemekte (^D, Ctrl-D anlamına geliyor). Bu bölüm son derece yararlı, ancak burası ile ayarlama yapmadan iyice düşünmeniz gerekiyor. Yaptığınızı beğenmediyseniz, sol alt tarafta Rücksetzen ile değişiklikleri iptal edebilir ve Fertig ile de geri dönebilirsiniz.
Üstten dördüncü seçenekte ise, dosya yüklemek için kullanılan Requester'la ilgili parametreler giriliyor. Eğer elinizdeki versiyon 2.03'ten sonraki bir versiyon ise, burada büyük bir ARP-Filerequester seçeneği olacaktır. Eğer bu seçenek varsa, mutlaka değerlendirin. Zira KP'ın en kötü yanlarından biri, daha önceden kullandığı son derece yavaş ve sinir bozucu olan Filerequester'i idi. 2.03 versiyondan sonra, ARP requester'ını kullanabilme seçeneği eklenmiş. Bunun için LIBS: directory'sinde ARP.library'sinin olması
E Kağan Gürkaynak şart. Bu ekranda, kalan diğer tuşlar ile orjinal requester'a çıkacak olan düğmeler tanımlanıyor, umarım buna gerek kalmaz...
Gelelim Default Werte Definieren seçeneğine. Burası oldukça önemli. Yukarıda, ilk olarak programın çalışması için ayıracağı hafıza yer alıyor. Bu değeri büyük programlar için arttırmanız gerekebilir. Zira program ilk çalıştığında size yine de ne kadar hafıza ayırmak istediğinizi soracaktır, ama özel bir istek belirtmediğiniz takdirde, burada belirlenen değer kabul edilecektir.
Bundan sonra bir dizi parametrenin ilk değerinin ne olacağını belirlemeniz ve bu parametrelerin hepsini program çalışırken değiştirmek mümkün. Parameter seçeneği, programın parametre kabul edip etmeyeceğini belirler. Linker tolerant ile Pascal düzenine uygun olarak küçük, büyük harf ayrımı yapılmaz. Bu seçenek kaldırılırsa, C linker'larına uyumlu olunacaktır. Bilindiği üzere Pascal'da komut sonları ";" ile bitmelidir. Başka dillerden Pascal'a geçenler, bunu çok sık unuturlar. Semikola ergaenzen seçeneği ile KP, eksik ";"ları tamamlamaya çalışacaktır (%99 başarılı oluyor). Auto-save seçeneği ile, program çalıştırılmadan save edilecektir. Backup-datei seçeneği ile de, aynı isimli dosyanın üzerine kayıt yapılınca eskisinin ismi değiştirilerek saklanacaktır. Sağ sütunda ise Derleyici parametreleri var. Subrange testen, programda kullanılan değişkenler arasında geçiş olup olamayacağını kontrol eder, Indexbereich ile de dizilerde verilen indekslerin maksimum değeri aşması kontrol edilir. Unterbrechen çok önemli bir seçenek. Bu seçenek açıksa, programınızı çalışırken F10 veya Ctrl-C ile durdurmanız olası. Program geliştirirken bu seçeneği seçmeniz son derece önemli, zira yapacağınız bir kısır döngüden kurtulma olanağınız kalmayacaktır. Stack grösse testen seçeneği ile.
programın Stack hafızayı tüketip tüketmediği incelenir. KP ortamında program çalıştırırken bu seçenek gereksiz kaçabilir, zira çalışan program KP'nin kullandığı hafızayı Stack olarak kullanacaktır. Ancak bağımsız çalışırken, program sistem tarafından kendisine ayrılmış olan Stack miktarını kullanmak zorundadır. Arithmetic Overflow seçeneği ile Overflow adı verilen matematik işlemlerinde değişken sınırı dışına çıkmaktan oluşan hatalar yakalanacaktır. Sağ sütundaki tüm bu parametreler seçildikleri takdirde, programın çalışma hızını belirli bir oranda düşürürler.