call komutu ve stack

Başlatan Tom, 21 Şubat 2007, 20:34:00

Tom

Arkadaşlar ben 18f452 kullanıyorum.Kısaca bu işin pirlerine bir şey sormak isterim.call komutu ile program alt programa dallandıgında alt program içinde goto komutu ile ana programın başına ve tekrar call komutu ile alt programa ve tekrar goto komutu ile ana prog başına..
bu şekilde stack taşması olurmu eger olur ise goto komutu ile alt programdan çıkarken alt programın stack pointerde ki geri dönüş adresini silip böylelikle taşmalara mani olamazmıyız?Bunu nasıl yaparız.Üstatlarımdan cevap bekliyorum...SAYGILAR

mesmert

Stack sorunu daha önce forumda tartışılmıştı Microchip diğer ürünleri için 18f serisinde bildiğim kadarıyla software olarak kontrol edebiliyorsun ama nasıl yapılıyor dersen oturup data sheet bakmak lazım

sertac2003

Alıntı yapılan: "Tom"
bu şekilde stack taşması olurmu

herhangi bir yerde call kullandın, program çalışmaya devam ediyo... prg. tekrar call ile karşılaştığında stack bir seviye artar. goto ile gitmenin bir artısı yok. malesef olur...

Alıntı yapılan: "Tom"
eger olur ise goto komutu ile alt programdan çıkarken alt programın stack pointerde ki geri dönüş adresini silip böylelikle taşmalara mani olamazmıyız?

olursun. ama bu seferde call kullanmanın bir anlamı kalmamış oluyo. call-return ikilisi yerine goto kullanarak programı yazmış gibi oluyosun. basit programlarda call-return yerine goto yu akıllıca kullanarak stack ı fazladan yeme olayından kurtulabilirsin ama büyük programlarda başına dert olabilir...
Şirketteki herkes en üst yöneticinin müşterisidir.

rree

18f452 de Yığın belleği istediğin gibi değiştirebiliyorsun uzun zaman oldu
hangi komut ve registerdi hatırlamıyorum. Pdf dok larında var idi.
multi tasking programı yazmıştım. yığın bellektiki bilgileri rama ramdaki bilgileri yığın belleğe stack a atmıştım.

Tom

keşke yaptıgınız örnege ulaşma imkanımız olsa çok süper olacak.Aslında bana lazım olacak şu; stack teki tüm verileri taşımak yerine , sadece tespit ettiğim 1 adet call komutunun dönüş adresini stack ten almak ve geri dönmeden yani return dan evvel onu yerine koymak tüm problemim bu.