theoretisch könnte das gehen, aber absolut unsinnig
dein ganzer code ist sehr unstruktiert und chaotisch, besser macht man
es so:
mainloop:
call routine1
rjmp mainloop
routine1:
tu dies
tu jenes
IF FallA jump Skip_FallA
NICHTFall A:
tu was anderes (fehlerbehandlung)
jump Ende_routine1
Skip_FallA:
FallA:
da alles ok,
mache hier die eigentliche aufgabe
Ende_routine1:
ret
bei solchen if then else verzweigungen sollte man einen codeblock für
den NICHT fallA mit branchbefehl oder jmp überspringen der zum fallA
führt. wenn NICHT FallA gilt, wird dieser Skip nicht ausgeführt, und es
geht direkt im anschluss an den Bedingungstest zum NICHT FallA teil, an
dessen ende dann wiederrumm ein Skip des FallA steht (hier jump Ende)
Für die Bedingungstests gibts zwei konstrukte: die logischen branch
befehle wie brne, mit denen du nach compare oder sonstigem z.b. den
gegenteiligen fall per Skip-sprung überspringst.
und dann gibt es den oft hilfreichen Skip if bit set, mit denen du
einzelne Flags checken kannst:
Routine2
SBRS Register, Bitnummer
rjmp SkipBitistgesetzt
(hier der teil für den fall das Bit gesetzt ist)
rjmp SkipBitnichtgesetzt:
SkipBitistgesetzt:
(hier den teil für den fall das bit nicht gesetzt=
SkipBitnichtgesetzt:
...
ret
wenn du dich an die üblichen programmkonstruke der hochsprachen hälst
vermeidet man die berüchtigten unlessbaren assemblerschweinerein. IF
THEN ELSE kann man mit obigen Modellen nachbauen, Switchcase ebenso,
for A do X kann man so machen:
Loop:
IF FallA, jump break_loop
schleifeninhalt X
rump loop
break_loop:
...
weiter
do X while A dann so:
loop2:
schleifeninhalt X
if A jump loop2
...
weiter
wenn man ein switchcase für flags haben will, lässt es sich elegant so
machen:
Skip if bit A cleared
call bitAset
jump break
Skip if bit B cleared
call bitBset
jump break
... weitere skip if
break:
besonders vermeidest du so, das es zu jedem routinenanfang mehrere
returns an verschiedenen sprungzielen gibt, was sehr undurchsichtig ist
und eine fehlerquelle sein kann.
programmteile die einzelne routinen darstellen solltest du auch deshalb
nie mit jump ansteuern, auch wenn die routine immer nur zur selben
stelle zurückkehrt. besonders aber lass die finger von
stack-pfuschereien, das kann sehr sporadische fehler geben die erst nach
ein paar wochen auftauchen.