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ı ?
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.
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
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.
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
Kestirmeden gidebiilirmiyim dedim ama bilinen yoldan gitmek gerekiyormuş , cevaplar için teşekkürler..
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.
Software reset yapmak işinizi görebilir (eğer değişken değerlerinin silinmesi önemli değil ise)