GOSUB hangi durumda gecersiz kalır / kalırmı ?

Başlatan OG, 05 Ocak 2006, 23:31:29

OG

Arkadaşlar GOSUB komutu kafama takıldı, ustalara 3 sorum olacak.

-GOSUB komutunun gerektirdiği geri dönüş icrasını yok edecek bir komut varmıdır?

-GOSUB dan sonra gittiğimiz yerde 2. bir GOSUB komutu ile karşılaşırsak ilki ile kaydedilen dönüş adresi silinip ikincisi ile değiştirilirmi?

-GOSUB ile bir satıra gittik. Ardından RETURN ile karşılaşmadan çok adet GOTO karşımıza çıkıp sağa sola uçtuk. Bundan sonra karşılaşılacak ilk RETURN de bizi geri götürürmü?
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Petek

Alıntı yapılan: "OG"Arkadaşlar GOSUB komutu kafama takıldı, ustalara 3 sorum olacak.

-GOSUB komutunun gerektirdiği geri dönüş icrasını yok edecek bir komut varmıdır?
Çağırdığın alt programdan, çağıran programa yada ana programa goto ile dönüş yaparsan çok büyük hata yapmış olursun(derleyicinin buna müsaade etmemesi gerekir). stack içerinde tutulan son adres alt programın çağırıldığı adresin bir sonrasıdır. çağıran programa goto ile döndüğünde o da alt program ise ve ondan geri dönmek istediğinde dönemezsin ve stackta kayıtlı olan kendisinin içerisinde bulunan adrese dönersin.
Alıntı Yap
-GOSUB dan sonra gittiğimiz yerde 2. bir GOSUB komutu ile karşılaşırsak ilki ile kaydedilen dönüş adresi silinip ikincisi ile değiştirilirmi?
Pic 16F serisi ve 12F serisinde 8 adet stack alanı vardır.  interrupt kullanıyorsan interruptın kendisi ve çağırdığı alt programlar da dahil iç içe 8 seviye alt program çağırabilirsin. interrupt işinde biraz dikkatli olmak lazım. Eğer alt program çağırma sayısında 8 i geçersen 9. 1.nin yerine yazılır, 10. da 2.yerine. Bundan sonra 3 defa return yaparsan tekrar 8. stack alanındaki adrese döner(stack pointer 7. alanı gösterir). Ana programa (1. seviye) ve ana programdan çağırılan 2. seviye alt programlara bir daha dönemezsin. 3. seviye alt proramdan 2. seviye alt programa dönmek istediğinde 10. seviyede çağırdığın alt programa dönmüş olursu zira 2. stack alanında 10.nun adresi kayıtlıdır). (1. seviye main program kabul ederek yazdım bunları)
Alıntı Yap
-GOSUB ile bir satıra gittik. Ardından RETURN ile karşılaşmadan çok adet GOTO karşımıza çıkıp sağa sola uçtuk. Bundan sonra karşılaşılacak ilk RETURN de bizi geri götürürmü?
Evet. GOSUB ile çağırma yaptığın işlemden sonraki işleme dönersin.
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

Veli B.

Alıntı yapılan: "microchip's ds"
..STACK
The PIC16XXXX family has an 8-level deep x 13-bit wide hardware stack. The stack space is not part of either program or data space and the Stack Pointer is not readable or writable. The PC is PUSHed onto the
stack when a CALL instruction is executed or an interrupt causes a branch. The stack is POPed in the event of a RETURN, RETLW or a RETFIE instruction execution. PCLATH is not affected by a PUSH or POP
operation.
The stack operates as a circular buffer. This means that after the stack has been PUSHed eight times, the ninth push overwrites the value that was stored from the first push. The tenth push overwrites the second push (and so on).

Note:
1. There are no status bits to indicate stack overflow or stack underflow conditions.  
2. There are no instructions/mnemonics called PUSH or POP. These are actions that occur from the execution of the CALL, RETURN, RETLW and RETFIE instructions or the vectoring to an interrupt address.

Ustalar detaylı bilgi verecektir ama o zamana kadar isis de sampledan basit bir devreyi(ör:pic 4 bit lcd) adım adım koşturursanız, iç yapının işleyişini rahat bir şekilde inceleyebilirsiniz.

]

OG

Çok sağolun arkadaşlar.

edit,

mhk sağol, piclerde 18 serisine doğru geçmek lazım gibi görünüyor
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

mhk

Sevgili OG... 18 F serisi için STKPTR registerini incelemeni tavsiye ederim. Örneğin 18F452 datasheet içinde var. Stack yazmacı. Burda ilk 4 bit yer bilgisi mevcut. Bunu 0 yaparsan silmiş olursun.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana