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
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