Forum: Mikrocontroller und Digitale Elektronik bedingter Sprung


von Sven Schertzinger (Gast)


Lesenswert?

Hallo,

hätte eine Frage zu bedingten Sprungbefehlen.
Ich möchte 2 Zahlen miteinander vergleichen und nur wenn die eine Zahl
größer ist wie die andere, dann soll der Sprung ausgeführt werden,
ansonsten wird das Programm weiter abgearbeitet. Ist die in Assembler
überhaupt möglich?

z.B.:
4>3? --> Ja, Sprung an eine andere Stelle
2>3? --> Nein, Programm wird weiter abgearbeitet

von Stefan Pfister (Gast)


Lesenswert?

Falls du das mit einem AVR machen willst gibt es gleich ein paar
Möglichkeiten, es spielt auch eine Rolle ob es vorzeichenlose Zahlen
sind oder nicht:

BRGE
BRLO
BRLT
BRSH

Näheres verrät dir der instruction set des jeweiligen AVR

Gurss

von Sven Schertzinger (Gast)


Lesenswert?

Es ist ein Atmel-Controller...Programmiert wird über das Atmel-Tool
Flip...

Genauer gesagt, möchte ich vergleichen ob die Zahl im Akku größer oder
gleich 10 ist bzw. anders herum geht es auch, ob die Zahl im Akku
kleiner gleich 9 ist.

von Hannes L. (hannes)


Lesenswert?

Was ist denn ein Atmel-Controller?

Atmel produziert eine breite Palette verschiedener Controllerfamilien,
unter Anderem, 8051er (At89xx), AVRs (AT90xx), ARM (AT91xx)...

Wenn du also konkrete Hilfe haben willst, dann nenne das Teil beim
korrekten Namen, so dass keine Missverständnisse möglich sind.

...

von Sven Schertzinger (Gast)


Lesenswert?

Habe den AT89C51CC03

von Hannes L. (hannes)


Lesenswert?

Bei AVR hätte ich helfen können, von 8051 habe ich keine Ahnung...

...

von Sven Schertzinger (Gast)


Lesenswert?

Kein Thema, dennoch Danke!

von Dieter (Gast)


Lesenswert?

Mal so aus dem Ärmel geschüttelt:
Prüfen auf Gleichheit: CNJE oder alternativ eine Zahl von der anderen
Subtrahieren und wenn Zero rauskommt, mit JZ springen.

Zum prüfen auf größer oder kleiner:
Carry - Flag setzen
Eine Zahl von der anderen Abziehen unter Berücksichtigung des Carry
Flags. Wenn das Carryflag nach der Operation verschwindet, war die
erste Zahl größer als die andere (Sprung mit JNC). Wenn das Carryflag
noch vorhanden ist, war die zweite Zahl größer als die erste (Sprung
mit JC)

Klingt kompliziert, sind aber nur zwei oder drei Befehle
hintereinander....

von Sven Schertzinger (Gast)


Lesenswert?

Habe es mittlweile so gelöst:


Subtraktion:

  subb A, #0Ah  ;vom Akku wird 10 abgezogen
  jnc Subtraktion ;Sprung an Label Subtraktion, wenn Carry-Bit 0 ist
  add A, #0Ah  ;10 wieder hinzuaddieren um die letzte positive
Einer-Stelle zu erhalten
  add A, #30h  ;hinzuaddieren der Zahl 0 im Hex-Code um richtige
Hex-Zahl zu erzeugen
  mov R3, A    ;Inhalt vom Akku in R3 kopieren (Einer-Stelle)

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.