Forum: Mikrocontroller und Digitale Elektronik negative 16Bit Zahl (Assembler) Frage


von Bernhard S. (bernhard)


Lesenswert?

Ich möchte prüfen, ob die vorzeichenbehaftete Ganzzahl negativ ist.

  andi temp2,0b10000000
  tst  temp2
  breq ZAHL_POSITIV
  brne ZAHL_NEGATIV

Gibt es noch eine bessere Variante?


Und jetzt soll der Betrag der negativen Ganzzahl gebildet werden
  com temp1          ' LOW
  com temp2          ' HIGH
  ldi temp3,1
  clr temp4
  add temp1, temp3   '+1
  adc temp2, temp4

Ist dieses Verfahren zu umständlich, gibt es bessere?

Danke

Bernhard

von A.K. (Gast)


Lesenswert?

BRMI/BRPL

von Bernhard S. (bernhard)


Lesenswert?

> BRMI/BRPL

Stimmt, kann aber nur z.B. nach einer Subtraktion verwendet werden.

Ich hatte vergessen zu sagen, dass der Inhalt dieser Register an einer
ganz anderen Stelle geladen wird (TWI/USART).

von tsetse (Gast)


Lesenswert?

... oder nach einem tst:

tst temp2
brpl / brmi


  com temp1          ' LOW
  com temp2          ' HIGH
  inc temp1
  breq a
  inc temp2
a:

von tsetse (Gast)


Lesenswert?

oops
  com temp1          ' LOW
  com temp2          ' HIGH
  inc temp1
  brne a  'überspringe den nächsten Befehl, wenn kein Übertrag
(FF->00)
  inc temp2
a:

von Rolf Magnus (Gast)


Lesenswert?

Ich hab's einfach mal in C geschrieben und geschaut, was der Compiler
aus einem abs macht, und das scheint mir die kürzeste Variante zu
sein:
1
        sbrs temp2,7
2
        rjmp .L2
3
        com temp2
4
        neg temp1
5
        sbci temp2,lo8(-1)
6
.L2:

von Bernhard S. (bernhard)


Lesenswert?

Danke für Eure guten Ideen, sie haben mir weiter geholfen.

Gruß

Bernhard

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.