Amiga Dünyası sayı 2, sayfa 25

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 25

DERLEYİCİLER

Örneğimizi MOVE.L # S102004F0, S50000 olarak değiştirdiğimizde ise, adresleme şöyle olur: $10 sayısı $50000'e, $20 sayısı $50001 'e $04 sayısı $50002 ve $F0 ise $50003'e gider. Böylece 32 bit uzunluğundaki veriyi (1 LONGWORD = BYTE = 32 BİT) tek defada bir hafıza adresine göndermiş oluruz. Görüldüğu gibi AMIGA Makina Dilinde milyarlar ile ifade edilen sayıları depolamak veya başka bir yere göndermek son derece kolay.

Makina dili programımızda kullanmadığımız, fakat daha sonra kullanacağımız bir sayıyı MOVE komutu ile hafızada kendimiz için müsait gördüğümüz herhangi bir hafıza bölgesine saklayabiliriz. Yukarıda son kullandığımız örnekte olduğu gibi. Tabii bu komutun icrasından sonra, dört byte'dan oluşan veri S50000,den $50003'e kadar olan bölgede kendi halinde durur ve bilgisayar için hiçbir anlam ifade etmez. Ta ki biz onu oradan alıp yeniden kullanıncaya kadar.

MOVE komutu ile bir hafıza adresindeki sayıyı, başka bir hafıza bölgesine göndermek için komutun parametreleri şöyle olması gerekir: (MOVE.L $50000, S60000). Burada bilgisayara $50000'deki dört byte'ı alıp, $60000'den itibaren dört byte'a kopyala komutunu veriyoruz. Aynı şekilde LONGWORD olarak kullandığımız bu modu BYTE veya WORD I olarak da tek veya çift byte içinde uygulayabiliriz. Mod BYTE olduğu zaman (MOVE.B $50000, $60000)'de sadece S50000'deki sayıyı al ve $60000'e yerleştir demek oluyor. WORD'da ise $50000 ve $50001 'deki iki sayıyı al ve $60000 ve S60001'e yerleştir.

MOVE komutu hafıza adresindeki sayıyı bir data veya adres registerine göndermek için de kullanabiliriz. Örneğin; MOVE.B $5000, DO komutu ile, $50000'- deki bir byte'ı DO data registerine atamış oluruz. MOVE.B $50000, AO ile $50000'- deki bir byte'ı bu sefer bir adres registerine göndermiş oluruz. Aynı şekilde D0'den D7'ye kadar olan bütün data registerlerini ve A0'dan A6'ya kadar olan bütün adres registerlerini MOVE komutu ile kullanabiliriz.

MOVE komutunun bir başka kullanım modu ise, bir sayıyı bir adres veya data registerine göndermektir. MOVE.L

# $070000, D0 ile $070000 sayısını D0 data registerine ve MOVE.L # $070000, A0 ile aynı sayıyı A0 adres registerine göndeririz.

Programımız içinde belli bir döngüde veya bir rutinde çok kullanılan bir adresi, adres registeri üzerinden kullanmak hız ve anlaşırlık bakımından çok büyük kolaylıklar sağlayacaktır. Şimdi bunu ayrıntılı bir örnek ile daha iyi açıklayalım.

050000 : 207C 0007 0000 : MOVE.L# $0000,A0 050006 :203C 0000 0032 : MOVE.L# $32,D0 05000C : 2080 : MOVE.L D0, (A0) 05000E : 2210 : MOVE.L (A0),D1 050010 : 23C1 0006 0000 : MOVE.L Dİ ,$60000

işte bu beş satırlık makina dili programında hemen hemen bütün MOVE parametrelerini kullandık.

Birinci satırdaki komutta $70000 sayısını A0 adres registerine atadık.

İkinci komutta $32 sayısını D0 data registerine atadık.

Üçüncü komutta ise D0'daki sayıyı (kullanıma dikkat) A0 adres registerinin gösterdiği hafıza adresine gönderdik ($70000). Burada parantez içindeki adres registeri, sayının gidecek olan hafıza bölgesini temsil ediyor. Daha açıklayıcı olarak özetlersek: adres registerlerini kullanırken parantez içinde yazarsak, işlem adres registerinde bulunan adres rakamı ifadesine değil, adres registerinde bulunan adresin gösterdiği hafıza adresine yapılır.

Dördüncü komut da bu sefer AO'm ($70000) gösterdiği hafıza adresindeki sayıyı D1'e atıyoruz. Nihayet beşinci komutta ise Dl'deki sayıyı $60000'e gönderiyoruz.

Komutların başlarındaki sayıların ilk kolonda bulunanları bu beş satırlık makina dili programın yerleştiği hafıza adreslerini, ikinci kolondaki sayılar ise aynı kolondaki makina dili komutunun sayı olarak karşılığı ve ondan sonra gelen kolonlardaki sayılar ise aynı komutların parametrelerinin datalarını içeriyor.

Görüldüğü gibi sayıları ve adresleri,

MOVE komutundan kullanırken adres ve data registerlerinden kullanmak çok daha az yer kaplıyor (3. ve 4. satırdaki gibi). Tabii bir o kadar da program hızlanmış oluyor.

Move komutunun yukarıdaki kullanımlarından başka birkaç kullanım modu daha var. Bunları da sırası geldikçe bol bol örneklerle açıklayacağız. Başlangıç olarak bunları bilmeniz yeterli.

Bu arada bundan sonra vereceğimiz örnekleri Amiga'da hızı ve kolaylığı bakımından iki monitör ve Assembler derleyicisinde uygulayacağız.

1. C-MONITOR : Amiga'nın ilk monitör programlarından biridir ve CLI üzerinden çalıştığı için kullanımı son derece rahattır. Basit tek harfli komutlar yardımı ile AMIGA'nm hafıza adreslerine ve sistem rutinlerine en süratli şekilde ulaşıp, istediğimiz makina dili programını rahatlıkla kurcalayabiliriz (DE-BUG).

2. SEKA ASSEMBLER : Amiga'da Assembler program yazımı için yine en uygun ve hızlı program olarak Seka Assembler gösterilmektedir. Özellikle yeni başlayanlar için kullanımı çok rahat olan bu derleyiciyi, verdiğimiz bütün örnekleri girip, ardından sonucunu görmek için kullanacağız.

Şimdi yazımızın bundan sonraki kısmına, bu iki program ile beraber devam etmemiz gerekeceğinden en kısa zamanda eşten dosttan bunları edinmeye bakın.

Gelecek sayıda görüşmek üzere, başarılar.

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