Forum: Mikrocontroller und Digitale Elektronik Subtraktion AVR Assembler


von Lukas (Gast)


Lesenswert?

Kann mir wer erklären warum bei dieser Subtraktion das N Flag gesetzt 
wird?
temp wird von temp2 abgezogen
und temp1 wird von temp3 abgezogen.
Kommt ja kein negatives Ergebnis raus?!

        ldi    temp,0x20
  ldi    temp1,0x58

  ldi    temp2,0xFF
  ldi    temp3,0xFF


  sub    temp2,temp
  sbc    temp3,temp1

  brmi          minus1
  jmp    plus1

Danke!
LG

von wire (Gast)


Lesenswert?

0xff ist -1

von Karl H. (kbuchegg)


Lesenswert?

Lukas schrieb:

> Kommt ja kein negatives Ergebnis raus?!

Wenn man das Eregbnis als 2-er Komplement Zahlen auffassen will (und das 
tust du wenn du das N-Flag betrachtest), dann kommt da ein negatives 
Ergebnis raus.

0xFFFF    ist als 2-er Komplement    -1
davon etwas abgezogen was kleiner als 0x7FFFF (die größte positive Zahl) 
ist -> das Ergebnis bleibt negativ

von Luke (Gast)


Lesenswert?

OkaY alles klar.
Dann muss ich wohl ein bisschen software umschreiben :-)
Danke euch!

von Peter D. (peda)


Lesenswert?

Ob Operationen als signed oder unsigned betrachtet werden, hängt nur 
davon ab, welche Flags Du danach testest.

Ein unsigned Überlauf setzt das C-Flag.
Ein signed Überlauf setzt das V-Flag.

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
Noch kein Account? Hier anmelden.