wie komm ich mit welchen vergleich ans ende:, wenn der wert r19 "0" ist? Sub wait_() $Asm lds r19,w ....wenn der wert r19 "0" ist dann nach ende gespringen !!! WGLOOP3: ldi r18,255 WGLOOP1: ldi R17, $01 WGLOOP0: Nop Nop dec R17 brne WGLOOP0 dec R18 brne WGLOOP1 dec R19 brne WGLOOP3 ende: $EndAsm End Sub
Ich empfehle das Studium der Befehlsreferenz der Atmel-µC :) $Asm lds r19,w tst r19 breq ende ... Ansonsten könnte man auch darauf achten, das in R19 keine Null geladen wird (die Speicherzelle w also nicht auf Null gesetzt werden kann).
Was karl-heinz vielleicht etwas verwirrt hat: BREQ heißt ja eigentlich "branch if equal" und wird ja eigentlich mit CMP/CPI verwendet. Dazu müsste man wissen, dass der CMP und CPI Befehl nichts anderes macht als die Differenz der beiden Operatoren zu bilden und bei Gleichheit das Zero-Flag setzt. BREQ wertet also eigentlich nur das Zero-Flag aus. Und das ZF wird auch gesetzt, wenn ein Register dekrementiert wird und als Resultat den Wert 0 hat. Beim 8086 sind z.B. die Befehle JE (Jump-Equal) und JZ (Jump-Zero) identisch.
Falls es dir um die Analyse des Codes ging: dec R17 brne WGLOOP0 dec R18 brne WGLOOP1 dec R19 brne WGLOOP3 ende: BRNE springt, wenn Zero-Flag nicht gesetzt ist. DEC setzt Zeroflag nur, wenn der Wert beim Vermindern 0 wird. ende: wird also nicht "angesprungen", sondern das Programm landet bei ende, wenn alle Rücksprünge wegen gelöschtem Zero-Flag (BRNE) ausfallen. In einer Hochsprache vereint ein Befehl die Bedingungsprüfung mit der Verzweigung. In ASM ist das getrennt. Bestimmte Operationen (add, sub, and, or..., aber nicht mov, lds...) beeinflussen die Flags im SREG. Das passiert auch, wenn dich die Flags nicht weiter interessieren, also wenn wenn du nur rechnest, ohne eine Verzweigung im Sinn zu haben. Willst du eine Verzweigung (bedingter Sprung) machen, dann achte auf den Befehl, der zuletzt die Flags im SREG verändert hat und springe anhand der Flagzustände. Anhand von "$Asm" sehe ich, dass du vermutlich nicht mit AVR-Studio arbeitest. Wenn dich AVR-ASM wirklich interessiert, dann solltest du AVR-Studio benutzen, denn damit hast du neben dem Simulator auch noch eine Online-Befehlsreferenz (F1-Taste, wenn Cursor auf einem ASM-Befehl steht). ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.