Kleine AVR Assembler Frage

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From German to

Threaded View
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

Re: Kleine AVR Assembler Frage


Michael Dreschmann schrieb:
Quoted text here. Click to load it

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


Re: Kleine AVR Assembler Frage
Hi!

Quoted text here. Click to load it

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

Quoted text here. Click to load it

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

Danke für deine Antwort.

Michael

Site Timeline