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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren