Kleine AVR Assembler Frage

Hallo,

ich bin gerade dabei ein Stück Assembler-Code für einen AT90S8515 zu debuggen. Dabei gibt es folgenden Programmteil, von dem ich nicht sicher weiss, ob er auch das tut, was ich will:

cp ACT_PAN_POS_L,TEMP_L cpc ACT_PAN_POS_H,TEMP_H breq PC_EQU cp ACT_PAN_POS_L,TEMP_L cpc ACT_PAN_POS_H,TEMP_H brlo PC_INC cp ACT_PAN_POS_L,TEMP_L cpc ACT_PAN_POS_H,TEMP_H brsh PC_DEC

In ACT_PAN_POS und TEMP liegt jeweils ein 16 Bit word. Diese beiden möchte ich nun vergleichen und abhänig vom Ergebniss (gleich, kleiner, grösser) an 3 verschiedene Stellen springen. Nun bin ich mir nicht sicher, ob die Variante mit erst Compare (cp) Low-byte und dann Compare with Carry (cpc) High-byte auch mit allen drei verwendeten Sprungbefehlen (breq, brlo und brsh) richtig funktioniert. Vielleicht weiss da einer Bescheid und kann mir das kurz beantworten.

Michael

Reply to
Michael Dreschmann
Loading thread data ...

Michael Dreschmann schrieb:

Hallo,

das müsste viel einfacher gehen:

cp ACT_PAN_POS_L,TEMP_L cpc ACT_PAN_POS_H,TEMP_H breq PC_EQU brlo PC_INC brsh PC_DEC

Schau mal nach wann die Flags bei den Compare Befehlen gesetzt und gelöscht werden, die Branch Befehle sollten eigentlich die Flags nicht löschen, dann ist aber eine Wiederholung der Compare Befehle nicht nötig. Bei den Add und Add with Carry Befehlen ist evtl. die Verwendung des Carry Bits genauer erläutert, aber 16 statt 8 Bit sollte so bei Addieren und Vergleichen gehen, aber beim AVR kenne ich es nicht.

Bye

Reply to
Uwe Hercksen

Hi!

Ok, stimmt, da stand ich bischen aufm Schlauch, als ich das geschrieben habe...

Ja, scheind schon so richtig zu sein, jedenfalls habe ich den Fehler jetzt woanders gefunden. :)

Danke für deine Antwort.

Michael

Reply to
Michael Dreschmann

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.