13.01.2015 Views

Amiga Dunyasi - Sayi 26 (Temmuz 1992).pdf - Retro Dergi

Amiga Dunyasi - Sayi 26 (Temmuz 1992).pdf - Retro Dergi

Amiga Dunyasi - Sayi 26 (Temmuz 1992).pdf - Retro Dergi

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

DERLEYİCİLER<br />

}<br />

Mouse()<br />

I<br />

#asm<br />

clr.l d0 ; d0 register'ını sıfırla<br />

btst #6,$bfe001 ;<br />

bne.s İm ; sol tuşu kontrol et<br />

İm:<br />

#endasm<br />

}<br />

add.l #l,d0<br />

; basılı ise d0=1 yapıp çık<br />

Bu örnekte, bir assembler altrutinden parametre alarak geri<br />

dönmeyi öğreniyoruz. mouse() rutini ile sol mouse'u kontrol ediyoruz.<br />

Eğer tuşa basılmış ise rutin ' 1' değeri ile, basılmamışsa<br />

'0' değeri ile geri dönüyor. Bu iş için assembler rutinden çıkmadan<br />

önce d0 register'mın değerini değiştirmemiz yeterli oluyor.<br />

Bu sistem bütün <strong>Amiga</strong> programlarında kullanılır. Şimdi programımızın<br />

assembler listesine bir göz atalım. Bunu yapmak için<br />

programı compile ederken;<br />

CC +L -t prog.c<br />

olarak parametreleri verin. Buradaki '-t' parametresi prog.asm<br />

isimli bir assembler listesinin ortaya çıkmasına neden olacaktır.<br />

Bu assembler listesini incelediğimizde, programın assembler diline<br />

çevrilirken hangi kademelerden geçtiğini görebiliriz. Şimdi isterseniz<br />

bu listeye bir göz atalım;<br />

;:ts=8<br />

;/* Aztec-C Assembler */<br />

;/* alt rutinlerinin */<br />

;/* kullanimi; */<br />

;/* Örnek 2. */<br />

;main()<br />

;{<br />

public_main<br />

_main:<br />

linka5,#.2<br />

• movem.l .3,-(sp)<br />

;int m;<br />

;<br />

;while(l){<br />

.4<br />

; m=mouse();<br />

jsr _mouse<br />

move.l d0,-4(a5)<br />

printf("left mouse=%a>n",m);<br />

move.l-4(a5),-(sp)<br />

pea .1+0<br />

jsr _printf<br />

add.w#8,sp<br />

;}<br />

bra .4<br />

.5<br />

;}<br />

.6<br />

movem.l (sp)+,.3<br />

unlk a5<br />

rts<br />

.2 equ -4<br />

.3 reg<br />

.1<br />

dc.b 108,101,102,116,32,109,111,117,115,101,61,37,100,10,0<br />

ds 0<br />

;<br />

;mouse()<br />

;{<br />

public_mouse<br />

_mouse:<br />

link a5,#.8<br />

movem.l .9,-(sp)<br />

;#asm<br />

clr.l d0<br />

btst #6,$bfe001<br />

bne.s lm<br />

add.l #1,d0<br />

lm:<br />

;}<br />

.10<br />

movem.l (sp)+,.9<br />

unlk a5<br />

rts<br />

.8 equ 0<br />

.9 reg<br />

public _printf<br />

public .begin<br />

dseg<br />

end<br />

Programın assembler listesi içinde ';' işaretlerinden sonra hangi<br />

C satırının assembler diline çevrildiği yazılmış. Bu sayede programı<br />

incelemek gerçekten çok kolay olmakta.<br />

Listeye baktığımızda, çeşitli assembler komutları ile karşılaşıyoruz.<br />

Buradaki komutların bir kısmı, yalnızca Aztec Assembler<br />

için kullanılıyor. Diğerleri ise standart assembler komutları. Bu<br />

etapta bizi ilgilendiren birkaç komut var. Bunlardan listenin başında<br />

görmüş olduğunuz gibi ana main bloğu,<br />

public_main<br />

_main:<br />

olarak seviyelendirilmiş. Buradaki 'public' komutu '_main' isminin<br />

bir rutin ismi olduğunu belirtiyor. Gerçekten de programımızın<br />

başlangıç rutini buradan başlıyor. Diğer alt rutinlerde aynı şekilde<br />

tanımlanmış. Bu sayede assembler listesi içerisinde bir alt<br />

rutin ismi tanımlamak mümkün. Bizim kullandığımız mouse()<br />

rutini de,<br />

public_mouse<br />

_mouse:<br />

olarak tanımlanmış. '_mouse' başındaki'_' işareti assembler derleyici<br />

tarafından rutin ismi olduğunu belirtmek için kullanılıyor.<br />

Bu işaret aynı zamanda global olarak tanımlanan değişkenlerin<br />

başında da kullanılıyor.<br />

Programın en son satırlarında ise,<br />

public<br />

public<br />

orintf<br />

.begin<br />

AMIGA DÜNYASI 23

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!