6 einfache Assembler Zeilen gehen nicht.

Gast #1156513
Lesenswert?
• ▲
▼
Ich kann nichts Fehlerhaftes daran finden. Vielleicht glaubst du 
irrtümlich, das es nicht funktioniert?

Du kannst es aber einen Tick einfacher machen:
1
    ldi  r17 , 156
2
    subi r17, 100
3
    brcc _IsGreaterZero
4
    clr  r17
5
_IsGreaterZero:
6
    nop
Gast #1156844
Lesenswert?
• ▲
▼
Ich wollte keinen Sprung Befehl benutzen, da ich diese Zeilen 4 mal 
nacheinander ausführen muss. Ich müsste dann also 4 Sprungmarken 
definieren und das wollte ich vermeiden. Aber Egal: Als ich gemerkt 
habe, dass es nicht funktioniert, HABE ich schon die Variante mit 
Sprungmarke getestet, das hat aber auch nicht funktioniert.

Stelle ich die Zeilen am Anfang des Programms, funktionieren sie (mit 
dem Debugger in Einzelschritt) prächtig!

An der Richtigen Stelle, wird das "CLR R17" IMMER ausgeführt. R17 ist 
nach den Anweisungen also immer 0.

Das einzige, was ich mir jetzt vorstellen könnte, ist dass nach dem SUBI 
das Programm von einem Interrupt unterbrochen wird und dass die 
Interrupt-Routine das C-Flag setzt. Jedoch sichere ich eigentlich in der 
Interrupt-Routine die Status Flags....
Gast #1156924
Lesenswert?
• ▲
▼
So, habe den Fehler gefunden.

Die Zahl in R17 war ursprünglich eine 2 Byte Zahl. Nachdem ich aber 100 
subtrahiere, wurde sie zur 1 Byte Zahl. Also wurde bei SUBI R17,100 Das 
Carry Flag IMMER gesetzt. Deshalb dachte ich fälschlicherweise, es wäre 
ein Fehler in den paar Zeilen.

Die Lösung: ich ziehe von der 2 Byte Zahl in R17 UND R18 100 ab. R18 
muss danach 0 sein, ist es 255, fand ein Überlauf statt...

Klappt Wunderbar.
Gast #1156933
Lesenswert?
• ▲
▼
Man kann die Sprungbefehle (br**, rjmp) auch ohne Sprungmarken 
verwenden:
1
    ldi  r17, 156
2
    subi r17, 100
3

4
    brcc PC+2         ; PC = program counter
5
    clr  r17
6

7
    nop

>Die Lösung: ich ziehe von der 2 Byte Zahl in R17 UND R18 100 ab. R18
>muss danach 0 sein, ist es 255, fand ein Überlauf statt...

Hoffentlich machst Du das ordentlich, sonst liegt der nächste 
"unerklärliche" Fehler schon auf der Lauer.
Gast #1157157
Lesenswert?
• ▲
▼
Das mit dem PC + 2 ist gut, gefällt mir... ist fast wie früher ;-)

Denke schon dass ich das Ordentlich mache, bisher funktioniert zumindest 
alles. Naja fast alles. Das nächste Problem lauert schon in der Ecke und 
wartet nur darauf losgelassen zu werden. ;-) Hat aber nichts hiermit zu 
tun...

Vielen Dank für Eure Hilfe!!!
Gast #1157163
Lesenswert?
• ▲
▼
> Das mit dem PC + 2 ist gut, gefällt mir... ist fast wie früher ;-)

Stimmt, das ist gut, besonders für Macros. Achte aber darauf, welche 
Befehle Du damit überspringst. Denn nicht jeder Befehl passt in ein 
Word. Wenn man das nicht berücksichtigt, dann hat man sich schnell mal 
verzählt.

Was hast Du eigentlich für eine Motivation, Labels einsparen zu wollen? 
Labels fressen doch keine Ressourcen im AVR, und im PC verriecht sich 
deren Ressourcenverbrauch.

KH

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.