Return komutunu atlayarak başa dönebilirmiyim ?

Başlatan ÜC, 08 Ekim 2015, 16:04:57

ÜC

  Arkadaşlar merhaba.


basla:
call ledyak1

goto basla

ledyak1:
;kodlar
call ledyak2
return

ledyak2:
;kodlar
call ledyak3
return

ledyak3:
;kodlar
if ... then goto basla      ;Buradan başa döneceğim
;kodlar
return

ledyak3 alt programında gerekirse  başa döneceğim ama returnları atlamış olacağım. Hatırladığım kadarıyla returnları atlamanın belirli bir limiti ve bu limiti tutan bir register vardı.Bu registeri başa döndüğümde sıfırlayarak returnları atlayabilirmiyim veya bunu yapmanın pratik bir yöntemi varmı ?

ferit06

sizin programınızda;

ledyak3:
;kodlar
if ... then goto aa     ;Buradan başa döneceğim
;kodlar
aa:
return

demeniz  program akışınızı ledyak2 --> ledyak1 --> sonunda basla 'ya  ( 3 return işlemi de gerçekleşir)götürür.

ÜC

Ben bir üst programlara geldiğim yoldan çıkarak değil direkt baslaya geçmek istiyorum.Yukarda verdiğim örnek bir koddu , programda yeri geliyor 10 dallanma yapmam gerekiyor ve her birinden bir üste çıkarak baslaya gitmek yerine direkt gitmek çok rahat olacak

ferit06

#3
Stack limiti  nedeniyle her işlemcide 10 dallanma yapamazsınız. Sizin programınızda kodlar olarak gizlediğiniz kısımlar hariç en azından 3 stack kullanılıyor. Alt program kullanıyor iseniz return ları kullanmak zorundasınız. Aksi takdirde hangi işlemciyi kullanısanız kullanın stack limiti dolar ve programınız çalışmaz.

z

Bu tip programlarda Goto ile en başa gitmenizde sakınca yok.

Yeterki en başa gittiğiniz program parçası bir başka yerden Call ile çağrılmamış olsun.

Yani aşağıdaki yapı olmaz.

Gosub Basla           
.....
.....


Basla: Gosub L1
          ......
          Return

L2:     Gosub L3
          ......
          Return

L3:     Gosub L4
          ......
          Return

L1:     ......
         if .... Goto Basla
         Return
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ÜC

Kestirmeden gidebiilirmiyim dedim ama bilinen yoldan gitmek gerekiyormuş  , cevaplar için teşekkürler..

kayatech

basla:
gosub ledyak1
gosub ledyak2
gosub ledyak3

goto basla

ledyak1:
;kodlar
return

ledyak2:
;kodlar
return

ledyak3:
;kodlar
return

yapın.


yaparsanız her dönüşte zaten basla etiketine dönmüş olursunuz. Bence bu bile yanlış çünkü yanlış bir algoritma kuruyorsunuz gibime geldi. Bunu görmek için de programın amacını bilmek gerekir.


vale9

Software reset yapmak işinizi görebilir (eğer değişken değerlerinin silinmesi önemli değil ise)
Hayat 1'ler ve 0'lardan ibarettir.