Hallo fhs,
vielen Dank erstmal. Aber denke das ist nen kleiner Denkfehler (woran es auch mir wohl hapert)
Deine ersten Zeilen machen ja folgendes:
Code:
cpi r16,5 ;vergleiche r16 mit 5
brpl leave_while ;wenn r16 >5 dann verlassen
cpi r17, r18 ;vergleiche r17 mit r18
breq leave_while ;wenn r17=r18 verlassen
Soweit verständlich, ABER in die while-Bedingung lautet ja (a < 5 && b != c). Dieses UND da drin stört mich, es müssen also beide Bedingungen zutreffen um die while-Schleife zu verlassen.
Dein code prüft aber erst die erste Bedingung und würde die Schleife schon verlassen wenn diese zutrifft. Danach prüfst du ja erst die zweite Bedinung.
Also müssten ja erste Bedinung A geprüft werden ("ist a > 5?") und wenn die antwort TRUE ist, dann Bedingung B prüfen (ist c != c) und wenn das auch TRUE ist nur dann die Schleife verlassen.
Ist aber einer der beiden Bedingungen FALSE dann muss die Schleife weiterlaufen.
Oder hab ich da ein Denkfehler ??

Zitat von
fhs
Hallo Lalas,
hier mal ganz schnell und schmutzig und ohne Garantie eine Variante....
Code:
while_entry:
cpi r16, 5 ; a - 5 ?
brpl leave_while ; "while" verlassen wenn a>=5
cp r17, r18 ; b - c
breq leave_while ; "while" verlassen wenn b==c
add r16, r17 ; a += b
cpi r17, 5 ; b - 5
brpl b_plus_2 ; verzweige wenn b >= 5
inc r17 ; else ++b
rjmp while_entry ; und noch einmal
b_plus_2:
subi r17,-2 ; b+=2
rjmp while_entry ; und noch einmal
leave_while: ; fettisch!
---Kommentare hinzugefügt!---
Gruß
Fred
Lesezeichen